2. Error Budget 消耗模型:理解消耗速率、消耗窗口、预算剩余百分比的计算公式与可视化
Error Budget 消耗模型是 SLO 台账故障排查的核心量化工具。它把抽象的“可用性承诺”转化为可实时追踪的“消耗速率”与“剩余余额”,让运维团队能像管理财务预算一样管理可靠性风险。本节将拆解三个关键指标:消耗速率、消耗窗口、预算剩余百分比,并给出标准计算公式与可视化方法。
2.1 核心指标定义与计算公式
在定义 Error Budget 消耗模型前,先明确三个基础变量:
| 变量 | 符号 | 说明 | 示例值 |
|---|---|---|---|
| SLO 目标 | S |
服务承诺的可用性百分比(如 99.9%) | 0.999 |
| 总时间窗口 | T |
SLO 评估周期(如 30 天 = 43200 分钟) | 43200 min |
| 总请求量 | R_total |
窗口内所有合法请求总数 | 10,000,000 |
| 错误请求量 | R_error |
窗口内不符合 SLO 的请求数 | 50,000 |
Error Budget 总量:
EB_total = (1 - S) × R_total
例如 S=0.999、R_total=10,000,000 时,EB_total = 10,000 个错误请求。
已消耗 Error Budget:
EB_consumed = R_error
预算剩余百分比:
EB_remaining% = ((EB_total - EB_consumed) / EB_total) × 100%
当 EB_remaining% 趋近 0% 时,服务面临 SLO 违约风险。
2.2 消耗速率:衡量风险积累速度
消耗速率(Burn Rate)表示 Error Budget 被消耗的快慢,单位是“倍速”。1 倍速意味着按当前错误率,刚好在窗口结束时耗尽预算;2 倍速意味着预算将在窗口一半时耗尽。
计算公式:
Burn Rate = (EB_consumed / elapsed_time) / (EB_total / T)
其中 elapsed_time 是当前窗口已过去的时间。
| 消耗速率 | 含义 | 风险等级 |
|---|---|---|
| < 1x | 错误率低于预算分配,安全 | 低 |
| = 1x | 刚好按预算消耗,临界 | 中 |
| 1x ~ 2x | 消耗偏快,需关注 | 高 |
| > 2x | 快速消耗,可能触发告警 | 严重 |
2.3 消耗窗口:多时间尺度下的预算视图
消耗窗口(Consumption Window)是指评估 Error Budget 消耗的时间粒度。单一窗口(如 30 天)无法及时反映突发故障的影响,因此 SRE 实践中通常使用多窗口策略:
- 短窗口(1 小时 / 6 小时):用于快速检测突发错误爆发,消耗速率阈值设得较高(如 10x)。
- 中窗口(1 天 / 3 天):用于检测持续性问题,消耗速率阈值适中(如 2x)。
- 长窗口(30 天):用于评估整体 SLO 合规性,消耗速率阈值较低(如 1x)。
多窗口联合告警策略能有效平衡误报率与漏报率:短窗口快速响应,长窗口防止过度告警。
2.4 预算剩余百分比可视化:燃烧速率图
最直观的可视化方式是燃烧速率图(Burn Rate Chart),它同时展示预算剩余百分比、消耗速率和告警阈值。
2.5 消耗模型可视化:架构与数据流
下图展示 Error Budget 消耗模型在可观测性平台中的完整数据流,从指标采集到告警触发。
2.6 多窗口消耗模型对比
| 窗口类型 | 窗口长度 | 典型消耗速率阈值 | 告警延迟 | 适用场景 |
|---|---|---|---|---|
| 短窗口 | 1 小时 | 10x ~ 20x | 几分钟 | 突发故障、代码上线回滚 |
| 中窗口 | 1 天 | 2x ~ 5x | 数十分钟 | 持续性能退化、依赖服务降级 |
| 长窗口 | 30 天 | 1x ~ 1.5x | 数小时 | SLO 合规评估、容量规划 |
2.7 消耗模型在故障排查中的应用
当收到 Error Budget 告警时,按以下步骤排查:
- 确认消耗窗口:查看是哪个窗口触发了告警(1h / 1d / 30d),判断是突发还是持续问题。
- 计算消耗速率:用当前错误量除以已消耗时间,对比预算分配速率,确定严重程度。
- 定位错误来源:按服务、端点、错误码维度下钻,找到消耗 Error Budget 的主要贡献者。
- 评估剩余预算:计算 EB_remaining%,判断是否需要立即回滚或降级。
- 更新台账:将本次消耗事件记录到 SLO 台账,包括消耗速率、窗口、根因和修复动作。