关于 azure-cost-optimization
azure-cost-optimization 是用于分析 Azure 订阅并寻找节省机会的技能,适合需要降低支出、清理孤立资源或调整资源规格的团队。它结合实际成本与使用指标生成报告,并要求在执行删除或更改前遵循审批和安全步骤。
主要功能
- 01识别孤立及未使用资源
- 02依据使用数据调整规格
- 03查询实际成本与监控指标
- 04生成优化报告和审计记录
- 05提供实施安全要求
适用场景
- 01分析订阅中的节省机会
- 02查找闲置磁盘和网络接口
- 03评估 VM 或容器规格
- 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.mdazure-aks-anomalies.mdazure-aks-cost-addon.mdazure-quick-review.mdazure-redis.mdazure-resource-graph.mdreferences/sdk/azure-resource-manager-redis-dotnet.mdtemplates/redis-detailed-cache-analysis.mdredis-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 成本优化,请让用户选择分析范围:
向用户提供以下选项:
- 特定订阅 ID - 分析单个订阅
- 订阅名称 - 使用显示名称而非 ID
- 订阅前缀 - 分析所有名称以指定前缀开头的订阅(例如“CacheTeam”)
- 我的所有订阅 - 扫描所有可访问的订阅
- 整个租户 - 分析整个组织
等待用户回复,然后继续执行步骤 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 成本,请让用户选择分析范围:
向用户提供以下选项:
- 特定集群名称 - 分析单个 AKS 集群
- 资源组 - 分析资源组中的所有集群
- 订阅 ID - 分析订阅中的所有集群
- 我的所有集群 - 扫描各订阅中所有可访问的集群
等待用户回复后再继续执行步骤 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"
})
需要验证的主要服务:
- Container Apps:https://azure.microsoft.com/pricing/details/container-apps/
- Virtual Machines:https://azure.microsoft.com/pricing/details/virtual-machines/
- App Service:https://azure.microsoft.com/pricing/details/app-service/
- Log Analytics:https://azure.microsoft.com/pricing/details/monitor/
重要:检查免费层额度——许多 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中,以供审计。
输出
该技能会生成:
-
成本优化报告(
output/costoptimizereport<timestamp>.md)- 包含总成本和主要成本驱动因素的执行摘要
- 带有 Azure 门户链接的详细成本明细
- 基于实际数据和预估节省金额的优先级建议
- 带安全警告的实施命令
-
成本查询结果(
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