分析应用中使用的 Azure 资源(IaC 基础设施即代码文件及/或目标资源组中的资源)并进行成本优化,同时针对识别出的优化点自动创建 GitHub issue。
Azure 成本优化 (Azure Cost Optimize)
本工作流通过分析基础设施即代码(IaC)文件和 Azure 现存资源来生成成本优化建议。它会为每一个优化点独立创建 GitHub issue,并生成一个汇总的 EPIC issue 统一协调实施,协助团队高效追踪与落地降本举措。
前提条件
- 已配置并完成鉴权的 Azure MCP server
- 已配置并完成鉴权的 GitHub MCP server
- 已指定目标 GitHub 仓库
- 已部署 Azure 资源(IaC 文件可选,但建议提供)
- 在有可用工具时,优先选用 Azure MCP 工具(
azmcp-*),而非直接使用 Azure CLI
工作流步骤
步骤 1:获取 Azure 最佳实践
操作:在开展分析前获取成本优化最佳实践
工具:Azure MCP best practices 工具
流程:
- 加载最佳实践:
- 执行
azmcp-bestpractices-get获取最新的 Azure 优化指南。这可能无法覆盖所有场景,但能提供基础参考。 - 尽可能利用这些最佳实践指导后续分析与建议生成
- 在优化建议中引用相关最佳实践(来源于 MCP 工具输出或通用 Azure 官方文档)
- 执行
步骤 2:探查 Azure 基础设施
操作:动态探查并分析 Azure 资源及配置
工具:Azure MCP 工具 + Azure CLI 备用方案 + 本地文件系统访问
流程:
-
资源探查:
- 执行
azmcp-subscription-list查询可用订阅 - 执行
azmcp-group-list --subscription <subscription-id>查询资源组 - 获取相关资源组中的所有资源清单:
- 使用
az resource list --subscription <id> --resource-group <name>
- 使用
- 对每种资源类型,优先使用 MCP 工具;如不可用,再退回使用 CLI:
azmcp-cosmos-account-list --subscription <id>- Cosmos DB 账号azmcp-storage-account-list --subscription <id>- 存储账号azmcp-monitor-workspace-list --subscription <id>- Log Analytics 工作区azmcp-keyvault-key-list- Key Vault 密钥库az webapp list- Web Apps(备用 - 无可用 MCP 工具)az appservice plan list- App Service 计划(备用)az functionapp list- Function Apps(备用)az sql server list- SQL 数据库服务器(备用)az redis list- Redis 缓存(备用)- ... 其他资源类型依次类推
- 执行
-
IaC 文件检测:
- 使用
file_search扫描 IaC 文件:"/*.bicep", "/*.tf", "/main.json", "/template.json" - 解析资源定义,梳理预期配置
- 与实际探查到的资源对比,识别配置偏差
- 记录 IaC 文件的存在情况,供后续提供实施建议
- 禁止使用代码库中的任何其他文件,仅限使用 IaC 文件。其他文件不能作为单一事实来源(Source of Truth)。
- 如果未找到任何 IaC 文件,请立即停止并向用户汇报未找到 IaC 文件。
- 使用
-
配置分析:
- 提取各资源的当前 SKU、层级(Tier)及配置设置
- 梳理资源间的关联与依赖关系
- 在有数据的情况下,绘制资源利用率模式
步骤 3:收集使用率指标并校验当前成本
操作:收集资源利用率数据,并核实实际资源成本
工具:Azure MCP 监控工具 + Azure CLI
流程:
-
查找监控数据源:
- 使用
azmcp-monitor-workspace-list --subscription <id>查找 Log Analytics 工作区 - 使用
azmcp-monitor-table-list --subscription <id> --workspace <name> --table-type "CustomLog"探索可用数据表
- 使用
-
执行使用率查询:
- 使用
azmcp-monitor-log-query运行以下预定义查询:- 查询语句:"recent" 获取近期活动模式
- 查询语句:"errors" 获取表明异常的错误日志
- 如需自定义分析,使用 KQL 查询:
// App Services 的 CPU 利用率 AppServiceAppLogs | where TimeGenerated > ago(7d) | summarize avg(CpuTime) by Resource, bin(TimeGenerated, 1h) // Cosmos DB RU 消耗量 AzureDiagnostics | where ResourceProvider == "MICROSOFT.DOCUMENTDB" | where TimeGenerated > ago(7d) | summarize avg(RequestCharge) by Resource // 存储账号访问模式 StorageBlobLogs | where TimeGenerated > ago(7d) | summarize RequestCount=count() by AccountName, bin(TimeGenerated, 1d) - 使用
-
计算基线指标:
- CPU/内存平均利用率
- 数据库吞吐量模式
- 存储访问频次
- Function 执行速率
-
校验当前成本:
- 基于步骤 2 探查到的 SKU/层级配置
- 在 https://azure.microsoft.com/pricing/ 查询最新 Azure 定价,或使用
az billing相关命令 - 记录格式:资源名称 → 当前 SKU → 预计每月成本
- 在给出建议之前,计算出真实合理的当前月度总成本
步骤 4:生成成本优化建议
操作:分析资源并找出降本优化点
工具:基于已收集数据的本地分析
流程:
-
应用优化模式(根据匹配到的资源类型):
计算资源优化:
- App Service Plans:根据 CPU/内存实际使用率调整合适规格(Right-sizing)
- Function Apps:低使用率场景由 Premium 降级为 Consumption 计划
- 虚拟机(VM):针对配置过高的实例进行缩容
数据库优化:
- Cosmos DB:
- 变动负载场景由 Provisioned 调整为 Serverless
- 根据实际使用量精细调整 RU/s
- SQL Database:根据 DTU 实际使用量调整服务层级
存储优化:
- 配置生命周期策略(Hot → Cool → Archive)
- 合并冗余存储账号
- 根据访问模式调整存储层级规格
基础设施优化:
- 清理未使用或冗余的资源
- 在适用场景配置弹性伸缩(Auto-scaling)
- 对非生产环境设置定时关机/调度
-
基于凭据计算可节省金额:
- 已校验的当前成本 - 目标成本 = 可节省金额
- 记录当前配置与目标配置的定价来源
-
计算各项建议的优先级得分:
优先级得分 = (价值得分 × 月度节省金额) / (风险得分 × 实施天数) 高优先级:得分 > 20 中优先级:得分 5-20 低优先级:得分 < 5 -
校验优化建议:
- 确保 Azure CLI 命令准确无误
- 验证预估节省金额计算逻辑
- 评估实施风险与前提条件
- 确保所有节省金额计算均有据可依
步骤 5:用户确认
操作:在创建 GitHub issue 前展示汇总结果并获取授权
流程:
-
展示优化汇总:
🎯 Azure 成本优化汇总 📊 分析结果: • 已分析资源总数:X • 当前月度成本:$X • 预计每月可节省:$Y • 优化机会点:Z • 高优先级项:N 🏆 优化建议列表: 1. [资源]: [当前 SKU] → [目标 SKU] = 节省 $X/月 - [风险等级] | [实施工作量] 2. [Resource]: [Current Config] → [Target Config] = $Y/month savings - [Risk Level] | [Implementation Effort] 3. [Resource]: [Current Config] → [Target Config] = $Z/month savings - [Risk Level] | [Implementation Effort] ... 依此类推 💡 执行后将创建: • Y 个独立 GitHub issue(每个优化点 1 个) • 1 个主 EPIC issue 用于统一协调实施 ❓ 是否确认创建 GitHub issue?(y/n) -
等待用户确认:仅在用户明确确认后方可继续
步骤 6:创建独立的优化 Issue
操作:针对每个优化点分别创建单独的 GitHub issue。添加标签 "cost-optimization"(绿色)、"azure"(蓝色)。
所需 MCP 工具:针对每条建议调用 create_issue
流程:
-
创建独立 Issue,使用如下模板:
标题格式:
[COST-OPT] [资源类型] - [简要描述] - 预计每月节省 $X正文模板:
## 💰 成本优化:[简短标题] **每月节省**: $X | **风险等级**: [Low/Medium/High] | **实施工作量**: X 天 ### 📋 事项说明 [清晰说明优化方案及实施必要性] ### 🔧 实施方案 **检测到 IaC 文件**: [是/否 - 基于 file_search 结果] ```bash # 如果检测到 IaC 文件:展示 IaC 修改点 + 部署命令 # 文件: infrastructure/bicep/modules/app-service.bicep # 变更: sku.name: 'S3' → 'B2' az deployment group create --resource-group [rg] --template-file infrastructure/bicep/main.bicep # 如果未检测到 IaC 文件:直接提供 Azure CLI 命令 + 警告 # ⚠️ 未找到 IaC 文件。如果代码存储在其他地方,请改为修改对应的 IaC 文件。 az appservice plan update --name [plan] --sku B2📊 依据与数据
- 当前配置:[详细信息]
- 使用模式:[监控数据凭据]
- 成本影响:$X/月 → $Y/月
- 最佳实践对齐:[引用 Azure 官方最佳实践(如适用)]
✅ 验收与验证步骤
- [ ] 在非生产环境中进行测试
- [ ] 确认性能无衰减
- [ ] 在 Azure Cost Management 中核实成本已降低
- [ ] 必要时更新监控与告警设置
⚠️ 风险与注意事项
- [风险点 1 及应对预案]
- [风险点 2 及应对预案]
优先级得分: X | 价值: X/10 | 风险: X/10
步骤 7:创建汇总协调 EPIC Issue
操作:创建主 Issue 用于跟踪所有优化工作的落地。添加标签 "cost-optimization"(绿色)、"azure"(蓝色)和 "epic"(紫色)。
所需 MCP 工具:针对 EPIC 调用 create_issue
关于 mermaid 图表的说明:请务必校验 mermaid 语法无误,并在绘制图表时兼顾无障碍设计规范(配色、样式等)。
流程:
-
创建 EPIC Issue:
标题:
[EPIC] Azure 成本优化专项 - 预计每月潜在节省 $X正文模板:
# 🎯 Azure 成本优化 EPIC **预计总节省金额**: $X/月 | **实施周期**: X 周 ## 📊 执行摘要 - **已分析资源**: X - **优化机会点**: Y - **月度节省潜力**: $X - **高优先级项**: N ## 🏗️ 当前架构概览 ```mermaid graph TB subgraph "资源组: [名称]" [生成的架构图,展示当前资源及其成本] end📋 实施追踪
🚀 高优先级(优先实施)
- [ ] #[issue-number]: [标题] - 每月节省 $X
- [ ] #[issue-number]: [标题] - 每月节省 $X
⚡ 中优先级
- [ ] #[issue-number]: [标题] - 每月节省 $X
- [ ] #[issue-number]: [标题] - 每月节省 $X
🔄 低优先级(可选优化)
- [ ] #[issue-number]: [标题] - 每月节省 $X
📈 进度跟踪
- 已完成: 0 / Y 项优化
- 实际已节省: $0 / $X(月度)
- 实施状态: 未开始
🎯 成功标准
- [ ] 所有高优先级优化项均已落地
- [ ] 实现 >80% 的预估节省目标
- [ ] 业务性能未受任何影响
- [ ] 成本监控仪表板已同步更新
📝 备注说明
- 随 Issue 完成进度定期复盘并更新本 EPIC
- 持续监控实际节省金额与预估金额的对比
- 建议定期开展成本优化评审
异常处理
- 成本校验:如果预估节省金额缺乏数据支持,或与 Azure 官方定价不符,请重新核实资源配置






