SuperAPI AI 工具集

azure-cost-optimization

部署与运维

查看项目

更新于 10-13 22:09

技能介绍

用途

Azure 成本优化技能用于分析 Azure 订阅的使用量与支出数据,找出可节省成本的环节。它适用于以下请求:优化 Azure 成本或降低 Azure 支出、分析订阅以寻找节省空间、生成成本优化报告、查找孤立或未使用资源、对 Azure 虚拟机/容器/服务进行合理规格调整(rightsizing)、定位 Azure 中的超支点。若用户专门要求优化 Redis 成本,则转为使用 Redis 专项技能(Azure Redis Cost Optimization)。

主要能力

  • 通过 azqr(Azure Quick Review)扫描孤立资源,例如未挂载磁盘、未使用网卡、空闲 NAT 网关,属于可立即节省成本的对象。
  • 借助 Azure Resource Graph 进行跨订阅的资源发现,识别孤立资源与成本优化模式。
  • 从 Azure Cost Management API 查询实际成本数据(最近 30 天),使用 REST API 发起查询(比 az costmanagement query 更可靠)。
  • 从官方 Azure 定价页面获取并验证当前价格,重点服务包括 Container Apps、虚拟机、App Service、Log Analytics,并检查免费额度(如 Container Apps 每月 18 万 vCPU 秒免费额度,可能解释 $0 成本)。
  • 查询 Azure Monitor 的利用率指标(最近 14 天),例如虚拟机 CPU 使用率、App Service 计划的 CpuTime 与 Requests、存储的 UsedCapacity 与 BlobCount,用于支撑合理规格调整建议。
  • 生成结构化成本优化报告,包含执行摘要、成本明细、免费额度分析、孤立资源、按优先级排列的优化建议、实施命令以及验证附录。
  • 保存审计记录,将成本查询结果写入 JSON 文件,保留至少 12 个月用于历史对比。
  • Redis 专项:支持按订阅 ID、订阅名称、订阅前缀、全部订阅、租户范围进行交互式过滤;提供 Redis 专用优化规则(失败缓存、过大层级、缺失标签)与预置报告模板,使用 redis_list 命令。
  • AKS 专项:可启用 AKS 成本分析加载项以获得命名空间级成本可见性;进行异常排查(成本突增、扩缩容事件、预算告警)。AKS 操作优先使用 MCP(mcp_azure_mcp_aks),无法通过 MCP 完成时才回退到 az aks 与 kubectl。

使用方式

步骤概览:先验证前置条件(Azure CLI 已安装并登录、costmanagement 与 resource-graph 扩展、azqr 已安装),并确认具备 Cost Management Reader、Monitoring Reader、订阅/资源组 Reader 权限;然后加载 Azure 成本优化最佳实践;按需选择 Redis 或 AKS 专项分析路径并确定分析范围;运行 azqr 发现孤立资源;用 Azure Resource Graph 与 Azure MCP 或 CLI 发现资源;从 Cost Management API 查询实际成本;从官方页面验证价格;从 Azure Monitor 收集利用率指标;生成报告并保存审计记录,最后清理临时文件。

关键命令示例(保留原文):

验证命令:

az --version
az account show
az extension show --name costmanagement
azqr version

列出资源:

az account show
az resource list --subscription "<SUBSCRIPTION_ID>" --resource-group "<RESOURCE_GROUP>"

成本查询(REST API):

New-Item -ItemType Directory -Path "temp" -Force
az rest --method post `
  --url "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CostManagement/query?api-version=2023-11-01" `
  --body '@temp/cost-query.json'

成本查询 JSON 结构:

{
  "type": "ActualCost",
  "timeframe": "Custom",
  "timePeriod": {
    "from": "<START_DATE>",
    "to": "<END_DATE>"
  },
  "dataset": {
    "granularity": "None",
    "aggregation": {
      "totalCost": {
        "name": "Cost",
        "function": "Sum"
      }
    },
    "grouping": [
      {
        "type": "Dimension",
        "name": "ResourceId"
      }
    ]
  }
}

