mcpField
A
azure-cost-optimization

azure-cost-optimization

官方
github.com/microsoft安全1.6k208.3k 次安装今天更新
代码仓库

关于 azure-cost-optimization

azure-cost-optimization 是用于分析 Azure 订阅并寻找节省机会的技能,适合需要降低支出、清理孤立资源或调整资源规格的团队。它结合实际成本与使用指标生成报告,并要求在执行删除或更改前遵循审批和安全步骤。

主要功能

  1. 01识别孤立及未使用资源
  2. 02依据使用数据调整规格
  3. 03查询实际成本与监控指标
  4. 04生成优化报告和审计记录
  5. 05提供实施安全要求

适用场景

  1. 01分析订阅中的节省机会
  2. 02查找闲置磁盘和网络接口
  3. 03评估 VM 或容器规格
  4. 04生成含成本证据的优化报告

MCP 相关

技能建议优先使用 Azure MCP 获取最佳实践及服务资源数据,并可使用 Azure MCP 的 azqr 扩展运行扫描。AKS 专项操作优先通过 mcp_azure_mcp_aks 执行。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/microsoft/azure-skills --skill azure-cost-optimization

安装后在 Claude Code 中输入/azure-cost-optimization确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
auth-best-practices.md
azure-aks-anomalies.md
azure-aks-cost-addon.md
azure-quick-review.md
azure-redis.md
azure-resource-graph.md
references/sdk/
azure-resource-manager-redis-dotnet.md
templates/
redis-detailed-cache-analysis.md
redis-subscription-level-report.md

详细介绍

Azure 成本优化技能

分析 Azure 订阅,通过清理孤立资源、调整资源规格以及根据实际使用数据提供优化建议来节省成本。

何时使用此技能

在用户提出以下需求时使用此技能:

  • 优化 Azure 成本或减少支出
  • 分析 Azure 订阅以节省成本
  • 生成成本优化报告
  • 查找孤立或未使用的资源
  • 调整 Azure VM、容器或服务的规格
  • 找出 Azure 中支出过高的项目
  • 专门优化 Redis 成本 - 请参阅 Azure Redis 成本优化,了解 Redis 专项分析

说明

与用户交流时,请按以下步骤操作:

步骤 0:验证前置条件

开始前,请确认以下工具和权限均可用:

所需工具:

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

所需权限:

  • Cost Management Reader 角色
  • Monitoring Reader 角色
  • 订阅/资源组上的 Reader 角色

验证命令:

az --version
az account show
az extension show --name costmanagement
azqr version
步骤 1:加载最佳实践

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

// Use Azure MCP best practices tool
mcp_azure_mcp_get_azure_bestpractices({
  intent: "Get cost optimization best practices",
  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。

步骤 1.7:AKS 专项分析(条件性)

如果用户明确请求优化 AKS 成本,请使用专用的 AKS 参考文件:

何时使用 AKS 专项分析:

  • 用户提到“AKS”、“Kubernetes”、“集群”、“节点池”、“Pod”或“kubectl”
  • 用户希望启用 AKS 成本分析附加组件或命名空间成本可见性
  • 用户报告成本激增、集群利用率异常,或希望设置预算警报

工具选择:

  • 优先使用 MCP:使用 mcp_azure_mcp_aks 执行 AKS 操作(列出集群、获取节点池、检查配置)——它提供更丰富的元数据,并与本仓库中的 AKS 技能约定保持一致
  • 回退到 CLI:仅当无法通过 MCP 接口执行特定操作时,才使用 az aks 和 kubectl

参考文件(仅加载请求所需的文件):

注意:对于常规的订阅范围成本优化(包括 AKS 资源组),请继续执行步骤 2。对于 AKS 专项分析,请遵循上述相关参考文件中的说明。

步骤 1.8:选择分析范围(用于 AKS 专项分析)

如果要优化 AKS 成本,请让用户选择分析范围:

向用户提供以下选项:

  1. 特定集群名称 - 分析单个 AKS 集群
  2. 资源组 - 分析资源组中的所有集群
  3. 订阅 ID - 分析订阅中的所有集群
  4. 我的所有集群 - 扫描各订阅中所有可访问的集群

等待用户回复后再继续执行步骤 2。

步骤 2:运行 Azure 快速检查

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

📋 参考:Azure 快速检查 - 运行 azqr 扫描的详细说明

// Use Azure MCP extension_azqr tool
extension_azqr({
  subscription: "<SUBSCRIPTION_ID>",
  "resource-group": "<RESOURCE_GROUP>"  // optional
})

azqr 结果中需要关注的内容:

  • 孤立资源:未附加的磁盘、未使用的 NIC、空闲的 NAT 网关
  • 过度预配的资源:保留期过长、SKU 规格过高
  • 缺少成本标签:未正确分配成本的资源

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

步骤 3:发现资源

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

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

# Get subscription info
az account show

# List all resources
az resource list --subscription "<SUBSCRIPTION_ID>" --resource-group "<RESOURCE_GROUP>"

# Use MCP tools for specific services (preferred):
# - Storage accounts, Cosmos DB, Key Vaults: use Azure MCP tools
# - Redis caches: use mcp_azure_mcp_redis tool (see ./references/azure-redis.md)
# - Web apps, VMs, SQL: use az CLI commands
步骤 4:查询实际成本

从 Azure Cost Management API 获取实际成本数据(最近 30 天):

创建成本查询文件:

创建 temp/cost-query.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"
      }
    ]
  }
}

需要执行的操作:以 ISO 8601 格式计算 <START_DATE>(30 天前)和 <END_DATE>(今天)(例如 2025-11-03T00:00:00Z)。

