跳到主要内容

v1.7.3 — AI 综合诊断 Overhaul + Auto-Collect 代理

· 阅读需 7 分钟

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 种导出格式

DOCX — 基于 docx 包的 A4 专业报告:

  • 封面(标题、健康评分、账户别名、日期)
  • 目录(超链接、Heading 1-3)
  • 各部分强调色(成本=绿色、安全=红色、网络/EKS=紫色、闲置/MSK=橙色)
  • Markdown 解析(标题、表格、列表、引用、行内代码/粗体/斜体)

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 + PrometheusBroker 指标、消息吞吐量、消费者滞后、分区数
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.tsx点击跳转,如 Nodes→/k8s/nodes、Pods→/k8s/pods
SQL 整合queries/k8s.ts将内联 SQL 移至中央查询文件 + 新增缓存预热器

Bug 修复

  • 修正 external_ipexternal_ips 列名(服务 0/0 的 bug)
  • 修复 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 访问手动一键注册改进
Benchmark依赖 exit 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.ts新增 S3 reports/* 策略
scripts/00-update-infra.sh安全的基础设施更新脚本