利用率指标查询示例:

$startTime = (Get-Date).AddDays(-14).ToString("yyyy-MM-ddTHH:mm:ssZ")
$endTime = Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ"

az monitor metrics list `
  --resource "<RESOURCE_ID>" `
  --metric "Percentage CPU" `
  --interval PT1H `
  --aggregation Average `
  --start-time $startTime `
  --end-time $endTime

az monitor metrics list `
  --resource "<RESOURCE_ID>" `
  --metric "CpuTime,Requests" `
  --interval PT1H `
  --aggregation Total `
  --start-time $startTime `
  --end-time $endTime

az monitor metrics list `
  --resource "<RESOURCE_ID>" `
  --metric "UsedCapacity,BlobCount" `
  --interval PT1H `
  --aggregation Average `
  --start-time $startTime `
  --end-time $endTime

MCP 工具示例:

mcp_azure_mcp_get_azure_bestpractices({
  intent: "Get cost optimization best practices",
  command: "get_bestpractices",
  parameters: { resource: "cost-optimization", action: "all" }
})

extension_azqr({
  subscription: "<SUBSCRIPTION_ID>",
  "resource-group": "<RESOURCE_GROUP>"
})

fetch_webpage({
  urls: ["https://azure.microsoft.com/en-us/pricing/details/container-apps/"],
  query: "pricing tiers and costs"
})

门户链接格式(保留原文):

https://portal.azure.com/#@<TENANT_ID>/resource/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/<RESOURCE_PROVIDER>/<RESOURCE_TYPE>/<RESOURCE_NAME>/overview

清理临时文件:

Remove-Item -Path "temp" -Recurse -Force -ErrorAction SilentlyContinue

适用场景

适合需要对 Azure 订阅进行成本体检、查找可立即删除的孤立资源、对虚拟机或 App Service 等做规格下调、为 AKS 集群建立命名空间级成本可见性或排查成本异常、以及针对 Redis 缓存做专项成本分析的用户。报告按优先级组织:优先级 1 为高影响低风险(如删除孤立资源),优先级 2 为中等影响中等风险(如将 D4s_v5 下调为 D2s_v5),优先级 3 为长期优化(如预留实例、存储分层)。

限制与注意事项

只依据实际数据工作:始终先查询实际成本,不估算、不假设;价格需从官方来源验证并考虑免费额度;成本查询使用 30 天窗口,利用率查询使用 14 天窗口。报告中的成本标注区分实际数据、实际指标、经验证价格与估算节省。安全方面要求:删除资源前必须获得批准,先在非生产环境测试变更,提供 dry-run 命令用于验证,包含回滚流程,并在实施后监控影响;不得在未获明确批准时执行破坏性操作。常见陷阱包括:假设成本而不查询实际数据、忽略免费额度、日期范围使用错误、门户链接格式错误(需核对租户 ID 与资源 ID)、成本查询失败(应使用 az rest 携带 JSON body)。对于每月低于 10 美元的成本,建议侧重运营改进而非财务节省。创建报告文件时使用 UTF-8 编码。

前置条件

所需工具:已安装并通过 az login 认证的 Azure CLI;Azure CLI 扩展 costmanagement、resource-graph;已安装 Azure Quick Review(azqr)。所需权限:Cost Management Reader、Monitoring Reader,以及订阅/资源组上的 Reader 角色。

输出

  • 成本优化报告:output/costoptimizereport<timestamp>.md,包含执行摘要(总月成本与主要成本驱动项)、带 Azure 门户链接的详细成本明细、免费额度分析、孤立资源(可立即节省)、按优先级排列且附带实际数据与估算节省的建议、带安全警告的实施命令。
  • 成本查询结果:output/cost-query-result<timestamp>.json,作为所有成本查询与响应的审计轨迹与建议的验证证据。

其他信息(如具体定价数值、支持区域、SDK 细节)在提供的资料中暂未提供完整说明。