3、误差预算理论基础

误差预算(Error Budget)是 SLO 治理的核心量化工具。它回答了“系统可以有多不可靠”这一关键问题,将抽象的可靠性目标转化为可跟踪、可决策的工程指标。本节将深入拆解误差预算的计算公式、消耗速率与剩余预算的监控方法,以及预算归零与燃尽率的实战意义。

3.1 误差预算的计算公式

误差预算的本质是 SLO 目标允许的最大不可用时间或失败请求量。其通用计算公式如下:

Error Budget = (1 - SLO Target) × Total Time Window

其中:

  • SLO Target:以小数表示的目标值(如 99.9% 对应 0.999)。
  • Total Time Window:滚动窗口时长(通常为 30 天,即 43200 分钟)。

以 30 天滚动窗口、99.9% 可用性 SLO 为例:

Error Budget = (1 - 0.999) × 43200 分钟 = 0.001 × 43200 = 43.2 分钟

这意味着在任意 30 天滚动窗口内,系统最多允许 43.2 分钟的总不可用时间。下表展示了不同 SLO 目标对应的误差预算量级:

SLO 目标 30 天误差预算(分钟) 30 天误差预算(秒) 典型场景
99.9% 43.2 2,592 内部工具、非关键业务
99.95% 21.6 1,296 标准在线服务
99.99% 4.32 259 核心交易、支付系统
99.999% 0.432 25.9 电信、金融核心
实践提示: 对于请求成功率类 SLO(如 99.9% 请求成功),误差预算应基于总请求量计算:Error Budget = Total Requests × (1 - SLO Target)。例如,30 天内 1 亿次请求,99.9% SLO 允许 10 万次失败。

3.2 消耗速率与剩余预算

误差预算不是静态的,它在滚动窗口中持续被消耗或恢复。理解消耗速率和剩余预算的动态变化,是实时运维决策的基础。

3.2.1 消耗速率(Burn Rate)

消耗速率衡量误差预算被消耗的快慢,定义为实际失败率与 SLO 允许失败率的比值:

Burn Rate = Actual Error Rate / Allowed Error Rate

当 Burn Rate = 1 时,表示消耗速度恰好与 SLO 允许的速率一致;大于 1 则意味着预算正在加速消耗。例如:

  • 若 SLO 允许 0.1% 失败率,实际失败率为 0.5%,则 Burn Rate = 5。
  • 若实际失败率为 0.05%,则 Burn Rate = 0.5,预算消耗放缓。

3.2.2 剩余预算(Remaining Budget)

剩余预算表示当前滚动窗口内尚未使用的误差预算额度,计算公式为:

Remaining Budget = Initial Budget - Consumed Budget

剩余预算通常以百分比形式展示,便于团队快速判断健康状况:

  • 绿色区间(> 50%):健康,可进行正常发布。
  • 黄色区间(20% - 50%):关注,需评估变更风险。
  • 红色区间(< 20%):危险,应冻结变更并启动应急。
关键指标: 剩余预算的消耗速率比值更重要。即使剩余预算还有 30%,若 Burn Rate 持续大于 2,则可能在数小时内耗尽,必须提前干预。
误差预算消耗与剩余预算动态示意 误差预算消耗与剩余预算动态示意 滚动窗口时间(30天) 初始预算(100%) 剩余预算 约 35% 消耗速率 Burn Rate = 1.8 故障事件 持续高延迟

3.3 预算归零与燃尽率

当剩余预算降至零或负值时,即发生预算归零(Budget Exhaustion)。此时系统在滚动窗口内的不可用时间已超过 SLO 允许上限,SLO 正式违约。预算归零是最高优先级的运维事件,必须触发以下动作:

  • 立即止损:回滚近期变更、扩容或降级非核心功能。
  • 冻结发布:停止所有非紧急变更,直至预算恢复。
  • 启动复盘:分析根本原因,更新告警阈值和应急流程。

3.3.1 燃尽率(Burn Down Rate)

燃尽率是预算归零的预警指标,定义为当前消耗速率下,剩余预算预计耗尽的时间:

Time to Exhaustion = Remaining Budget / Current Burn Rate

例如,剩余预算为 20 分钟,当前 Burn Rate 为 4,则预计 5 分钟后预算归零。燃尽率帮助团队从“剩余多少”转向“还能撑多久”,是更主动的预警方式。

常见误区: 不要等到预算归零才告警。当燃尽率小于 2 小时时,应触发 P0 级告警;小于 30 分钟时,应自动执行降级或限流策略。预算归零是结果,燃尽率才是过程控制的关键。

3.3.2 预算恢复机制

误差预算在滚动窗口中具有自恢复特性。当系统恢复正常,旧窗口中的故障数据逐渐移出窗口,预算会自然回升。恢复速度取决于故障发生的时间位置:

  • 近期故障:恢复较慢,需等待故障数据移出窗口。
  • 远期故障:恢复较快,故障数据即将过期。

下表总结了预算归零前后的关键状态对比:

状态 剩余预算 燃尽率 推荐动作
健康 > 50% > 24h 正常发布与运维
关注 20% - 50% 4h - 24h 评估变更风险,加强监控
危险 < 20% < 4h 冻结变更,准备应急
归零 ≤ 0 已耗尽 立即止损,启动复盘
预算归零与燃尽率预警流程 预算归零与燃尽率预警流程 剩余预算监控 每 1 分钟计算一次 燃尽率计算 Time to Exhaustion 阈值判断 ≥ 4h / < 4h / ≤ 0 健康:正常发布 燃尽率 ≥ 4h 危险:冻结变更 燃尽率 < 4h 归零:立即止损 剩余预算 ≤ 0
工程落地要点: 在 Prometheus 或 Datadog 中,可使用 burn_rate = rate(failure_count[5m]) / (total_count[5m] * (1 - slo_target)) 实时计算消耗速率。结合 Alertmanager 的 for 子句,可设置“燃尽率 < 2h 持续 5 分钟”触发告警,避免毛刺误报。