SLI、SLO 和错误预算分别是什么?
简化版
SLI 是用户可感知可靠性的量化指标,SLO 是某时间窗口内的目标,错误预算是允许的不可靠份额。它把“要多可靠”转成工程与发布决策,但 SLO 不是对外法律承诺,SLA 才通常包含合同后果。
详细版
先定义有效事件、好事件、窗口和数据源,例如 30 天内有效支付请求 99.95% 在 1 秒内成功。错误预算为 1-SLO;通过多窗口燃烧率告警,预算消耗过快时冻结高风险发布并优先可靠性工作。
SLI 要从用户边界测量,排除项必须有限且公开;低流量服务同时看事件数和持续时间。滚动窗口适合持续决策,日历窗口适合结算,两者不能混用口径。
完整版教学
一、三个概念的关系
SLI = good events / valid events
SLO = target(SLI, time window)
error budget = 1 - SLO
记忆钩子:SLI 是尺子,SLO 是目标线,错误预算是允许越线的空间。
二、好事件怎样定义
HTTP 200 不一定是业务成功;支付应以明确成功状态和时延判断。用户取消、恶意请求是否进入分母要事先定义,不能事故后临时排除来美化数据。
数据源优先靠近用户边界,并有去重和缺失检测。采样日志不适合直接作为精确 SLI 分母。
三、数字算例
30 天有 1000 万次有效请求,SLO 99.9%,允许坏事件为 10,000,000×0.1%=10,000。若一天已坏 5000 次,就消耗了整月一半预算,不能只看当前成功率仍接近 99.9%。
| SLO | 允许错误率 | 每百万请求允许坏事件 |
|---|---|---|
| 99% | 1% | 10,000 |
| 99.9% | 0.1% | 1,000 |
| 99.99% | 0.01% | 100 |
四、燃烧率告警
燃烧率是当前错误率除以允许错误率。99.9% SLO 下观察到 1% 错误,燃烧率为 10;若持续不变,预算会以正常速度十倍消耗。
短窗口高阈值发现急性事故,长窗口较低阈值发现持续退化;双窗口同时满足可减少瞬时噪声。
五、窗口选择
滚动 30 天每天更新,适合发布决策;日历月易于业务结算,但月初和月末行为不同。窗口和时区必须固定,并处理迟到数据修正。
低流量服务单个错误会造成巨大百分比波动,可结合绝对事件数、合成监控和时间可用性。
六、错误预算策略
预算健康时允许正常创新;快速消耗时收紧发布、增加评审并处理可靠性债务。策略由业务和工程共同约定,不能让平台单方面用预算惩罚团队。
计划维护是否计入预算必须事先定义;用户仍受影响时,随意排除会让 SLO 失去可信度。
多个 SLI 不应简单平均;可为可用性和延迟分别设 SLO,或按关键旅程定义联合好事件。
预算报表要展示数据完整性,采集缺口期间不能默认所有请求都是好事件。
七、常见误区与追问
- 误区:SLO 越高越好。 成本可能急剧上升且超过用户需要。
- 误区:SLO 就是 SLA。 SLA 通常是外部合同与赔付承诺。
- 误区:只看月末是否达标。 快速燃烧需要提前响应。
- 误区:事故后可以调整分母。 排除规则必须预先、透明且稳定。
- 追问:多用户旅程怎么定义? 分步骤 SLI 加端到端关键旅程 SLI。
- 追问:无流量时可用性怎么算? 避免假设 100%,结合合成探测与口径说明。
- 追问:预算耗尽怎么办? 按既定策略限制风险变更并优先恢复可靠性。
八、加强记忆
用“好事件/有效事件”定义 SLI,在固定窗口设可实现的 SLO,剩余份额就是错误预算。用燃烧率提前发现消耗,用预算策略平衡发布和可靠性;口径从用户边界出发,排除、低流量和迟到数据都要预先治理。