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):
- 初始预算: Error Budget = 10,000,000 × 0.001 = 10,000 次
- 第 7 天结束时: 累计错误 = 3,000 次 → 预算消耗 = 3,000;预算剩余 = 10,000 - 3,000 = 7,000 次
- 第 14 天结束时: 累计错误 = 8,000 次 → 预算消耗 = 8,000;预算剩余 = 10,000 - 8,000 = 2,000 次
- 第 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 小时)的燃烧速率,可以快速发现突发故障,同时避免对瞬时抖动过度反应。
4.4 燃烧速率与告警策略的量化关系
为了将燃烧速率转化为可操作的告警规则,需要定义具体的阈值和时间窗口。下表展示了典型的告警策略配置:
| 告警级别 | 燃烧速率阈值 | 评估窗口 | 触发条件 | 响应动作 |
|---|---|---|---|---|
| 紧急(Page) | ≥ 2 | 1 小时 | 预算剩余 < 10% | 立即唤醒 On-Call 工程师 |
| 高(Ticket) | ≥ 1 | 6 小时 | 预算剩余 < 20% | 创建工单,日间处理 |
| 警告(Warning) | ≥ 0.5 | 24 小时 | 预算剩余 < 50% | 发送通知,关注趋势 |
实践要点: 告警策略应基于“预算剩余”和“燃烧速率”的组合判断。仅依赖单一指标可能导致误报或漏报。例如,燃烧速率很高但预算剩余充足时,可能不需要立即 Page;而燃烧速率较低但预算已接近耗尽时,也应触发告警。
4.5 总结:Error Budget 定义的核心要点
- 数学公式: Error Budget = 总事件数 × (1 - SLO),是窗口内允许的最大错误总量。
- 消耗与剩余: 消耗是累计错误事件数,剩余是预算减去消耗。监控消耗速率比监控值更重要。
- 燃烧概念: 燃烧速率 = 实际错误率 / 允许错误率。它是判断系统健康状态和触发告警的关键指标。
- 告警策略: 基于燃烧速率和预算剩余的组合阈值,实现分级告警(紧急、高、警告)。