4. Error Budget 定义:数学公式、消耗与剩余、燃烧概念

Error Budget(错误预算)是 SRE 实践中的核心量化工具,它将抽象的可靠性目标转化为可度量的、可操作的“预算额度”。本章将严格定义 Error Budget 的数学公式,解析预算消耗与剩余的计算逻辑,并深入阐释“燃烧”这一关键概念。

4.1 Error Budget 的数学公式

Error Budget 的数学定义基于两个核心指标:SLI(服务等级指标)和SLO(服务等级目标)。其基本公式如下:

Error Budget = 1 - SLO(以小数表示)

更精确地,在给定的时间窗口(通常为 28 天或 30 天滚动窗口)内:

Error Budget = 总事件数 × (1 - SLO)
其中:
- 总事件数 = 总请求数、总操作次数或总时间单位(取决于 SLI 类型)
- SLO = 目标成功率(例如 99.9% 对应 0.999)

示例:

  • 若 SLO 为 99.9%(三个九),则 Error Budget = 1 - 0.999 = 0.001(即 0.1% 的请求可以失败)。
  • 若 28 天内总请求数为 10,000,000,则允许的失败请求数 = 10,000,000 × 0.001 = 10,000 次。
关键理解: Error Budget 不是“剩余可用错误数”,而是“在 SLO 窗口内允许发生的最大错误总量”。它代表系统在满足用户期望的前提下,可以承受的“不完美”程度。

4.2 预算消耗与剩余的计算逻辑

预算消耗与剩余的计算是动态的,基于实际观测到的错误事件。核心逻辑如下:

指标 定义 计算公式
预算消耗 从窗口开始至今,已发生的错误事件总数 Consumed = Σ(错误事件)
预算剩余 窗口内剩余可用的错误事件数 Remaining = Error Budget - Consumed
预算剩余率 剩余预算占原始预算的百分比 Remaining% = (Remaining / Error Budget) × 100%

计算示例(28天窗口,SLO=99.9%,总请求=10,000,000):

  1. 初始预算: Error Budget = 10,000,000 × 0.001 = 10,000 次
  2. 第 7 天结束时: 累计错误 = 3,000 次 → 预算消耗 = 3,000;预算剩余 = 10,000 - 3,000 = 7,000 次
  3. 第 14 天结束时: 累计错误 = 8,000 次 → 预算消耗 = 8,000;预算剩余 = 10,000 - 8,000 = 2,000 次
  4. 第 21 天结束时: 累计错误 = 9,500 次 → 预算消耗 = 9,500;预算剩余 = 10,000 - 9,500 = 500 次
重要陷阱: 预算剩余不是线性递减的。如果某天发生大规模故障(如 5,000 次错误),预算会瞬间消耗 50%。因此,监控预算消耗的速率比监控值更重要。

4.3 预算的“燃烧”概念

“燃烧”(Burn)是 Error Budget 动态管理中的核心概念,它描述了预算被消耗的速率。燃烧速率决定了系统是否处于健康状态,以及是否需要触发告警或干预。

燃烧速率定义:

燃烧速率 = 实际错误率 / 允许错误率

其中:
- 实际错误率 = 单位时间内的错误事件数 / 单位时间内的总事件数
- 允许错误率 = 1 - SLO

燃烧速率的含义:

  • 燃烧速率 = 1: 系统恰好以 SLO 允许的最大错误率运行,预算消耗与时间成正比。
  • 燃烧速率 > 1: 系统错误率超过 SLO 允许值,预算正在加速消耗。例如,燃烧速率 = 2 意味着预算消耗速度是正常的两倍。
  • 燃烧速率 < 1: 系统运行优于 SLO,预算消耗缓慢,有更多“余量”应对突发故障。

燃烧速率与告警触发:

Google SRE 实践定义了基于燃烧速率的告警策略。例如:

  • 若燃烧速率持续 1 小时 ≥ 2,且预算剩余不足 10%,触发 Page(紧急告警)。
  • 若燃烧速率持续 6 小时 ≥ 1,触发 Ticket(工单告警)。
最佳实践: 使用“多窗口燃烧速率告警”策略。同时监控短窗口(如 1 小时)和长窗口(如 6 小时)的燃烧速率,可以快速发现突发故障,同时避免对瞬时抖动过度反应。
Error Budget 生命周期与燃烧概念 Error Budget 生命周期与燃烧概念 初始 Error Budget 总允许错误数 正常消耗 燃烧速率 ≈ 1 加速燃烧 燃烧速率 > 1 预算耗尽 触发告警 / 冻结发布 预算恢复 窗口滚动 / 错误率下降 核心概念: 燃烧速率 = 实际错误率 / 允许错误率。当燃烧速率持续 > 1 时,预算加速消耗,需触发告警或干预。

4.4 燃烧速率与告警策略的量化关系

为了将燃烧速率转化为可操作的告警规则,需要定义具体的阈值和时间窗口。下表展示了典型的告警策略配置:

告警级别 燃烧速率阈值 评估窗口 触发条件 响应动作
紧急(Page) ≥ 2 1 小时 预算剩余 < 10% 立即唤醒 On-Call 工程师
高(Ticket) ≥ 1 6 小时 预算剩余 < 20% 创建工单,日间处理
警告(Warning) ≥ 0.5 24 小时 预算剩余 < 50% 发送通知,关注趋势
实践要点: 告警策略应基于“预算剩余”和“燃烧速率”的组合判断。仅依赖单一指标可能导致误报或漏报。例如,燃烧速率很高但预算剩余充足时,可能不需要立即 Page;而燃烧速率较低但预算已接近耗尽时,也应触发告警。
燃烧速率与告警阈值关系 燃烧速率与告警阈值关系 燃烧速率 2 1 0.5 0 1h 6h 24h 紧急阈值 高阈值 警告阈值 告警触发条件:燃烧速率超过阈值 且 预算剩余低于对应比例(如紧急:剩余 < 10%)

4.5 总结:Error Budget 定义的核心要点

  • 数学公式: Error Budget = 总事件数 × (1 - SLO),是窗口内允许的最大错误总量。
  • 消耗与剩余: 消耗是累计错误事件数,剩余是预算减去消耗。监控消耗速率比监控值更重要。
  • 燃烧概念: 燃烧速率 = 实际错误率 / 允许错误率。它是判断系统健康状态和触发告警的关键指标。
  • 告警策略: 基于燃烧速率和预算剩余的组合阈值,实现分级告警(紧急、高、警告)。