4. SLO 与错误预算基础:SLI 定义、SLO 目标设定、错误预算计算、燃烧率概念

在云原生可观测性与可靠性工程中,服务等级目标(SLO)与错误预算(Error Budget)是连接运维与产品决策的核心量化工具。本章将系统拆解 SLI 定义、SLO 设定、错误预算计算及燃烧率机制,为后续 Helm 面板化呈现提供数据基础。

4.1 服务等级指标(SLI)定义

SLI(Service Level Indicator)是对服务某个维度质量的直接测量值,通常表示为一段时间内的比率或百分比。常见的 SLI 类型包括:

SLI 类型 典型指标 测量方式
可用性 请求成功率 成功请求数 / 总请求数
延迟 P95 / P99 响应时间 特定百分位下的响应时间阈值
吞吐量 每秒请求数(RPS) 单位时间处理请求数
错误率 5xx 占比 5xx 响应数 / 总响应数
饱和度 CPU / 内存使用率 资源使用量 / 总容量
SLI 选择原则:优先选择与用户体验直接相关的指标,避免选择内部实现细节(如 GC 暂停时间)作为 SLI,除非它能直接映射到用户感知的延迟或错误。

以下 SVG 展示了 SLI 从原始指标到可观测性数据的转化链路:

SLI 定义与数据采集链路 原始指标 请求数 / 延迟 / 错误码 聚合计算 窗口 / 比率 / 百分位 SLI 定义 可用性 / 延迟 / 错误率 SLO 绑定 阈值 / 窗口 / 燃烧率 SLI 定义要点 • 每个 SLI 必须对应一个明确的测量窗口(如 1 分钟、5 分钟) • 避免使用平均值作为 SLI,优先使用百分位(P95 / P99) • 错误 SLI 应区分客户端错误(4xx)与服务端错误(5xx) • 延迟 SLI 应排除健康检查与内部探测流量

4.2 SLO 目标设定

SLO(Service Level Objective)是团队为 SLI 设定的目标阈值,通常表示为“在滚动窗口内达到 X% 的达标率”。SLO 不是 SLA(服务等级协议),SLO 是内部承诺,SLA 是对外的法律约束。

4.2.1 SLO 设定步骤

  1. 确定关键用户旅程:选择对用户体验影响最大的核心链路。
  2. 选择对应 SLI:为每个用户旅程匹配 1-2 个 SLI。
  3. 设定目标值:基于历史数据与业务容忍度,设定合理阈值。
  4. 定义合规窗口:通常使用 28 天或 30 天滚动窗口。
  5. 建立错误预算:根据 SLO 计算可容忍的错误量。
SLO 设定示例:
“在 30 天滚动窗口内,99.9% 的 API 请求响应时间低于 200ms(P95)。”
这意味着在 30 天内,最多允许 0.1% 的请求超过 200ms。

4.2.2 常见 SLO 目标参考

SLO 等级 可用性目标 每月最大不可用时间 典型场景
99% (两个9) 99.0% 7.2 小时 内部工具、开发环境
99.9% (三个9) 99.9% 43.2 分钟 生产 API、Web 应用
99.99% (四个9) 99.99% 4.32 分钟 金融交易、核心数据库
99.999% (五个9) 99.999% 25.9 秒 电信、关键基础设施

4.3 错误预算计算

错误预算(Error Budget)是 SLO 的反向度量,表示在 SLO 合规窗口内允许的最大失败量。计算公式如下:

错误预算 = 总请求数 × (1 - SLO 目标)

示例:
- 30 天内总请求数:10,000,000
- SLO 目标:99.9%
- 错误预算 = 10,000,000 × (1 - 0.999) = 10,000 次失败请求

错误预算的消耗速度决定了团队是否需要暂停新功能发布、优先进行稳定性投入。以下 SVG 展示了错误预算的消耗与燃烧过程:

错误预算生命周期与消耗模型 初始错误预算 100% 可用 预算消耗 故障 / 延迟 / 错误 预算耗尽 SLO 违规 恢复 窗口重置 错误预算管理规则 • 预算充足(> 50%):正常发布新功能,持续迭代 • 预算中等(20% - 50%):限制高风险变更,加强监控 • 预算不足(< 20%):冻结发布,优先修复稳定性 • 预算耗尽(0%):触发回滚护栏,自动回滚最近变更 • 预算恢复:滚动窗口自然重置,或通过主动修复加速恢复

4.4 燃烧率概念

燃烧率(Burn Rate)衡量错误预算消耗的速度,是早期预警的核心指标。燃烧率定义为:

燃烧率 = 实际错误率 / 允许错误率

示例:
- SLO 目标:99.9%(允许错误率 0.1%)
- 实际错误率:0.5%
- 燃烧率 = 0.5% / 0.1% = 5x

这意味着错误预算的消耗速度是预期的 5 倍。

4.4.1 燃烧率预警阈值

燃烧率 预警级别 响应时间 典型动作
1x - 2x 信息 24 小时内 记录、观察趋势
2x - 5x 警告 1 小时内 排查根因、准备回滚
5x - 10x 严重 15 分钟内 立即回滚、触发护栏
> 10x 紧急 立即 自动回滚、通知 On-Call

4.4.2 多窗口燃烧率策略

单一窗口的燃烧率可能因短期波动产生误报。推荐使用多窗口策略:

  • 短窗口(1 小时):检测突发性故障,燃烧率阈值较高(如 > 10x)。
  • 中窗口(6 小时):检测持续性退化,燃烧率阈值中等(如 > 5x)。
  • 长窗口(3 天):检测慢性性能下降,燃烧率阈值较低(如 > 2x)。
燃烧率陷阱:不要仅依赖单一窗口的燃烧率。短窗口可能因流量波动产生假阳性,长窗口可能掩盖突发故障。建议至少使用两个不同时间窗口的燃烧率进行联合判断。

4.5 SLI / SLO / 错误预算 / 燃烧率关系总结

以下表格总结了四个核心概念的关系与作用:

概念 定义 单位 作用
SLI 服务质量的实际测量值 比率 / 毫秒 / 计数 提供原始数据
SLO SLI 的目标阈值 百分比(如 99.9%) 设定可靠性目标
错误预算 SLO 允许的最大失败量 计数 / 时间 量化可容忍的故障
燃烧率 错误预算消耗速度 倍数(如 5x) 早期预警与决策

在 Helm 面板化呈现中,我们将把上述指标映射为 Prometheus 查询、Grafana 面板与告警规则,实现 SLO 的可视化与自动化回滚护栏。下一节将深入 PromQL 查询与面板设计。