SLI 与 SLO 基础:定义、区别与 DORA 对齐
在 DORA 度量体系中,SLI(服务等级指标)与 SLO(服务等级目标)是构建可观测性与告警降噪策略的基石。本节将明确两者的定义、核心区别,并展示如何与 DORA 的四个关键指标(部署频率、变更前置时间、变更失败率、服务恢复时间)对齐,形成可量化的服务画像。
1. SLI:服务等级指标
SLI 是对服务某个特定维度的直接量化测量,通常以比率或百分比形式呈现。它回答的是“服务现在表现如何”的问题。
- 定义:SLI = 符合预期行为的样本数 / 总样本数 × 100%
- 常见维度:
- 可用性:请求成功返回 2xx/3xx 状态码的比例。
- 延迟:请求在特定百分位(如 p99)内的响应时间。
- 吞吐量:单位时间内成功处理的请求数。
- 错误率:返回 5xx 或业务错误码的请求占比。
- 饱和度:资源(CPU、内存、连接池)使用率。
实践要点:SLI 必须可采集、可计算。避免定义“用户体验好”这类无法直接测量的指标,应将其拆解为“页面加载时间 p95 < 2s”等可观测指标。
2. SLO:服务等级目标
SLO 是为 SLI 设定的目标阈值,代表服务所有者承诺的服务水平。它回答的是“服务应该表现成什么样”的问题。
- 定义:SLO = SLI 在特定时间窗口内达到或超过的目标值。
- 示例:
- “月度可用性 SLO = 99.9%”(对应 SLI:可用性)
- “过去 28 天内,p99 延迟 SLO ≤ 500ms”(对应 SLI:延迟)
- 关键属性:
- 时间窗口:滚动窗口(如 28 天、7 天)或日历窗口(如月度)。
- 燃烧速率:SLO 消耗的速度,用于触发告警。
- 错误预算:SLO 允许的不可用时间或错误量。
常见误区:SLO 不是 SLA(服务等级协议)。SLA 是面向客户的合同承诺,通常比内部 SLO 更宽松。SLO 是内部工程团队用于驱动改进的工程目标。
3. SLI 与 SLO 的核心区别
| 维度 | SLI(服务等级指标) | SLO(服务等级目标) |
|---|---|---|
| 本质 | 测量值(事实) | 目标值(承诺) |
| 回答的问题 | 现在怎么样? | 应该怎么样? |
| 形式 | 比率、分布、计数 | 阈值 + 时间窗口 |
| 变更频率 | 随系统状态实时变化 | 相对稳定,按版本或季度调整 |
| 告警触发 | 直接作为告警源 | 通过燃烧速率或错误预算消耗触发 |
| 示例 | 过去 5 分钟请求成功率 = 99.8% | 月度 SLO = 99.9%,当前错误预算剩余 30% |
4. 与 DORA 指标的对齐方法
DORA 的四个核心指标(部署频率、变更前置时间、变更失败率、服务恢复时间)本身是高阶业务指标,需要通过 SLI/SLO 进行分解和落地。对齐的核心思路是:将 DORA 指标转化为可观测的 SLI,并设定对应的 SLO。
5. 对齐实践:从 DORA 到 SLI/SLO 的映射表
以下表格展示了如何将每个 DORA 指标映射到具体的 SLI 和 SLO 示例,并关联到告警降噪策略:
| DORA 指标 | 映射 SLI | 示例 SLO | 告警降噪策略 |
|---|---|---|---|
| 部署频率 | 生产环境部署次数 / 天 | 每日部署次数 ≥ 5 次(精英级) | 部署频率低于 SLO 时触发,避免因单次部署失败而告警 |
| 变更前置时间 | 代码提交到生产部署的 p95 时间 | p95 前置时间 ≤ 1 小时 | 基于燃烧速率告警,避免偶发延迟触发告警 |
| 变更失败率 | 导致服务降级的部署占比 | 月度变更失败率 ≤ 5% | 基于错误预算消耗告警,避免单次失败触发告警 |
| 服务恢复时间 | MTTR(平均修复时间) | p90 MTTR ≤ 30 分钟 | 多窗口条件告警,避免短时抖动触发告警 |
6. 告警降噪与 SLO 燃烧速率
传统的基于静态阈值的告警(如“错误率 > 5%”)容易产生大量告警风暴。基于 SLO 的告警降噪通过燃烧速率(Burn Rate)来评估 SLO 的消耗速度,从而减少误报。
- 燃烧速率定义:单位时间内消耗的错误预算比例。
- 降噪原理:只有错误预算消耗速度超过预设阈值时,才触发告警。
- 示例:
- SLO:月度可用性 99.9%(错误预算 = 43.2 分钟)
- 燃烧速率阈值:1 小时内消耗超过 5% 的错误预算(约 2.16 分钟)
- 告警触发条件:过去 1 小时内不可用时间累计超过 2.16 分钟
关键公式:
错误预算 = (1 - SLO) × 时间窗口总时长
燃烧速率 = 已消耗错误预算 / 时间窗口已过时长 × 时间窗口总时长
告警触发条件:燃烧速率 > 预设阈值(如 2x、5x、10x)
错误预算 = (1 - SLO) × 时间窗口总时长
燃烧速率 = 已消耗错误预算 / 时间窗口已过时长 × 时间窗口总时长
告警触发条件:燃烧速率 > 预设阈值(如 2x、5x、10x)
7. 服务画像:基于 SLI/SLO 的健康度模型
服务画像是将 SLI/SLO 数据与 DORA 指标结合,形成对服务状态的多维度可视化描述。它帮助 SRE 团队快速识别服务瓶颈和风险。
8. 实践步骤:从零开始对齐
- 识别关键 DORA 指标:根据团队当前阶段,选择 1-2 个 DORA 指标作为改进重点。
- 定义对应的 SLI:确保 SLI 可采集、可计算,且与用户体验强相关。
- 设定初始 SLO:基于历史数据或行业基准,设定一个可达成但具有挑战性的目标。
- 配置燃烧速率告警:避免静态阈值告警,使用多窗口燃烧速率策略。
- 构建服务画像:将 SLI/SLO 健康度与 DORA 等级(精英、高、中、低)关联,形成可视化仪表盘。
- 持续迭代:每季度回顾 SLO 达成情况,根据业务需求调整目标。
推荐工具:Prometheus + Grafana 用于 SLI 采集和可视化;Google SLO Generator 或自建 SLO 计算器用于燃烧速率告警;Backstage 或自建服务目录用于服务画像展示。