执行成本查询:

# Create temp folder
New-Item -ItemType Directory -Path "temp" -Force

# Query using REST API (more reliable than az costmanagement query)
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'

重要:将查询结果保存到 output/cost-query-result<timestamp>.json,以便留存审计记录。

步骤 5:验证定价

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

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

需要验证的主要服务:

重要:检查免费层额度——许多 Azure 服务提供宽裕的免费额度,这可能解释了为何成本为 $0。

步骤 6:收集利用率指标

查询 Azure Monitor 获取利用率数据(最近 14 天),以支持调整资源规格的建议:

# Calculate dates for last 14 days
$startTime = (Get-Date).AddDays(-14).ToString("yyyy-MM-ddTHH:mm:ssZ")
$endTime = Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ"

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

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

# Storage capacity
az monitor metrics list `
  --resource "<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 Cost Optimization Report
**Generated**: <timestamp>

## Executive Summary
- Total Monthly Cost: $X (💰 ACTUAL DATA)
- Top Cost Drivers: [List top 3 resources with Azure Portal links]

## Cost Breakdown
[Table with top 10 resources by cost, including Azure Portal links]

## Free Tier Analysis
[Resources operating within free tiers showing $0 cost]

## Orphaned Resources (Immediate Savings)
[From azqr - resources that can be deleted immediately]
- Resource name with Portal link - $X/month savings

## Optimization Recommendations

### Priority 1: High Impact, Low Risk
[Example: Delete orphaned resources]
- 💰 ACTUAL cost: $X/month
- 📊 ESTIMATED savings: $Y/month
- Commands to execute (with warnings)

### Priority 2: Medium Impact, Medium Risk
[Example: Rightsize VM from D4s_v5 to D2s_v5]
- 💰 ACTUAL baseline: D4s_v5, $X/month
- 📈 ACTUAL metrics: CPU 8%, Memory 30%
- 💵 VALIDATED pricing: D4s_v5 $Y/hr, D2s_v5 $Z/hr
- 📊 ESTIMATED savings: $S/month
- Commands to execute

### Priority 3: Long-term Optimization
[Example: Reserved Instances, Storage tiering]

## Total Estimated Savings
- Monthly: $X
- Annual: $Y

## Implementation Commands
[Safe commands with approval warnings]

## Validation Appendix

### Data Sources and Files
- **Cost Query Results**: `output/cost-query-result<timestamp>.json`
  - Raw cost data from Azure Cost Management API
  - Audit trail proving actual costs at report generation time
  - Keep for at least 12 months for historical comparison
  - Contains every resource's exact cost over the analysis period
- **Pricing Sources**: [Links to Azure pricing pages]
- **Free Tier Allowances**: [Applicable allowances]

> **Note**: The `temp/cost-query.json` file (if present) is a temporary query template and can be safely deleted. All permanent audit data is in the `output/` folder.

门户链接格式:

https://portal.azure.com/#@<TENANT_ID>/resource/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/<RESOURCE_PROVIDER>/<RESOURCE_TYPE>/<RESOURCE_NAME>/overview
步骤 8:保存审计记录

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

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

{
  "timestamp": "<ISO_8601>",
  "subscription": "<SUBSCRIPTION_ID>",
  "resourceGroup": "<RESOURCE_GROUP>",
  "queries": [
    {
      "queryType": "ActualCost",
      "timeframe": "MonthToDate",
      "query": { },
      "response": { }
    }
  ]
}
步骤 9:清理临时文件

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

# Delete entire temp folder (no longer needed)
Remove-Item -Path "temp" -Recurse -Force -ErrorAction SilentlyContinue

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

输出

该技能会生成:

  1. 成本优化报告(output/costoptimizereport<timestamp>.md)

    • 包含总成本和主要成本驱动因素的执行摘要
    • 带有 Azure 门户链接的详细成本明细
    • 基于实际数据和预估节省金额的优先级建议
    • 带安全警告的实施命令
  2. 成本查询结果(output/cost-query-result<timestamp>.json)

    • 所有成本查询和响应的审计记录
    • 用于验证建议的证据

重要说明

数据分类
  • 💰 实际数据 = 从 Azure 成本管理 API 获取
  • 📈 实际指标 = 从 Azure Monitor 获取
  • 💵 已验证定价 = 从 Azure 官方定价页面获取
  • 📊 预估节省金额 = 根据实际数据和已验证定价计算
最佳实践
  • 始终先查询实际成本,切勿估算或臆测
  • 从官方来源验证定价,并考虑免费层
  • 使用 REST API 查询成本(比 az costmanagement query 更可靠)
  • 保存审计记录,包括所有查询和响应
  • 为所有资源添加 Azure 门户链接
  • 创建报告文件时使用 UTF-8 编码
  • 对于每月低于 $10 的成本,应侧重于运营改进,而非节省金额
  • 未经明确批准,切勿执行破坏性操作
常见问题
  • 臆测成本:始终通过成本管理 API 查询实际数据
  • 忽略免费层:许多服务提供宽裕的免费额度(例如,Container Apps 每月免费提供 180K vCPU 秒)
  • 使用错误的日期范围:成本查询使用 30 天,用量分析使用 14 天
  • 门户链接失效:验证租户 ID 和资源 ID 格式
  • 成本查询失败:使用带 JSON 正文的 az rest,不要使用 az costmanagement query
安全要求
  • 删除资源前须获得批准
  • 先在非生产环境中测试更改
  • 提供用于验证的试运行命令
  • 包含回滚流程
  • 实施后监控影响

SDK 快速参考

  • Redis 管理:.NET

评论

支持 Markdown