误差预算核心原理

误差预算(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 分钟,也可能触发紧急告警,而传统阈值告警可能因窗口期长而忽略。
误差预算燃烧率与告警级别关系 理想消耗线(燃烧率=1) 燃烧率 0.5 — 安全区 燃烧率 1.0 — 警戒区 燃烧率 2.0 — 告警区 燃烧率 10.0 — 紧急区 燃烧率升高 燃烧率越高,预算消耗越快,告警响应时间越短

2.4 燃烧率告警策略

燃烧率告警策略使用多窗口、多燃烧率的组合,实现快速检测与误报抑制的平衡。Google SRE 推荐使用“多燃烧率告警”方法:

  1. 快速燃烧告警(高燃烧率 + 短窗口):检测严重故障,快速响应。
  2. 慢速燃烧告警(低燃烧率 + 长窗口):检测渐进式退化,避免误报。
  3. 预算耗尽告警(剩余预算低于阈值):触发人工介入。
告警级别 燃烧率 窗口期 触发条件 响应时间
P0(紧急) ≥ 10 5 分钟 严重中断 立即
P1(高) ≥ 2 30 分钟 持续错误 5 分钟内
P2(中) ≥ 1 6 小时 性能退化 30 分钟内
P3(低) ≥ 0.5 24 小时 预算消耗加速 下一工作日
常见陷阱:只设置单一燃烧率告警。如果只设置高燃烧率告警,会漏掉渐进式退化;如果只设置低燃烧率告警,严重故障的响应时间会过长。必须组合使用。
多燃烧率告警策略流程 SLI 数据输入 计算燃烧率 多窗口匹配 高燃烧率告警 低燃烧率告警 多窗口匹配确保告警既快速又准确,避免单一窗口的误报或漏报

2.5 误差预算台账

误差预算台账是预算消耗的实时记录,用于跟踪预算使用情况、辅助决策。台账包含以下核心字段:

字段 说明 示例值
时间戳 事件发生时间 2025-03-15 14:23:00
事件类型 中断、延迟、错误 5xx 错误率升高
消耗预算 本次事件消耗的预算百分比 0.02%
剩余预算 窗口期剩余可用预算 0.08%
燃烧率 事件期间的燃烧率 2.5
影响范围 受影响的用户或服务 支付服务 30% 用户
台账实战价值:通过台账可以回答“预算花在哪了?”、“哪些事件消耗最多?”、“是否需要调整 SLO?”。台账是 SLO 持续改进的数据基础。

2.6 预算耗尽后的行动

当误差预算耗尽时,团队应进入“冻结期”:

  • 停止非关键发布:所有新功能、实验性变更暂停。
  • 启动根因分析:定位预算消耗的主要来源。
  • 执行稳定性改进:修复缺陷、优化性能、增加冗余。
  • 恢复预算:通过时间窗口自然恢复(预算按窗口期滚动重置)。
注意:预算耗尽不是“失败”,而是系统给出的明确信号——稳定性需要优先于新功能。忽略这个信号会导致 SLO 持续违约,最终影响用户信任。