🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx @anthropic-ai/skills install microsoft/azure-skills/azure-cost-optimization

💡 提示:需要 Node.js 和 NPM

Azure 成本优化技能

分析 Azure 订阅,通过清理孤立资源、调整资源规模以及基于实际使用数据提供优化建议,从而识别成本节约机会。

何时使用此技能

当用户请求执行以下操作时,使用此技能:

  • 优化 Azure 成本或减少支出
  • 分析 Azure 订阅以节约成本
  • 生成成本优化报告
  • 查找孤立或未使用的资源
  • 调整 Azure 虚拟机、容器或服务的规模
  • 识别他们在 Azure 中哪里超支了
  • 专门优化 Redis 成本 – 有关 Redis 的专项分析,请参阅 Azure Redis 成本优化

说明

在与用户的对话中,遵循以下步骤:

步骤 0:验证前提条件

在开始之前,验证这些工具和权限是否可用:

所需工具:

  • 已安装并已验证身份的 Azure CLI(az login
  • Azure CLI 扩展:costmanagementresource-graph
  • 已安装 Azure Quick Review (azqr) – 详情请参阅 Azure Quick Review

所需权限:

  • 成本管理读取者角色
  • 监控读取者角色
  • 订阅/资源组上的读取者角色

验证命令:

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

步骤 1:加载最佳实践

获取 Azure 成本优化最佳实践,为建议提供依据:

// 使用 Azure MCP 最佳实践工具
mcp_azure_mcp_get_azure_bestpractices({
  intent: "获取成本优化最佳实践",
  command: "get_bestpractices",
  parameters: { resource: "cost-optimization", action: "all" }
})

步骤 1.5:Redis 专项分析(按需)

如果用户特别请求 Redis 成本优化,请使用专门的 Redis 技能:

📋 参考Azure Redis 成本优化

何时使用 Redis 专项分析:

  • 用户提到“Redis”、“Azure Cache for Redis”或“Azure Managed Redis”
  • 重点是 Redis 资源优化,而不是一般的订阅分析
  • 用户想要 Redis 特有的建议(SKU 降级、失败的缓存等)

主要功能:

  • 交互式订阅筛选(前缀、ID 或“所有订阅”)
  • Redis 特有的优化规则(失败的缓存、规模过大的层级、缺少标签)
  • 用于 Redis 成本分析的预建报告模板
  • 使用 redis_list 命令

可用的报告模板:

注意:对于一般性的订阅范围成本优化(包括 Redis),请继续执行步骤 2。对于仅专注于 Redis 的分析,请遵循 Redis 专项参考文档中的说明。

步骤 1.6:选择分析范围(针对 Redis 专项分析)

如果正在执行 Redis 成本优化,请让用户选择他们的分析范围:

向用户提供以下选项:

  1. 特定订阅 ID – 分析单个订阅
  2. 订阅名称 – 使用显示名称而非 ID
  3. 订阅前缀 – 分析所有以指定前缀开头的订阅(例如,“CacheTeam”)
  4. 我的所有订阅 – 扫描所有可访问的订阅
  5. 整个租户 – 分析整个组织

等待用户响应后再进行步骤 2。

步骤 2:运行 Azure Quick Review

运行 azqr 查找孤立资源(即时成本节约):

📋 参考Azure Quick Review – 运行 azqr 扫描的详细说明

// 使用 Azure MCP extension_azqr 工具
extension_azqr({
  subscription: "<订阅ID>",
  "resource-group": "<资源组名>"  // 可选
})

在 azqr 结果中需要注意什么:

  • 孤立资源:未附加的磁盘、未使用的网卡、空闲的 NAT 网关
  • 过度预配资源:过长的保留期、规模过大的 SKU
  • 缺少成本标签:没有适当成本分配的资源

注意:Azure Quick Review 参考文档包含创建筛选配置、将输出保存到 output/ 文件夹以及解读成本优化结果的说明。

步骤 3:发现资源

对于高效的跨订阅资源发现,请使用 Azure Resource Graph。有关孤立资源检测和成本优化模式,请参阅 Azure Resource Graph 查询

使用 Azure MCP 工具或 CLI 列出订阅中的所有资源:

# 获取订阅信息
az account show

# 列出所有资源
az resource list --subscription "<订阅ID>" --resource-group "<资源组名>"

# 优先使用 MCP 工具处理特定服务:
# - 存储帐户、Cosmos DB、Key Vault:使用 Azure MCP 工具
# - Redis 缓存:使用 mcp_azure_mcp_redis 工具(参见 ./references/azure-redis.md)
# - Web 应用、虚拟机、SQL:使用 az CLI 命令

步骤 4:查询实际成本

从 Azure 成本管理 API 获取实际成本数据(过去 30 天):

创建成本查询文件:

创建包含以下内容的 temp/cost-query.json 文件:

{
  "type": "ActualCost",
  "timeframe": "Custom",
  "timePeriod": {
    "from": "<开始日期>",  
    "to": "<结束日期>"
  },
  "dataset": {
    "granularity": "None",
    "aggregation": {
      "totalCost": {
        "name": "Cost",
        "function": "Sum"
      }
    },
    "grouping": [
      {
        "type": "Dimension",
        "name": "ResourceId"
      }
    ]
  }
}

需要执行的操作:计算 <开始日期>(30 天前)和 <结束日期>(今天),格式为 ISO 8601(例如 2025-11-03T00:00:00Z)。

执行成本查询:

# 创建临时文件夹
New-Item -ItemType Directory -Path "temp" -Force

# 使用 REST API 查询(比 az costmanagement query 更可靠)
az rest --method post `
  --url "https://management.azure.com/subscriptions/<订阅ID>/resourceGroups/<资源组名>/providers/Microsoft.CostManagement/query?api-version=2023-11-01" `
  --body '@temp/cost-query.json'

重要提示:将查询结果保存到 output/cost-query-result<时间戳>.json 以供审计追踪。

步骤 5:验证定价

使用 fetch_webpage 从官方 Azure 定价页面获取当前定价:

// 验证关键服务的定价
fetch_webpage({
  urls: ["https://azure.microsoft.com/zh-cn/pricing/details/container-apps/"],
  query: "定价层级和成本"
})

需要验证的关键服务:

重要提示:检查免费层级配额——许多 Azure 服务有慷慨的免费限制,这可能解释了 0 成本的原因。

步骤 6:收集利用率指标

查询 Azure Monitor 以获取利用率数据(过去 14 天),为规模调整建议提供依据:

# 计算过去 14 天的日期
$startTime = (Get-Date).AddDays(-14).ToString("yyyy-MM-ddTHH:mm:ssZ")
$endTime = Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ"

# 虚拟机 CPU 利用率
az monitor metrics list `
  --resource "<资源ID>" `
  --metric "Percentage CPU" `
  --interval PT1H `
  --aggregation Average `
  --start-time $startTime `
  --end-time $endTime

# 应用服务计划利用率
az monitor metrics list `
  --resource "<资源ID>" `
  --metric "CpuTime,Requests" `
  --interval PT1H `
  --aggregation Total `
  --start-time $startTime `
  --end-time $endTime

# 存储容量
az monitor metrics list `
  --resource "<资源ID>" `
  --metric "UsedCapacity,BlobCount" `
  --interval PT1H `
  --aggregation Average `
  --start-time $startTime `
  --end-time $endTime

步骤 7:生成优化报告

output/ 文件夹中创建一个全面的成本优化报告:

使用 create_file 工具,路径为 output/costoptimizereport<YYYYMMDD_HHMMSS>.md

报告结构:

# Azure 成本优化报告
**生成时间**<时间戳>

## 执行摘要
- 月度总成本:$X (💰 实际数据)
- 主要成本驱动因素:[列出前 3 个资源及其 Azure 门户链接]

## 成本构成
[按成本排序的前 10 个资源表格,包含 Azure 门户链接]

## 免费层级分析
[在免费层级内运行的、成本为 0 的资源]

## 孤立资源(即时节约)
[来自 azqr - 可以立即删除的资源]
- 资源名称及门户链接 - 预计每月节省 $X

## 优化建议

### 优先级 1:高影响,低风险
[示例:删除孤立资源]
- 💰 实际成本:$X/月
- 📊 预估节约:$Y/月
- 可执行的命令(附带警告)

### 优先级 2:中等影响,中等风险
[示例:将虚拟机从 D4s_v5 调整到 D2s_v5]
- 💰 实际基准:D4s_v5,$X/月
- 📈 实际指标:CPU 8%,内存 30%
- 💵 验证定价:D4s_v5 $Y/小时,D2s_v5 $Z/小时
- 📊 预估节约:$S/月
- 可执行的命令

### 优先级 3:长期优化
[示例:预留实例、存储分层]

## 总预估节约
- 月度:$X
- 年度:$Y

## 实施命令
[带有批准警告的安全命令]

## 验证附录

### 数据源和文件
- **成本查询结果**`output/cost-query-result<时间戳>.json`
  - 来自 Azure 成本管理 API 的原始成本数据
  - 证明报告生成时实际成本的审计线索
  - 至少保存 12 个月以供历史比较
  - 包含分析期内每个资源的精确成本
- **定价来源**:[指向 Azure 定价页面的链接]
- **免费层级配额**:[适用的配额]

> **注意**`temp/cost-query.json` 文件(如果存在)是一个临时查询模板,可以安全删除。所有永久审计数据都在 `output/` 文件夹中。

门户链接格式:

https://portal.azure.com/#@<租户ID>/resource/subscriptions/<订阅ID>/resourceGroups/<资源组名>/providers/<资源提供者>/<资源类型>/<资源名称>/overview

步骤 8:保存审计追踪

保存所有成本查询结果以供验证:

使用 create_file 工具,路径为 output/cost-query-result<YYYYMMDD_HHMMSS>.json

{
  "timestamp": "<ISO_8601>",
  "subscription": "<订阅ID>",
  "resourceGroup": "<资源组名>",
  "queries": [
    {
      "queryType": "ActualCost",
      "timeframe": "MonthToDate",
      "query": { },
      "response": { }
    }
  ]
}

步骤 9:清理临时文件

报告生成后,删除临时查询文件和文件夹:

# 删除整个临时文件夹(不再需要)
Remove-Item -Path "temp" -Recurse -Force -ErrorAction SilentlyContinue

注意temp/cost-query.json 文件仅在 API 执行期间需要。实际的查询和结果会保存在 output/cost-query-result*.json 中以供审计。

输出

此技能生成:

  1. 成本优化报告 (output/costoptimizereport<时间戳>.md)
    • 包含总成本和主要驱动因素的执行摘要
    • 带有 Azure 门户链接的详细成本分解
    • 基于实际数据和预估节约的优先级建议
    • 带有安全警告的实施命令
  2. 成本查询结果 (output/cost-query-result<时间戳>.json)
    • 所有成本查询和响应的审计线索
    • 建议的验证证据

重要说明

数据分类

  • 💰 实际数据 = 从 Azure 成本管理 API 获取
  • 📈 实际指标 = 从 Azure Monitor 获取
  • 💵 验证定价 = 从官方 Azure 定价页面获取
  • 📊 预估节约 = 基于实际数据和验证定价计算得出

最佳实践

  • 始终先查询实际成本——切勿估算或假设
  • 从官方来源验证定价——考虑免费层级
  • 对成本查询使用 REST API(比 az costmanagement query 更可靠)
  • 保存审计线索——包含所有查询和响应
  • 为所有资源包含 Azure 门户链接
  • 创建报告文件时使用 UTF-8 编码
  • 对于每月成本低于 10 美元的情况,应强调运营改进而非财务节约
  • 未经明确批准,切勿执行破坏性操作

常见陷阱

  • 假设成本:始终从成本管理 API 查询实际数据
  • 忽略免费层级:许多服务有慷慨的配额(例如,容器应用:每月 18 万 vCPU 秒免费)
  • 使用错误的日期范围:成本数据用 30 天,利用率数据用 14 天
  • 门户链接失效:验证租户 ID 和资源 ID 格式
  • 成本查询失败:使用带 JSON 主体的 az rest,而不是 az costmanagement query

安全要求

  • 在删除资源前获得批准
  • 先在非生产环境测试更改
  • 提供用于验证的试运行命令
  • 包含回滚步骤
  • 实施后监控影响

SDK 快速参考

  • Redis 管理.NET

📄 原始文档

完整文档(英文):

https://skills.sh/microsoft/azure-skills/azure-cost-optimization

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。