본문으로 건너뛰기

v1.7.3 — AI 종합진단 Overhaul + Auto-Collect 에이전트

· 약 6분

AI 종합진단이 완전히 새로워졌습니다. DOCX/Markdown/PDF 3종 내보내기, 예약 리포트(주간/격주/월간), 그리고 데이터를 자동으로 수집하는 6종 Auto-Collect 에이전트를 추가했습니다. EKS 페이지도 클러스터 액세스 관리, Describe 패널, Service Resources 탭 등 대폭 개선되었습니다.

핵심 변화

AI 종합진단 리뉴얼 · DOCX/MD/PDF 내보내기 · 예약 리포트 · 6종 Auto-Collect 에이전트 · FinOps MCP 5도구 · EKS 클러스터 액세스 관리 · Powerpipe exit code 2 처리

AI 종합진단 리뉴얼

기존 /diagnosis 경로가 /ai-diagnosis로 변경되고, UI 전반이 리뉴얼되었습니다.

Before / After

항목Before (v1.7.2)After (v1.7.3)
경로/diagnosis/ai-diagnosis
이름종합진단AI 종합진단
내보내기PPTXDOCX + Markdown + PDF
예약 리포트주간/격주/월간
S3 업로드DOCX + MD 자동 업로드

3종 내보내기

DOCXdocx 패키지 기반 A4 전문 리포트:

  • 표지 (제목, 건강 점수, 계정 별칭, 날짜)
  • 목차 (하이퍼링크, Heading 1-3)
  • 섹션별 강조색 (비용=초록, 보안=빨강, 네트워크/EKS=보라, 유휴/MSK=주황)
  • 마크다운 파싱 (제목, 테이블, 목록, 인용, 인라인 코드/볼드/이탤릭)

Markdown — 모든 섹션을 하나의 .md 파일로 합쳐 내보냅니다.

PDF/ai-diagnosis/report 전용 인쇄 페이지:

  • 흰 배경 A4 레이아웃, CSS @media print 페이지 나눔
  • "인쇄 / PDF 저장" 버튼으로 브라우저 Print-to-PDF
// src/lib/report-docx.ts (주요 구조)
const doc = new Document({
sections: [
coverPage(title, healthScore, accountAlias, date),
tableOfContents(),
...sections.map(s => sectionPage(s, accentColor)),
],
});
const buffer = await Packer.toBuffer(doc);

예약 리포트

항목설명
빈도주간 / 격주 / 월간
시간대KST (UTC+9)
설정요일(0-6), 일자(1-28), 시간(0-23)
저장data/report-schedule.json
체크 주기5분마다 스케줄 확인
// src/lib/report-scheduler.ts
type Schedule = {
enabled: boolean;
frequency: 'weekly' | 'biweekly' | 'monthly';
dayOfWeek?: number; // 0=일 ~ 6=토
dayOfMonth?: number; // 1~28
hour: number; // KST 기준
language: 'ko' | 'en';
};

UI에서 토글 ON/OFF, 빈도/요일/시간/언어를 설정하면 자동으로 리포트가 생성되고 S3에 업로드됩니다.

S3 업로드

DOCX와 Markdown 파일은 awsops-deploy-{accountId}/reports/ 경로에 자동 업로드됩니다. 7일간 유효한 Presigned URL을 통해 다운로드할 수 있습니다. CDK 스택에 S3 PutObject/GetObject 권한이 자동 추가됩니다.

6종 Auto-Collect 에이전트

AI 종합진단 리포트의 데이터 수집을 자동화하는 전용 에이전트입니다. 각 에이전트는 멀티 소스에서 병렬로 데이터를 수집하고 라이브 상태를 스트리밍합니다.

에이전트소스수집 항목
EKS OptimizePrometheus + K8s + SteampipeCPU/메모리 사용률, 스로틀링, Pod 재시작, HTTP 5xx, 노드 활용도
DB OptimizeSteampipe + CloudWatchRDS/ElastiCache/OpenSearch 인스턴스 발견 + 메트릭 기반 라이트사이징
MSK OptimizeSteampipe + CloudWatch + Prometheus브로커 메트릭, 메시지 처리량, 컨슈머 랙, 파티션 수
Idle ScanSteampipe미부착 EBS, gp2 볼륨, 미사용 EIP, 중지 EC2, 90일+ 스냅샷, 미사용 SG + 비용 추정
Trace AnalyzeTempo/Jaeger + Prometheus서비스별 에러 트레이스, 500ms 초과 느린 트레이스
IncidentCloudWatch + K8s + PrometheusALARM 상태 알람, Warning 이벤트, HTTP 5xx 급증, CPU 스파이크, 메모리 압박
// src/lib/collectors/types.ts
export interface Collector {
collect(send: SendFn, accountId?: string, isEn?: boolean): Promise<CollectorResult>;
formatContext(data: CollectorResult): string;
analysisPrompt: string;
displayName: string;
}
Collector 패턴

모든 에이전트가 동일한 Collector 인터페이스를 구현합니다. collect()Promise.allSettled로 멀티 소스를 병렬 수집하고, SendFn 콜백으로 진행 상황을 실시간 전달합니다. 새 에이전트 추가 시 이 인터페이스만 구현하면 됩니다.

FinOps MCP Lambda

Cost Gateway에 5개 FinOps 도구가 추가되었습니다.

