核心概念:什么是 Error Budget?SLO 与 SLI 的定义与计算方式
在分布式追踪与值班告警体系中,Error Budget(错误预算) 是连接“可靠性目标”与“日常运维动作”的量化桥梁。没有 Error Budget,SLO 只是一纸空文;有了 Error Budget,团队才能科学地决定“何时必须响应告警”与“何时可以放心发布”。
2.1 从 SLI 到 SLO:可靠性的度量阶梯
在定义 Error Budget 之前,必须先理解两个基础概念:SLI(Service Level Indicator,服务等级指标) 与 SLO(Service Level Objective,服务等级目标)。
| 概念 | 定义 | 典型示例 | 度量单位 |
|---|---|---|---|
| SLI | 对服务质量的某个维度进行实际测量得到的数值 | 请求成功率、P99 延迟、吞吐量 | 百分比 / 毫秒 / QPS |
| SLO | 团队为 SLI 设定的目标阈值,是承诺或内部标准 | 99.9% 的请求成功、P99 延迟 < 200ms | 百分比 / 时间 |
| Error Budget | SLO 允许的最大失效时间或失效次数 | 30 天内最多允许 43 分钟不可用 | 分钟 / 请求数 / 百分比 |
关键公式:
Error Budget = 1 − SLO(以百分比表示)
例如:SLO = 99.9% → Error Budget = 0.1% 的时间窗口。
Error Budget = 1 − SLO(以百分比表示)
例如:SLO = 99.9% → Error Budget = 0.1% 的时间窗口。
2.2 SLI 的选取与计算方式
SLI 必须可测量、可对比、与用户体验强相关。在分布式追踪场景下,最常用的三类 SLI 如下:
- 可用性 SLI:成功请求数 ÷ 总请求数 × 100%。通常以 HTTP 状态码 2xx/4xx/5xx 为判断依据。
- 延迟 SLI:通常取 P50、P95、P99 分位值。例如“P99 延迟 ≤ 500ms”表示 99% 的请求在 500ms 内完成。
- 错误率 SLI:基于 Span 状态(OK / ERROR)计算。在分布式追踪中,一个 Trace 只要有一个 ERROR Span,即可计入错误。
# 可用性 SLI 计算示例(基于追踪数据)
total_spans = count(trace_span{service="payment"})
error_spans = count(trace_span{service="payment", status="ERROR"})
availability_sli = (total_spans - error_spans) / total_spans * 100
# 延迟 SLI 计算示例(P99)
p99_latency = histogram_quantile(0.99,
rate(trace_span_duration_seconds_bucket{service="payment"}[5m]))
2.3 SLO 的定义与窗口选择
SLO 不是拍脑袋定的数字,它需要结合业务容忍度与基础设施成本。常见的 SLO 定义方式包括:
| SLO 类型 | 定义方式 | 适用场景 |
|---|---|---|
| 滚动窗口 SLO | 基于过去 N 天的滑动窗口计算 | 持续监控、告警阈值 |
| 日历窗口 SLO | 基于固定月份/季度计算 | 业务报告、SLA 对账 |
| 复合 SLO | 多个 SLI 加权组合 | 多维度服务质量评估 |
实践建议: 值班告警场景优先使用 滚动窗口 SLO(如 30 天滑动窗口),因为它能实时反映近期服务质量,避免“月初预算重置”导致的告警盲区。
2.4 Error Budget 的计算与消耗模型
Error Budget 的核心思想是:只要预算未耗尽,团队可以接受一定程度的故障或发布风险。其计算模型如下:
Error Budget = 总时间窗口 × (1 − SLO)
示例(30 天窗口,SLO = 99.9%):
总时间 = 30 × 24 × 60 = 43,200 分钟
Error Budget = 43,200 × 0.001 = 43.2 分钟
当前消耗 = 窗口内累计不可用时间 / 总时间 × 100%
剩余预算 = Error Budget − 当前消耗
常见误区: Error Budget 不是“故障配额”,而是“风险预算”。即使预算还有剩余,也不意味着可以故意制造故障;它只是帮助团队在“发布速度”与“可靠性”之间做量化决策。
2.5 SLI → SLO → Error Budget 关系图
下图展示了从原始追踪数据到 Error Budget 的完整转化链路:
2.6 分布式追踪中的 Error Budget 特殊考量
在基于分布式追踪的告警体系中,Error Budget 的计算需要额外注意以下三点:
- Span 级 vs Trace 级:一个 Trace 包含多个 Span,错误可能发生在下游依赖。建议以 Trace 最终状态 作为 SLI 计算单元,避免“局部错误、全局成功”的误判。
- 采样偏差:分布式追踪通常只采样部分请求(如 1%)。Error Budget 计算必须基于采样率校正,否则会低估实际错误量。
- 依赖爆炸:一个请求可能经过 20+ 服务。Error Budget 应分层定义:全局 SLO(端到端)与 组件 SLO(单服务)分开管理。
值班台实战要点:
• 告警阈值建议设为 Error Budget 消耗的 70%(预警)和 90%(紧急)。
• 每次告警触发时,自动计算“当前剩余预算”并附在告警消息中,帮助值班人员快速判断严重程度。
• 每周自动生成 Error Budget 消耗报告,用于发布决策会议。
• 告警阈值建议设为 Error Budget 消耗的 70%(预警)和 90%(紧急)。
• 每次告警触发时,自动计算“当前剩余预算”并附在告警消息中,帮助值班人员快速判断严重程度。
• 每周自动生成 Error Budget 消耗报告,用于发布决策会议。