1. SLO 基础概念:服务等级目标、SLA/SLI 关系与可靠性核心地位
在可靠性工程与可观测性体系中,SLO(Service Level Objective,服务等级目标)是连接业务价值与技术指标的桥梁。理解 SLO 的定义、它与 SLA/SLI 的三角关系,以及它在可靠性工程中的核心地位,是构建自动化告警与复盘流程的前提。
1.1 核心定义:SLO、SLI、SLA 三角模型
三个概念常被混淆,但职责与粒度完全不同。下表从定义、度量对象、典型场景与责任方四个维度进行对比:
| 概念 | 定义 | 度量对象 | 典型场景 | 责任方 |
|---|---|---|---|---|
| SLI (服务等级指标) |
服务质量的原始量化指标,如延迟、错误率、吞吐量 | 技术指标 | P99 延迟 ≤ 200ms;请求错误率 ≤ 0.1% | 研发 / SRE 团队 |
| SLO (服务等级目标) |
对 SLI 设定的目标阈值与时间窗口,如“过去 30 天内 99.9% 的请求延迟 ≤ 200ms” | 目标承诺 | 月度 99.9% 可用性;季度错误预算 ≤ 0.1% | SRE / 平台团队 |
| SLA (服务等级协议) |
与客户签订的法律/商业协议,包含 SLO 及未达标的惩罚条款 | 商业合同 | 年度可用性 ≥ 99.99%,否则退还 10% 月费 | 业务 / 法务 / 客户成功 |
关键认知:SLO 是内部工程目标,SLA 是外部商业承诺。SLO 通常比 SLA 更严格(例如 SLA 承诺 99.9%,内部 SLO 设为 99.95%),为错误预算留出缓冲空间。
1.2 SLO 在可靠性工程中的核心地位
SLO 不是单纯的数字,而是可靠性工程的决策锚点。它驱动以下四个关键环节:
- 错误预算(Error Budget): 100% - SLO = 允许的故障时间。团队据此决定是否发布新版本、是否需要暂停特性开发转向稳定性。
- 告警阈值设计: 围绕 SLO 燃烧速率(Burn Rate)设置多级告警,避免“告警风暴”与“漏报”。
- 容量规划与成本优化: 当 SLO 持续达标时,可适当降配;当 SLO 逼近红线时,需提前扩容或限流。
- 复盘与改进: MTTR(平均修复时间)复盘口径必须与 SLO 违约窗口对齐,才能准确评估故障影响。
下图展示了 SLI → SLO → SLA 的逐层收敛关系,以及 SLO 在可靠性工程中的枢纽位置:
1.3 SLO 违约率计算基础
SLO 违约率是判断服务是否达到可靠性目标的核心量化指标。其基本计算公式为:
SLO 违约率 = (SLO 违约时间窗口总长度) / (评估时间窗口总长度) × 100%
实际工程中,通常使用滑动窗口(如 30 天滚动窗口)或固定日历窗口(如自然月)来计算。以下是一个典型的月度 SLO 违约率计算示例:
| 指标 | 值 | 说明 |
|---|---|---|
| SLO 目标 | 99.9% | 月度可用性目标 |
| 总时间窗口 | 30 天 = 43,200 分钟 | 自然月 |
| 允许最大违约时间 | 43.2 分钟 | 100% - 99.9% = 0.1% × 43,200 |
| 实际违约时间 | 12 分钟 | 因故障导致 SLI 低于阈值的时间 |
| 违约率 | 0.0278% | 12 / 43,200 × 100% |
实战要点:在自动化告警流程中,SLO 违约率通常以“燃烧速率(Burn Rate)”的形式实时计算。例如,当 1 小时内消耗了 5% 的月度错误预算时,触发 P0 告警。这比单纯看违约时间更灵敏。
1.4 SLO 与 MTTR 复盘口径的关联
MTTR(平均修复时间)复盘不能脱离 SLO 违约窗口单独讨论。两者的对齐关系如下:
- 故障开始时间(T0): SLI 首次跌破 SLO 阈值的时间点。
- 故障结束时间(T1): SLI 恢复至 SLO 阈值以上并稳定保持的时间点。
- SLO 违约窗口: [T0, T1] 区间,即 MTTR 复盘的核心时间范围。
- MTTR 计算口径: 从告警触发(或故障发现)到服务完全恢复的平均时长,必须与 SLO 违约窗口对齐,否则复盘结论会失真。
下图展示了 SLO 违约窗口与 MTTR 复盘口径的对齐关系:
常见误区:很多团队将 MTTR 从“告警发出”开始计算,但 SLO 违约可能早在告警发出前就已开始。正确的做法是:MTTR 复盘口径的起点 = SLI 首次跌破 SLO 阈值的时间点,而非告警触发时间。本课程后续章节将详细讲解如何通过可观测性数据自动对齐这两个时间点。
1.5 本章小结
- SLO 是可靠性工程的“北极星”指标,它定义了服务可接受的故障边界。
- SLI → SLO → SLA 构成逐层收敛的三角模型,SLO 是内部工程目标,SLA 是外部商业承诺。
- SLO 违约率 = 违约时间 / 总时间 × 100%,是自动化告警与复盘的核心输入。
- MTTR 复盘口径必须与 SLO 违约窗口对齐,否则复盘结论无法真实反映故障影响。