도구소스설명
get_rightsizing_recommendationsCompute OptimizerEC2/RDS/ECS/Lambda 라이트사이징 + 월간 절감액
get_savings_plans_recommendationsCost ExplorerSavings Plans 구매 추천 (1년/3년, No Upfront)
get_reserved_instance_recommendationsCost ExplorerRI 구매 추천 (EC2/RDS/ElastiCache/Redshift)
get_cost_optimization_hub_recommendationsCost Optimization Hub통합 최적화 추천 (Rightsize/Stop/Upgrade/SP)
get_trusted_advisor_cost_checksTrusted Advisor비용 최적화 카테고리 체크 + 플래그 리소스

모든 도구는 target_account_id 파라미터로 크로스 계정 조회를 지원합니다.

EKS/K8s UX 대폭 개선

클러스터 액세스 관리

기능설명
액세스 상태 뱃지클러스터별 "Access Entry" 등록 여부 표시
원클릭 등록"Register ViewPolicy" 버튼으로 Access Entry + Policy 자동 생성
연결 감지K8s 쿼리 결과의 context_name 존재 여부로 실제 연결 상태 판별
CLI 가이드미연결 클러스터에 대해 EC2 Role ARN 기반 등록 명령어 안내

새 기능

기능파일설명
Describe 패널K9sDetailPanelJSONB 상세 정보 (labels, annotations, containers, volumes, conditions)
Service Resources 탭k8s.ts서비스별 CPU/Memory 바 차트 (Pod 셀렉터 조인)
클러스터 필터k8s/page.tsx클러스터 카드 클릭으로 노드/Pod/이벤트/서비스 필터링
StatsCard 네비게이션StatsCard.tsxNodes→/k8s/nodes, Pods→/k8s/pods 등 클릭 이동
SQL 통합queries/k8s.ts인라인 SQL을 중앙 쿼리 파일로 이동 + 캐시 워머 추가

버그 수정

  • external_ipexternal_ips 컬럼명 수정 (서비스 0/0 버그)
  • EC2 IAM Role ARN 잘림 수정 (SQL || 연산자 필터 충돌)
  • Register 클릭 시 클러스터 필터 토글 방지 (stopPropagation)
  • 등록 후 폴링으로 연결 확인 (5회 × 3초)

Benchmark: Powerpipe Exit Code 2 처리

Powerpipe는 벤치마크 컨트롤에 알람이 있으면 exit code 2로 종료합니다. 이는 정상 동작이지만, 기존 코드는 비정상 종료로 처리했습니다.

항목BeforeAfter
판단 기준exit code === 0출력 파일 존재 + 크기 > 0
exit code 2에러 처리정상 처리
# exit code 무시, 출력 파일 유효성으로 판단
powerpipe benchmark run ... > "${tmpFile}" 2>"${errorFile}"; \
if [ -s "${tmpFile}" ]; then
mv "${tmpFile}" "${resultFile}" && echo "done" > "${statusFile}";
else
echo "error" > "${statusFile}";
fi

인프라: S3 리포트 업로드 + update-infra 스크립트

S3 정책

CDK 스택에 EC2 역할 S3 권한이 추가되었습니다:

// infra-cdk/lib/awsops-stack.ts
ec2Role.addToPolicy(new iam.PolicyStatement({
actions: ['s3:PutObject', 's3:GetObject'],
resources: [`arn:aws:s3:::awsops-deploy-${this.account}/reports/*`],
}));

update-infra 스크립트

EC2 교체 없이 CDK 스택을 안전하게 업데이트하는 00-update-infra.sh 스크립트:

  1. 기존 스택 파라미터 읽기 — CloudFormation에서 현재 값 보존
  2. CDK 컨텍스트 복원 — VPC, TGW, 도메인 등 라이브 인프라에서 재추출
  3. cdk diff 미리보기 — EC2 교체 여부 경고
  4. 배포--no-rollback으로 안전 배포

버전 비교

항목v1.7.2v1.7.3변경
진단 경로/diagnosis/ai-diagnosis이름 변경
내보내기PPTXDOCX + MD + PDF3종
예약 리포트주간/격주/월간신규
Auto-Collect6종 에이전트신규
FinOps 도구5개 MCP 도구신규
EKS 액세스수동원클릭 등록개선
Benchmarkexit code 의존출력 파일 검증수정

주요 파일 변경

파일변경 내용
src/app/ai-diagnosis/page.tsx진단 페이지 리뉴얼 (경로 변경, 예약 UI)
src/app/ai-diagnosis/report/page.tsxPDF 인쇄 전용 페이지
src/app/api/report/route.ts리포트 생성 API (15섹션, S3 업로드)
src/lib/report-docx.tsDOCX 생성기 (표지, 목차, 섹션별 스타일)
src/lib/report-scheduler.ts예약 리포트 스케줄러 (5분 체크)
src/lib/report-prompts.ts15개 섹션별 Bedrock 분석 프롬프트
src/lib/report-generator.ts데이터 수집 오케스트레이터
src/lib/collectors/*.ts6종 Auto-Collect 에이전트
agent/lambda/aws_finops_mcp.pyFinOps MCP Lambda (5 도구)
src/app/api/benchmark/route.tsPowerpipe exit code 2 처리
src/lib/queries/k8s.tsK8s SQL 쿼리 통합 + Service Resources
src/components/dashboard/StatsCard.tsx클릭 네비게이션 (href prop)
infra-cdk/lib/awsops-stack.tsS3 reports/* 정책 추가
scripts/00-update-infra.sh안전한 인프라 업데이트 스크립트