2. SLI 与 SLO 基础:定义服务等级指标、服务等级目标与误差预算
在可观测性工程与 SRE 实践中,SLI、SLO 与误差预算构成了服务质量管理最核心的三角模型。理解三者的定义与计算公式,是后续利用 PromQL 进行误差预算台账数据偏差排查的前提。
2.1 服务等级指标(SLI)
SLI(Service Level Indicator) 是对服务某个特定维度的量化测量,通常表示为一段时间内的比率或计数。SLI 的选择必须直接反映用户的真实体验。
2.1.1 常见 SLI 类型
| SLI 类别 | 典型指标 | 测量方式 |
|---|---|---|
| 可用性 | 请求成功率 | 成功请求数 / 总请求数 |
| 延迟 | P99 响应时间 | 排序后第 99 百分位的响应耗时 |
| 吞吐量 | 每秒请求数(QPS) | 单位时间内的请求计数 |
| 错误率 | 5xx 错误占比 | HTTP 5xx 响应数 / 总响应数 |
| 饱和度 | CPU/内存使用率 | 已使用资源 / 总资源容量 |
2.1.2 SLI 计算公式
对于最常见的可用性 SLI,其通用计算公式为:
SLI = (Good Events / Total Events) × 100%
其中:
- Good Events:符合成功标准的请求或操作次数
- Total Events:在测量窗口内的总请求或操作次数
实践要点:SLI 的测量窗口通常选择滚动时间窗口(如 1 分钟、5 分钟),而非固定日历窗口,以便与 PromQL 的
rate() 和 increase() 函数自然对齐。
2.2 服务等级目标(SLO)
SLO(Service Level Objective) 是为 SLI 设定的目标阈值,表示服务所有者承诺在一段较长时间内(通常为 28 天或 30 天)SLI 应达到的水平。SLO 是 SLI 的边界值,也是误差预算计算的基准。
2.2.1 SLO 表达形式
SLO 通常以 "SLI ≤ 阈值" 或 "SLI ≥ 阈值" 的形式定义:
示例:
- 可用性 SLO:99.9%(三个九)
- 延迟 SLO:P99 延迟 ≤ 200ms
- 错误率 SLO:5xx 错误率 ≤ 0.1%
2.2.2 SLO 与 SLI 的关系
- SLI 是测量值,SLO 是目标值
- 一个 SLO 必须绑定一个 SLI,但一个 SLI 可以有多个不同严格程度的 SLO
- SLO 的达成情况决定了服务是否处于 "合规" 状态
关键概念:SLO 不是 SLA(Service Level Agreement)。SLA 是带有惩罚条款的合同承诺,通常比内部 SLO 更宽松。SRE 实践中,内部 SLO 应比对外 SLA 更严格,以预留安全缓冲。
2.3 误差预算(Error Budget)
误差预算 是 SLO 未覆盖的可容忍失败额度。它量化了服务在遵守 SLO 的前提下,允许出现多少次失败或多少时间的不可用。
2.3.1 误差预算计算公式
误差预算的通用计算公式为:
Error Budget = (1 - SLO) × Total Events (或 Total Time)
对于基于请求计数的 SLO:
Error Budget = (1 - SLO) × Total Requests in Window
对于基于时间窗口的 SLO:
Error Budget = (1 - SLO) × Window Duration
2.3.2 误差预算消耗计算
实际消耗的误差预算为:
Budget Consumed = Total Bad Events in Window
或
Budget Consumed = (1 - SLI_actual) × Total Events
剩余误差预算:
Budget Remaining = Error Budget - Budget Consumed
2.3.3 误差预算率
在 PromQL 监控中,更常用的是误差预算消耗率:
Error Budget Burn Rate = Budget Consumed / Error Budget × 100%
当消耗率超过 100% 时,表示 SLO 已被违反。
常见误区:误差预算不是"剩余可用失败次数"的简单计数。在滚动窗口中,误差预算会随时间推移而"刷新"。PromQL 的
rate() 函数天然适合计算滚动窗口内的误差预算消耗速率。
2.4 SLI / SLO / 误差预算关系图
下图展示了三者之间的核心关系与数据流向:
2.5 典型 SLO 与误差预算示例
以下表格展示了不同 SLO 等级对应的误差预算额度:
| SLO 等级 | SLI 目标 | 30 天误差预算 | 日均允许失败 | 典型场景 |
|---|---|---|---|---|
| 99.9%(三个九) | 可用性 ≥ 99.9% | 43.2 分钟 | 1.44 分钟 | 内部工具、开发环境 |
| 99.99%(四个九) | 可用性 ≥ 99.99% | 4.32 分钟 | 8.64 秒 | 核心业务 API |
| 99.999%(五个九) | 可用性 ≥ 99.999% | 25.9 秒 | 0.86 秒 | 金融交易、实时通信 |
PromQL 映射提示:在 Prometheus 中,误差预算通常以 比率 形式存储。例如,可用性 SLI 可表示为
rate(http_requests_total{status="success"}[5m]) / rate(http_requests_total[5m]),而误差预算消耗率则通过 (1 - SLI) / (1 - SLO) 计算得出。
2.6 本章小结
- SLI 是服务的量化测量指标,必须可观测、可计算
- SLO 是 SLI 的目标边界,定义了服务的"健康"范围
- 误差预算 = (1 - SLO) × 总事件数,是服务可容忍的失败额度
- 三者的关系构成了 SRE 数据驱动决策的基础,也是 PromQL 聚合查询在误差预算台账中发挥价值的起点