4. 台账数据结构设计:字段定义

Error Budget 台账是容量水位管理的核心数据载体。一个设计合理的台账结构,必须能够同时承载服务等级目标(SLO)、实时合规状态(SLI)、剩余预算以及容量水位等级四个维度的信息。本章定义标准台账字段,并给出每个字段的取值规则与计算口径。

4.1 核心字段总览

台账采用扁平化宽表结构,每行代表一个服务单元(微服务、API 网关、数据管道等)。以下为必选字段及其数据类型:

字段名 类型 示例值 说明
service_name string order-svc 服务唯一标识,与 CMDB 对齐
slo_target float 99.95 年度/月度 SLO 目标(百分比)
current_sli float 99.87 滚动窗口(28 天)实际可用性
budget_balance float 0.08 剩余 Error Budget(百分比)
water_level enum WARNING 容量水位等级:SAFE / WARNING / CRITICAL / EXHAUSTED
关键口径:budget_balance = slo_target - current_sli。当 current_sli 低于 slo_target 时,余额为负值,表示预算已超支。

4.2 字段计算与更新规则

每个字段的更新频率和计算来源不同,台账引擎需要按以下规则执行:

  • service_name:静态配置,由服务注册中心或 CMDB 导入,变更时手动同步。
  • slo_target:季度/年度评审后锁定,非紧急情况不修改。取值来自 SRE 团队与业务方签订的 SLO 协议。
  • current_sli:每 5 分钟由监控系统(Prometheus / Datadog)计算一次,采用滚动 28 天窗口的可用性数据。
  • budget_balance:每次 current_sli 更新后自动重算。公式为:budget_balance = slo_target - current_sli。
  • water_level:根据 budget_balance 落入的阈值区间动态映射,映射规则见下表。

4.3 水位等级映射规则

水位等级是容量决策的触发信号。我们将 budget_balance 的连续值离散化为四个等级,每个等级对应不同的运维动作:

水位等级 budget_balance 区间 颜色标识 建议动作
SAFE ≥ 0.10 绿 常规发布,无需额外容量干预
WARNING [0.05, 0.10) 黄 暂停非关键变更,启动容量评估
CRITICAL [0.00, 0.05) 橙 冻结发布,立即扩容或降级
EXHAUSTED < 0.00 红 触发应急响应,强制回滚或限流
实践建议:阈值区间可根据服务重要度调整。核心支付服务可将 WARNING 阈值上浮至 0.15,非关键日志服务可下调至 0.03。台账字段中应额外保留 warning_threshold 和 critical_threshold 两个自定义字段。

4.4 台账数据流与字段关系

下图展示了从原始监控指标到水位等级输出的完整数据流,以及各字段之间的依赖关系:

Error Budget 台账字段数据流 监控指标采集 current_sli 计算 slo_target 配置 budget_balance 计算 water_level 映射 台账记录输出 说明: budget_balance = slo_target - current_sli water_level 由 budget_balance 落入的阈值区间决定

4.5 字段扩展与自定义维度

基础字段满足通用场景,但在实际生产中,建议根据组织需求扩展以下字段:

  • owner_team:服务所属团队,用于告警分派和容量预算归属。
  • deployment_env:环境标签(prod / staging),区分不同环境的 SLO 口径。
  • rolling_window_days:SLI 计算窗口长度,默认 28 天,可调整为 7 天或 90 天。
  • last_updated:台账最近一次更新时间戳,用于审计和延迟检测。
  • trend_direction:budget_balance 的 7 天变化趋势(up / down / flat),辅助预判水位变化。
避坑提醒:不要将 water_level 直接作为告警触发条件。水位等级是离散状态,频繁抖动会导致告警风暴。建议在台账中额外保留 water_level_smoothed 字段,使用 3 次采样中位数进行平滑。

4.6 台账记录示例

以下为一条完整的台账记录 JSON 示例,展示字段在实际数据中的取值:

{
  "service_name": "payment-gateway",
  "slo_target": 99.99,
  "current_sli": 99.97,
  "budget_balance": 0.02,
  "water_level": "CRITICAL",
  "owner_team": "fin-sre",
  "deployment_env": "prod",
  "rolling_window_days": 28,
  "last_updated": "2025-03-21T14:30:00Z",
  "trend_direction": "down"
}

该示例中,budget_balance = 0.02 落入 [0.00, 0.05) 区间,水位等级为 CRITICAL,触发冻结发布与立即扩容动作。