2. SLO 基础概念:SLI、SLO 与 Error Budget 的定义与关系
在构建可观测性体系与 SRE 实践时,服务水平指标(SLI)、服务水平目标(SLO) 与 错误预算(Error Budget) 是三个最核心的基石。它们共同构成了从“测量”到“目标”再到“容错决策”的闭环。理解三者的定义与关系,是优化 SLO 台账度量基线的第一步。
2.1 服务水平指标(SLI)
SLI 是对服务质量的某个特定维度进行定量测量的指标。它回答的是“服务现在表现如何”的问题。SLI 必须是可测量、可聚合、可比较的数值。
- 常见维度:可用性、延迟(响应时间)、吞吐量(每秒请求数)、错误率、饱和度(资源使用率)。
- 测量方式:通常以“好事件 / 总事件”的比例形式表示,例如“请求成功数 / 总请求数”。
- 聚合窗口:SLI 通常在一个时间窗口(如 1 分钟、5 分钟、30 天)内进行聚合计算。
SLI 设计原则: 选择与用户体验强相关的指标。避免选择难以测量或与用户感知脱节的内部指标。例如,对于 Web 服务,优先选择“页面加载时间”而非“CPU 空闲率”。
2.2 服务水平目标(SLO)
SLO 是为 SLI 设定的目标阈值。它回答的是“我们希望服务表现成什么样”的问题。SLO 是一个具体的、可达成且可衡量的承诺值,通常以百分比形式表示。
- 示例:“99.9% 的请求在 200ms 内完成”(延迟 SLO)或“99.99% 的请求返回成功”(可用性 SLO)。
- 时间窗口:SLO 必须绑定一个明确的时间窗口(如“过去 30 天内”或“滚动 28 天”),用于评估合规性。
- 目标 vs 现实:SLO 应设定为比实际能力略低的值,以预留容错空间。100% 的 SLO 通常不切实际且成本极高。
常见误区: 将 SLO 与 SLA(服务水平协议)混淆。SLA 是面向客户的、带有惩罚条款的合同承诺;SLO 是内部或对等的、用于指导工程决策的目标。SLO 通常比 SLA 更严格。
2.3 错误预算(Error Budget)
Error Budget 是 SLO 的衍生概念,它量化了服务在给定时间窗口内允许失败的总量。它回答的是“我们还有多少容错空间”的问题。
- 计算公式:Error Budget = (1 - SLO) × 总事件数。
- 示例:若 SLO 为 99.9%,总请求数为 1,000,000,则 Error Budget = (1 - 0.999) × 1,000,000 = 1,000 个错误请求。
- 消耗与剩余:每次服务失败(未达到 SLI 阈值)都会消耗 Error Budget。当 Error Budget 耗尽时,意味着服务已超出目标,需要暂停新功能发布,优先进行稳定性投入。
核心价值: Error Budget 将“稳定性”与“创新速度”统一到一个可量化的框架中。只要 Error Budget 充足,团队可以放心地进行快速迭代;一旦 Budget 告急,则必须转向稳定性工作。这消除了“发布 vs 稳定”的零和博弈。
2.4 三者的关系与闭环
SLI、SLO 与 Error Budget 构成了一个持续反馈的闭环系统。下图展示了它们之间的核心关系与数据流向。
2.5 概念对比与总结
下表从定义、形式、用途和典型示例四个维度,对 SLI、SLO 和 Error Budget 进行对比,帮助快速建立清晰的概念边界。
| 维度 | SLI(服务水平指标) | SLO(服务水平目标) | Error Budget(错误预算) |
|---|---|---|---|
| 定义 | 服务质量的定量测量 | 为 SLI 设定的目标阈值 | 允许失败的总量上限 |
| 形式 | 比率、延迟、吞吐量等 | 百分比 + 时间窗口 | 数值(次数或时间) |
| 核心问题 | 现在表现如何? | 我们希望表现如何? | 我们还有多少容错空间? |
| 典型示例 | 请求成功率 = 99.95% | 30 天内成功率 ≥ 99.9% | 30 天内允许 0.1% 的失败 |
| 主要用途 | 监控与告警 | 目标管理与承诺 | 发布决策与稳定性投入 |
2.6 实践中的关键关系
在实际的 SLO 台账度量基线优化中,需要牢记以下三条核心关系:
- SLO 是 SLI 的“护栏”:没有 SLO 的 SLI 只是数据,无法指导决策。SLO 为 SLI 提供了评判标准。
- Error Budget 是 SLO 的“量化器”:它将抽象的百分比目标转化为具体的、可操作的容错额度,让团队直观感知风险。
- 三者构成“测量-目标-行动”闭环:SLI 测量现状,SLO 定义期望,Error Budget 驱动行动。缺少任何一环,稳定性管理都会变成盲人摸象。
基线优化切入点: 在建立 SLO 台账时,应首先确保 SLI 的采集口径准确、SLO 的窗口定义清晰、Error Budget 的计算逻辑透明。这三个基础要素的混乱,是后续所有度量基线问题的根源。