3. Error Budget 计算公式:预算消耗速率、剩余预算百分比、预算耗尽时间预测

Error Budget 台账的核心价值在于将抽象的 SLO 偏差转化为可量化的财务式管理指标。本节将深入解析三个关键计算公式:预算消耗速率、剩余预算百分比以及预算耗尽时间预测。这三个公式构成了容量水位动态调整的数学基础,帮助 SRE 团队从“事后灭火”转向“事前预警”。

3.1 核心指标定义与符号约定

在正式推导公式前,统一约定以下符号,确保后续计算口径一致:

符号 含义 单位 说明
SLO 服务等级目标(如 99.9%) 百分比 承诺的可用性上限
EB_total 总 Error Budget 分钟 或 请求数 窗口期内允许的最大不可用时间或错误请求数
EB_consumed 已消耗 Error Budget 分钟 或 请求数 当前累计的错误量
EB_remaining 剩余 Error Budget 分钟 或 请求数 EB_total - EB_consumed
Δt 观察时间窗口 小时 / 天 通常为 28 天或 30 天滑动窗口
R_consume 预算消耗速率 %/小时 或 单位/小时 单位时间内 Error Budget 的消耗量
口径对齐提示: 在容量规划场景中,建议统一使用“分钟”作为 Error Budget 的单位,便于与故障恢复时间(MTTR)直接关联。若使用请求数,需确保请求总量在窗口期内稳定,否则速率计算会失真。

3.2 预算消耗速率(Burn Rate)

预算消耗速率衡量的是 Error Budget 被“烧掉”的速度。它是容量水位告警的第一级触发条件。计算公式如下:

R_consume = EB_consumed / Δt

其中:

  • EB_consumed:在时间窗口 Δt 内累计消耗的 Error Budget(单位:分钟)。
  • Δt:观察窗口长度(单位:小时)。

实际应用示例:

假设某服务 SLO = 99.9%,28 天总 Error Budget = 40.32 分钟。若在过去 1 小时内,系统发生了 2 分钟的错误(即 EB_consumed = 2 分钟),则:

R_consume = 2 分钟 / 1 小时 = 2 分钟/小时

这意味着按照当前速率,每小时会消耗 2 分钟的预算。如果该速率持续,剩余预算将在 EB_remaining / R_consume 小时内耗尽。

容量水位关联: 当 R_consume 超过“安全阈值”(例如 0.5 分钟/小时)时,表明当前容量水位可能无法支撑突发流量,需要立即启动扩容或降级预案。台账中应记录该速率的历史趋势,用于预测未来容量缺口。

3.3 剩余预算百分比(Remaining Budget Percentage)

剩余预算百分比直观反映当前“家底”还剩多少,是容量规划决策的仪表盘指标。计算公式:

EB_remaining% = (EB_remaining / EB_total) × 100%

其中:

  • EB_remaining = EB_total - EB_consumed
  • EB_total = (1 - SLO) × 总时间窗口(分钟)

示例计算:

继续使用上述场景:EB_total = 40.32 分钟,假设已消耗 10 分钟,则:

EB_remaining% = (40.32 - 10) / 40.32 × 100% ≈ 75.2%

剩余 75.2% 的预算,看起来充裕。但若结合消耗速率分析,可能发现潜在风险。

剩余预算百分比 健康状态 容量水位建议
> 80% 健康 维持当前容量,可进行常规变更
50% - 80% 关注 审查消耗速率,准备扩容预案
20% - 50% 警告 启动容量评估,限制高风险发布
< 20% 危险 立即扩容或降级,冻结所有变更
常见误区: 仅看剩余百分比容易产生“还有不少预算”的错觉。例如,窗口期刚过 1 天就消耗了 30% 的预算,虽然剩余 70%,但消耗速率极高,必须立即干预。因此,剩余百分比必须与消耗速率联合解读。

3.4 预算耗尽时间预测(Time to Budget Exhaustion)

这是最具前瞻性的指标,直接回答“按照当前速率,我们的 Error Budget 还能撑多久?” 计算公式:

T_exhaust = EB_remaining / R_consume

其中:

  • EB_remaining:当前剩余预算(分钟)。
  • R_consume:当前消耗速率(分钟/小时)。

预测示例:

假设 EB_remaining = 30.32 分钟,R_consume = 2 分钟/小时,则:

T_exhaust = 30.32 / 2 ≈ 15.16 小时

这意味着如果速率不变,大约 15 小时后 Error Budget 将归零,SLO 将面临违约风险。

容量规划中的使用:

  • 短期预测(分钟/小时级): 用于触发自动扩缩容。当 T_exhaust < 2 小时时,自动扩容集群。
  • 中期预测(天级): 用于容量水位调整。当 T_exhaust < 48 小时时,启动容量申请流程。
  • 长期预测(周级): 用于预算规划。结合历史速率趋势,预测下个窗口期的容量需求。

3.5 三指标联动关系图

下图展示了三个核心指标在 Error Budget 台账中的联动逻辑,以及它们如何驱动容量水位决策:

Error Budget 三指标联动与容量决策流程 Error Budget 三指标联动与容量决策流程 原始数据采集 预算消耗速率 (R) 剩余预算百分比 (%) 预算耗尽时间 (T) 容量水位决策 台账记录与告警 📌 联动说明: 1. 原始数据同时计算消耗速率和剩余百分比,两者独立但互补。 2. 消耗速率与剩余百分比共同输入耗尽时间预测模型。 3. 三个指标综合驱动容量水位决策,决策结果写入台账并触发告警。

3.6 台账记录模板与计算示例

在实际台账中,建议按以下格式记录每次计算的结果,便于趋势分析和容量回溯:

时间戳 EB_consumed (分钟) EB_remaining (分钟) R_consume (分钟/小时) EB_remaining% T_exhaust (小时) 容量水位动作
2025-03-01 08:00 2.0 38.32 0.25 95.0% 153.3 无操作
2025-03-02 08:00 10.0 30.32 0.42 75.2% 72.2 审查容量
2025-03-03 08:00 25.0 15.32 1.04 38.0% 14.7 启动扩容
2025-03-03 14:00 35.0 5.32 2.50 13.2% 2.1 紧急扩容
台账口径优化要点:
  • 时间窗口对齐: 所有计算必须基于相同的滑动窗口(如 28 天),避免因窗口不一致导致指标矛盾。
  • 速率平滑: 使用指数加权移动平均(EWMA)对 R_consume 进行平滑,减少毛刺干扰,使 T_exhaust 预测更稳定。
  • 多速率阈值: 设置多级消耗速率阈值(如 0.5x、1x、2x 安全速率),对应不同的容量水位响应策略。

3.7 公式在容量水位优化中的实战意义

通过上述三个公式的联动,SRE 团队可以实现以下能力:

  • 从被动到主动: 不再等待 SLO 违约才行动,而是通过 T_exhaust 提前预知风险窗口。
  • 量化扩容决策: 当 T_exhaust < 4 小时时,自动触发扩容流程,将容量水位提升至 1.5x 当前负载。
  • 口径统一: 所有团队使用相同的计算公式和台账模板,消除因计算口径不同导致的沟通成本。
避坑指南: 避免在高峰期和非高峰期使用相同的消耗速率阈值。建议根据历史流量模式,设置动态阈值(如白天 0.8 分钟/小时,夜间 0.3 分钟/小时),使容量水位调整更贴合实际业务负载。