如何通过AZ CLI获取近30天的Azure成本数据(按资源组统计并返回数值/JSON blob)
如何通过AZ CLI获取近30天的Azure成本数据(按资源组统计并返回数值/JSON blob)
没问题!要直接通过AZ CLI拿到近30天按资源组分组的成本数据,而且返回JSON格式(不用存到存储容器里),用az costmanagement query命令就可以搞定,这是Azure官方推荐的成本查询方式,直接输出你要的结果。
第一步:准备好你的订阅ID
如果不知道自己的订阅ID,可以先跑这个命令获取:
az account show --query id --output tsv
复制输出的ID,后面要用到。
第二步:执行成本查询命令
直接运行下面的命令,把your-subscription-id替换成你刚才拿到的订阅ID:
az costmanagement query \ --scope "/subscriptions/your-subscription-id" \ --type ActualCost \ --timeframe Last30Days \ --dataset-aggregation "Cost=name:Cost,function:Sum" \ --dataset-grouping "name:ResourceGroup,type:Dimension"
这个命令会直接返回一个JSON blob,里面包含了每个资源组对应的近30天总成本。核心参数说明:
--scope:指定查询的范围,这里用订阅级别的范围--type ActualCost:查询实际产生的成本(也可以选AmortizedCost查看摊销成本)--timeframe Last30Days:自动计算近30天的时间范围,不用手动写起止日期--dataset-aggregation:指定要聚合的指标,这里是求和成本--dataset-grouping:按资源组维度分组统计
第三步:如果只想提取纯数值或简化JSON
如果你不需要完整的响应结构,只想拿到资源组和成本的键值对,可以用JMESPath过滤结果,比如:
az costmanagement query \ --scope "/subscriptions/your-subscription-id" \ --type ActualCost \ --timeframe Last30Days \ --dataset-aggregation "Cost=name:Cost,function:Sum" \ --dataset-grouping "name:ResourceGroup,type:Dimension" \ --query 'properties.rows | [*] | {ResourceGroupCosts: [ {Name: @[0], TotalCost: @[1]} ]}'
这样输出的JSON会更简洁,直接展示每个资源组的名称和对应的总成本数值。
注意事项
- 确保你有足够的权限:需要
Cost Management Reader或更高权限的角色才能查询成本数据 - 建议把AZ CLI更新到最新版本:避免旧版本不支持部分参数,更新命令是
az upgrade
备注:内容来源于stack exchange,提问作者TheFiddlerWins
相关产品推荐
相关产品推荐

