v1.7.3 — AI 종합진단 Overhaul + Auto-Collect 에이전트
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 종합진단 |
| 내보내기 | PPTX | DOCX + Markdown + PDF |
| 예약 리포트 | — | 주간/격주/월간 |
| S3 업로드 | — | DOCX + MD 자동 업로드 |
3종 내보내기
DOCX — docx 패키지 기반 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에 업로드됩니다.
DOCX와 Markdown 파일은 awsops-deploy-{accountId}/reports/ 경로에 자동 업로드됩니다. 7일간 유효한 Presigned URL을 통해 다운로드할 수 있습니다. CDK 스택에 S3 PutObject/GetObject 권한이 자동 추가됩니다.
6종 Auto-Collect 에이전트
AI 종합진단 리포트의 데이터 수집을 자동화하는 전용 에이전트입니다. 각 에이전트는 멀티 소스에서 병렬로 데이터를 수집하고 라이브 상태를 스트리밍합니다.
| 에이전트 | 소스 | 수집 항목 |
|---|---|---|
| EKS Optimize | Prometheus + K8s + Steampipe | CPU/메모리 사용률, 스로틀링, Pod 재시작, HTTP 5xx, 노드 활용도 |
| DB Optimize | Steampipe + CloudWatch | RDS/ElastiCache/OpenSearch 인스턴스 발견 + 메트릭 기반 라이트사이징 |
| MSK Optimize | Steampipe + CloudWatch + Prometheus | 브로커 메트릭, 메시지 처리량, 컨슈머 랙, 파티션 수 |
| Idle Scan | Steampipe | 미부착 EBS, gp2 볼륨, 미사용 EIP, 중지 EC2, 90일+ 스냅샷, 미사용 SG + 비용 추정 |
| Trace Analyze | Tempo/Jaeger + Prometheus | 서비스별 에러 트레이스, 500ms 초과 느린 트레이스 |
| Incident | CloudWatch + K8s + Prometheus | ALARM 상태 알람, 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 인터페이스를 구현합니다. collect()는 Promise.allSettled로 멀티 소스를 병렬 수집하고, SendFn 콜백으로 진행 상황을 실시간 전달합니다. 새 에이전트 추가 시 이 인터페이스만 구현하면 됩니다.
FinOps MCP Lambda
Cost Gateway에 5개 FinOps 도구가 추가되었습니다.
| 도구 | 소스 | 설명 |
|---|---|---|
get_rightsizing_recommendations | Compute Optimizer | EC2/RDS/ECS/Lambda 라이트사이징 + 월간 절감액 |
get_savings_plans_recommendations | Cost Explorer | Savings Plans 구매 추천 (1년/3년, No Upfront) |
get_reserved_instance_recommendations | Cost Explorer | RI 구매 추천 (EC2/RDS/ElastiCache/Redshift) |
get_cost_optimization_hub_recommendations | Cost Optimization Hub | 통합 최적화 추천 (Rightsize/Stop/Upgrade/SP) |
get_trusted_advisor_cost_checks | Trusted Advisor | 비용 최적화 카테고리 체크 + 플래그 리소스 |
모든 도구는 target_account_id 파라미터로 크로스 계정 조회를 지원합니다.
EKS/K8s UX 대폭 개선
클러스터 액세스 관리
| 기능 | 설명 |
|---|---|
| 액세스 상태 뱃지 | 클러스터별 "Access Entry" 등록 여부 표시 |
| 원클릭 등록 | "Register ViewPolicy" 버튼으로 Access Entry + Policy 자동 생성 |
| 연결 감지 | K8s 쿼리 결과의 context_name 존재 여부로 실제 연결 상태 판별 |
| CLI 가이드 | 미연결 클러스터에 대해 EC2 Role ARN 기반 등록 명령어 안내 |
새 기능
| 기능 | 파일 | 설명 |
|---|---|---|
| Describe 패널 | K9sDetailPanel | JSONB 상세 정보 (labels, annotations, containers, volumes, conditions) |
| Service Resources 탭 | k8s.ts | 서비스별 CPU/Memory 바 차트 (Pod 셀렉터 조인) |
| 클러스터 필터 | k8s/page.tsx | 클러스터 카드 클릭으로 노드/Pod/이벤트/서비스 필터링 |
| StatsCard 네비게이션 | StatsCard.tsx | Nodes→/k8s/nodes, Pods→/k8s/pods 등 클릭 이동 |
| SQL 통합 | queries/k8s.ts | 인라인 SQL을 중앙 쿼리 파일로 이동 + 캐시 워머 추가 |
버그 수정
external_ip→external_ips컬럼명 수정 (서비스 0/0 버그)- EC2 IAM Role ARN 잘림 수정 (SQL
||연산자 필터 충돌) - Register 클릭 시 클러스터 필터 토글 방지 (
stopPropagation) - 등록 후 폴링으로 연결 확인 (5회 × 3초)
Benchmark: Powerpipe Exit Code 2 처리
Powerpipe는 벤치마크 컨트롤에 알람이 있으면 exit code 2로 종료합니다. 이는 정상 동작이지만, 기존 코드는 비정상 종료로 처리했습니다.
| 항목 | Before | After |
|---|---|---|
| 판단 기준 | 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 스크립트:
- 기존 스택 파라미터 읽기 — CloudFormation에서 현재 값 보존
- CDK 컨텍스트 복원 — VPC, TGW, 도메인 등 라이브 인프라에서 재추출
- cdk diff 미리보기 — EC2 교체 여부 경고
- 배포 —
--no-rollback으로 안전 배포
버전 비교
| 항목 | v1.7.2 | v1.7.3 | 변경 |
|---|---|---|---|
| 진단 경로 | /diagnosis | /ai-diagnosis | 이름 변경 |
| 내보내기 | PPTX | DOCX + MD + PDF | 3종 |
| 예약 리포트 | — | 주간/격주/월간 | 신규 |
| Auto-Collect | — | 6종 에이전트 | 신규 |
| FinOps 도구 | — | 5개 MCP 도구 | 신규 |
| EKS 액세스 | 수동 | 원클릭 등록 | 개선 |
| Benchmark | exit code 의존 | 출력 파일 검증 | 수정 |
주요 파일 변경
| 파일 | 변경 내용 |
|---|---|
src/app/ai-diagnosis/page.tsx | 진단 페이지 리뉴얼 (경로 변경, 예약 UI) |
src/app/ai-diagnosis/report/page.tsx | PDF 인쇄 전용 페이지 |
src/app/api/report/route.ts | 리포트 생성 API (15섹션, S3 업로드) |
src/lib/report-docx.ts | DOCX 생성기 (표지, 목차, 섹션별 스타일) |
src/lib/report-scheduler.ts | 예약 리포트 스케줄러 (5분 체크) |
src/lib/report-prompts.ts | 15개 섹션별 Bedrock 분석 프롬프트 |
src/lib/report-generator.ts | 데이터 수집 오케스트레이터 |
src/lib/collectors/*.ts | 6종 Auto-Collect 에이전트 |
agent/lambda/aws_finops_mcp.py | FinOps MCP Lambda (5 도구) |
src/app/api/benchmark/route.ts | Powerpipe exit code 2 처리 |
src/lib/queries/k8s.ts | K8s SQL 쿼리 통합 + Service Resources |
src/components/dashboard/StatsCard.tsx | 클릭 네비게이션 (href prop) |
infra-cdk/lib/awsops-stack.ts | S3 reports/* 정책 추가 |
scripts/00-update-infra.sh | 안전한 인프라 업데이트 스크립트 |