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 的消耗量 |
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 小时内耗尽。
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% | 危险 | 立即扩容或降级,冻结所有变更 |
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 台账中的联动逻辑,以及它们如何驱动容量水位决策:
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 当前负载。
- 口径统一: 所有团队使用相同的计算公式和台账模板,消除因计算口径不同导致的沟通成本。