3. 成本可见性基础
成本治理的第一步不是省钱,而是“看得见”。在 Azure 中,成本可见性由三个相互衔接的能力构成:范围(Scope)决定你看到哪些资源与订阅的账单;成本分析(Cost Analysis)把原始用量与费率转换成可读的视图;导出与预算告警则把“事后查看”变成“持续监控与主动通知”。本章围绕这三件事展开,并给出可直接参考的配置示例。
一、先理解 Billing 范围与 RBAC 范围的区别
Azure Cost Management 的数据来自计费账户体系,而访问权限来自 Azure RBAC 或计费角色。两者不是一回事:Billing 范围描述“账单从哪来”,例如计费账户(Billing Account)、计费配置文件(Billing Profile)、发票科目(Invoice Section)、订阅(Subscription)、资源组(Resource Group)以及管理组(Management Group)。RBAC 范围描述“谁能在哪个层级查看或操作”。
常见误区是:给用户分配了订阅的“读者”角色,却看不到成本数据。原因是成本数据默认需要“成本管理读者(Cost Management Reader)”或“成本管理参与者(Cost Management Contributor)”等角色。若企业使用 EA 或 MCA 计费账户,还需要在计费账户层级授予相应计费角色,才能看到跨订阅的汇总成本。
二、成本分析视图:从原始数据到可读结论
成本分析视图的核心是四个维度:范围(在哪个层级看)、粒度(按天/月)、分组(按资源、资源组、服务、标签、位置等)、筛选(按订阅、标签、资源类型等)。例如,要定位“哪个资源组在 3 月成本异常”,可以这样配置:范围选订阅,粒度选“每日”,分组选“资源组”,筛选“服务名称 = 虚拟机”,再叠加“标签 = CostCenter:1001”。
视图类型也影响判断:累积成本适合看预算消耗进度;每日成本适合发现突增;成本按服务适合识别主要支出项;成本按资源适合定位具体资源。建议至少保存三个常用视图:月度总览、按资源组日趋势、按标签的成本分摊。
三、导出成本数据:让数据离开门户
成本分析适合交互式查看,但持续治理需要把数据落到可查询的存储中。Azure 成本导出支持两种数据集:实际成本与摊销成本。实际成本反映当期账单金额;摊销成本把预留实例、节省计划等一次性费用按使用周期分摊,更适合做内部成本分摊。
导出配置的关键参数包括:导出名称、范围、数据集类型、频率(每日/每月)、时间范围(当月/自定义)、存储账户与容器、文件格式(CSV 或 Parquet)、覆盖规则(覆盖或增量)。以下是一个参考配置示例:
导出名称: daily-cost-export
范围: /subscriptions/<sub-id>
数据集: 实际成本
频率: 每日
时间范围: 当月至今
存储账户: stfinopsprod
容器: cost-export
格式: Parquet
覆盖: 覆盖(每日重写当月文件)
导出文件通常按“范围/日期/文件”组织。若使用 Parquet,可直接被 Synapse、Databricks 或 Power BI 读取;若使用 CSV,注意列名与分隔符在不同 API 版本中可能变化,建议在数据管道中做列映射与类型转换。导出不是实时流,通常有数小时延迟,因此预算告警不能完全依赖导出数据,而应使用预算原生的告警机制。
四、预算与告警:把“看到”变成“被通知”
Azure 预算可以按订阅、资源组、管理组或标签设置。预算有两个关键概念:时间粒度(每月/每季/每年)与阈值类型(实际成本或预测成本)。常见做法是设置 50%、80%、100% 三档实际成本告警,再叠加一个 100% 预测成本告警,用于提前发现“本月将超支”。
告警动作通过操作组执行,可以发邮件、调用 Webhook、触发 Logic App 或 Azure Function。例如,当 80% 阈值触发时,自动向成本负责人发送邮件,并在 Teams 频道中发布消息;当 100% 触发时,调用自动化脚本关闭非生产环境的虚拟机。注意:预算告警是“通知”,不是“硬性阻断”,真正的阻断需要配合策略或自动化脚本。
五、一个可复用的最小落地清单
- 范围:确认计费账户、订阅、管理组的层级关系,并授予“成本管理读者”。
- 标签:至少启用 CostCenter、Environment、Owner 三个标签,并在资源组与资源上保持一致。
- 视图:保存“月度总览”“资源组日趋势”“按标签分摊”三个视图。
- 导出:配置每日实际成本导出到存储账户,格式优先 Parquet。
- 预算:按订阅或资源组设置月度预算,配置 50%/80%/100% 实际成本告警与 100% 预测告警。
- 验证:在成本分析中确认数据延迟与标签覆盖率,在预算页面确认告警历史与操作组执行记录。