4. Error Budget 消耗与燃烧速率:定义燃烧速率 (Burn Rate) 与衡量预算消耗速度

在 SRE 实践中,仅仅知道 Error Budget 剩余多少是不够的——我们需要知道它消耗得有多快。燃烧速率 (Burn Rate) 正是衡量这一速度的核心指标,它决定了团队是否需要在故障发生后的几分钟内触发告警,以及是否应该自动阻断灰度发布。

4.1 燃烧速率的定义

燃烧速率表示在给定时间窗口内,Error Budget 消耗的速度相对于总预算的比例。简单来说,它回答了一个问题:“按照当前的错误率,我们多久会耗尽整个季度的 Error Budget?”

核心公式:

Burn Rate = 实际错误率 / 错误预算率 (Error Budget Rate)

其中:
- 错误预算率 = (1 - SLO) × 100%
- 实际错误率 = 1 - 实际可用性

示例: 假设 SLO 为 99.9%(错误预算率 = 0.1%),当前实际可用性为 99.7%(错误率 = 0.3%)。

Burn Rate = 0.3% / 0.1% = 3.0

这意味着当前消耗速度是预算生成速度的 3 倍。如果持续保持此速率,原本支持一个季度的 Error Budget 将在 1/3 的时间内耗尽。

4.2 燃烧速率的分级与告警阈值

Google SRE 经典实践将燃烧速率分为三个关键等级,每个等级对应不同的响应时间和行动策略:

等级 燃烧速率 耗尽时间(季度预算) 告警响应要求 灰度发布影响
慢速燃烧 1.0 ~ 2.0 ≥ 45 天 工作时间告警,24h 内响应 允许低风险发布,需人工评估
中速燃烧 2.0 ~ 6.0 15 ~ 45 天 即时告警,1h 内响应 暂停灰度发布,进入降级模式
快速燃烧 ≥ 6.0 < 15 天 紧急告警,立即响应 阻断所有发布,回滚已发布版本

实践建议: 燃烧速率告警应使用 多窗口策略。例如:同时监控 1 小时窗口(快速检测突发故障)和 6 小时窗口(检测持续低强度退化),避免单一窗口导致的误报或漏报。

4.3 燃烧速率与 Error Budget 消耗的关系图

下图展示了不同燃烧速率下 Error Budget 的消耗曲线。横轴为时间(天),纵轴为 Error Budget 剩余百分比。快速燃烧(红色)在短时间内耗尽预算,而慢速燃烧(绿色)则允许更长的响应窗口。

不同燃烧速率下的 Error Budget 消耗曲线 不同燃烧速率下的 Error Budget 消耗曲线 Error Budget 剩余 (%) 时间 (天) 0% 50% 100% 0 15 30 45 60 慢速 (1.5x) 中速 (4.0x) 快速 (8.0x) 告警阈值 红色: 立即响应 橙色: 1h 内响应 绿色: 24h 内响应

4.4 多窗口燃烧速率检测策略

单一时间窗口的燃烧速率容易产生误判。推荐使用 双窗口策略 来平衡检测速度与准确性:

  • 短窗口(1 小时):快速检测突发性故障,燃烧速率 ≥ 12 时立即告警。
  • 长窗口(6 小时):检测持续性低强度退化,燃烧速率 ≥ 3 时触发告警。
  • 组合逻辑:两个窗口同时超过阈值才触发阻断,避免因单次抖动误阻断发布。

常见陷阱: 仅依赖短窗口可能导致“告警风暴”,而仅依赖长窗口可能错过快速蔓延的故障。务必为不同窗口设置差异化的燃烧速率阈值,并采用 AND 或 OR 逻辑组合。

4.5 燃烧速率在灰度发布准入中的应用

在灰度发布准入环境中,燃烧速率是自动化决策的关键输入:

  1. 准入检查:灰度发布前,检查当前全局燃烧速率。若处于快速燃烧状态(≥ 6.0),直接阻断发布。
  2. 发布中监控:灰度发布期间,持续监控燃烧速率变化。若速率从慢速跃升至中速,自动暂停发布并回滚。
  3. 预算恢复后重试:当燃烧速率降至 1.0 以下并稳定超过 24 小时,允许重新发起灰度发布。

通过将燃烧速率与灰度发布准入系统集成,团队可以实现故障场景下的自动化止损,避免人为决策延迟。