误差预算核心原理
误差预算(Error Budget)是 SRE 实践中最具操作性的量化工具。它将抽象的可用性目标转化为可消耗的“预算”,让团队在稳定性与迭代速度之间做出数据驱动的决策。本节从定义出发,逐步深入预算消耗、燃烧率及告警策略。
2.1 误差预算定义
误差预算 = 1 − SLO。例如,SLO 为 99.9%,则误差预算为 0.1%。这 0.1% 的时间(或请求量)是系统允许“出错”的额度。
| SLO 目标 | 误差预算(时间窗口 30 天) | 可接受错误时间 |
|---|---|---|
| 99.9% | 0.1% | ≈ 43.2 分钟 |
| 99.99% | 0.01% | ≈ 4.32 分钟 |
| 99.999% | 0.001% | ≈ 25.9 秒 |
关键认知:误差预算不是“失败指标”,而是“创新燃料”。只要预算未耗尽,团队可以自由发布新功能、执行运维操作,无需担心触发告警。
2.2 预算消耗速率
预算消耗速率衡量错误事件消耗预算的速度。计算公式:
消耗速率 = 错误事件持续时间 / 总预算时间窗口
例如,一个持续 10 分钟的中断,在 30 天窗口(43,200 分钟)内消耗了 10 / 43,200 ≈ 0.023% 的预算。如果 SLO 为 99.9%(预算 0.1%),则本次中断消耗了 23% 的可用预算。
2.3 预算燃烧率
燃烧率(Burn Rate)是预算消耗速度与理想消耗速度的比值。理想速度是均匀消耗预算,使预算在窗口期末刚好用完。
燃烧率 = 实际消耗速率 / 理想消耗速率
燃烧率 > 1 表示消耗过快,系统可能在窗口期结束前耗尽预算。燃烧率 < 1 表示消耗较慢,系统有更多安全余量。
| 燃烧率 | 含义 | 示例场景 |
|---|---|---|
| 0.5 | 消耗速度是理想的一半 | 轻微性能退化,偶发错误 |
| 1.0 | 恰好按理想速度消耗 | 系统运行在 SLO 边界 |
| 2.0 | 消耗速度是理想的两倍 | 持续中断或大量错误 |
| 10.0 | 消耗速度是理想的十倍 | 严重故障,预算快速耗尽 |
实战要点:燃烧率告警比固定阈值告警更灵敏。一个燃烧率 10 的事件,即使只持续 5 分钟,也可能触发紧急告警,而传统阈值告警可能因窗口期长而忽略。
2.4 燃烧率告警策略
燃烧率告警策略使用多窗口、多燃烧率的组合,实现快速检测与误报抑制的平衡。Google SRE 推荐使用“多燃烧率告警”方法:
- 快速燃烧告警(高燃烧率 + 短窗口):检测严重故障,快速响应。
- 慢速燃烧告警(低燃烧率 + 长窗口):检测渐进式退化,避免误报。
- 预算耗尽告警(剩余预算低于阈值):触发人工介入。
| 告警级别 | 燃烧率 | 窗口期 | 触发条件 | 响应时间 |
|---|---|---|---|---|
| P0(紧急) | ≥ 10 | 5 分钟 | 严重中断 | 立即 |
| P1(高) | ≥ 2 | 30 分钟 | 持续错误 | 5 分钟内 |
| P2(中) | ≥ 1 | 6 小时 | 性能退化 | 30 分钟内 |
| P3(低) | ≥ 0.5 | 24 小时 | 预算消耗加速 | 下一工作日 |
常见陷阱:只设置单一燃烧率告警。如果只设置高燃烧率告警,会漏掉渐进式退化;如果只设置低燃烧率告警,严重故障的响应时间会过长。必须组合使用。
2.5 误差预算台账
误差预算台账是预算消耗的实时记录,用于跟踪预算使用情况、辅助决策。台账包含以下核心字段:
| 字段 | 说明 | 示例值 |
|---|---|---|
| 时间戳 | 事件发生时间 | 2025-03-15 14:23:00 |
| 事件类型 | 中断、延迟、错误 | 5xx 错误率升高 |
| 消耗预算 | 本次事件消耗的预算百分比 | 0.02% |
| 剩余预算 | 窗口期剩余可用预算 | 0.08% |
| 燃烧率 | 事件期间的燃烧率 | 2.5 |
| 影响范围 | 受影响的用户或服务 | 支付服务 30% 用户 |
台账实战价值:通过台账可以回答“预算花在哪了?”、“哪些事件消耗最多?”、“是否需要调整 SLO?”。台账是 SLO 持续改进的数据基础。
2.6 预算耗尽后的行动
当误差预算耗尽时,团队应进入“冻结期”:
- 停止非关键发布:所有新功能、实验性变更暂停。
- 启动根因分析:定位预算消耗的主要来源。
- 执行稳定性改进:修复缺陷、优化性能、增加冗余。
- 恢复预算:通过时间窗口自然恢复(预算按窗口期滚动重置)。
注意:预算耗尽不是“失败”,而是系统给出的明确信号——稳定性需要优先于新功能。忽略这个信号会导致 SLO 持续违约,最终影响用户信任。