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 成本可见性数据链路 从计费范围 → 成本分析 → 导出 → 预算告警 Billing 范围层级 计费账户 / 计费配置文件 发票科目 / 管理组 订阅 资源组 资源 / 标签 范围越上层,汇总越全 范围越下层,定位越准 成本分析视图 维度选择 范围 · 粒度 · 分组 · 筛选 视图类型 累积 · 每日 · 按服务 · 按资源 常用保存视图 月度总览 · 资源组日趋势 · 标签分摊 判断依据 突增 · 占比 · 预算消耗率 导出与预算告警 成本导出 每日/每月 · CSV/Parquet 存储账户容器 · 覆盖或增量 预算与告警 实际/预测阈值 · 50%/80%/100% 操作组 · 邮件/Webhook/自动化 下游消费 Power BI · 数据仓库 标签分摊 · 部门账单 异常检测 · 趋势预测 示例:订阅范围 + 每日粒度 + 按资源组分组 + 标签筛选 → 导出到存储账户 → 预算 80% 告警

三、导出成本数据:让数据离开门户

成本分析适合交互式查看,但持续治理需要把数据落到可查询的存储中。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% 触发时,调用自动化脚本关闭非生产环境的虚拟机。注意:预算告警是“通知”,不是“硬性阻断”,真正的阻断需要配合策略或自动化脚本。

预算告警的评估频率约为每 24 小时一次,且预测告警需要至少数天的历史数据才能生效。不要把它当作实时熔断机制。

五、一个可复用的最小落地清单

  • 范围:确认计费账户、订阅、管理组的层级关系,并授予“成本管理读者”。
  • 标签:至少启用 CostCenter、Environment、Owner 三个标签,并在资源组与资源上保持一致。
  • 视图:保存“月度总览”“资源组日趋势”“按标签分摊”三个视图。
  • 导出:配置每日实际成本导出到存储账户,格式优先 Parquet。
  • 预算:按订阅或资源组设置月度预算,配置 50%/80%/100% 实际成本告警与 100% 预测告警。
  • 验证:在成本分析中确认数据延迟与标签覆盖率,在预算页面确认告警历史与操作组执行记录。