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 台账数据流与字段关系
下图展示了从原始监控指标到水位等级输出的完整数据流,以及各字段之间的依赖关系:
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,触发冻结发布与立即扩容动作。