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。

DORA 指标与 SLI/SLO 对齐架构 部署频率 变更前置时间 变更失败率 服务恢复时间 SLI: 部署触发次数 SLO: 每日 ≥ 10 次 SLI: 代码提交到上线 SLO: p95 ≤ 1 小时 SLI: 部署回滚率 SLO: 月度 ≤ 5% SLI: MTTR SLO: p90 ≤ 30 分钟 告警降噪策略 基于 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)

7. 服务画像:基于 SLI/SLO 的健康度模型

服务画像是将 SLI/SLO 数据与 DORA 指标结合,形成对服务状态的多维度可视化描述。它帮助 SRE 团队快速识别服务瓶颈和风险。

服务画像健康度模型 服务画像 部署频率 SLI: 每日部署次数 变更前置时间 SLI: p95 前置时间 变更失败率 SLI: 回滚率 服务恢复时间 SLI: MTTR 每个维度根据 SLO 达成情况标记为:健康 / 警告 / 危险

8. 实践步骤:从零开始对齐

  1. 识别关键 DORA 指标:根据团队当前阶段,选择 1-2 个 DORA 指标作为改进重点。
  2. 定义对应的 SLI:确保 SLI 可采集、可计算,且与用户体验强相关。
  3. 设定初始 SLO:基于历史数据或行业基准,设定一个可达成但具有挑战性的目标。
  4. 配置燃烧速率告警:避免静态阈值告警,使用多窗口燃烧速率策略。
  5. 构建服务画像:将 SLI/SLO 健康度与 DORA 等级(精英、高、中、低)关联,形成可视化仪表盘。
  6. 持续迭代:每季度回顾 SLO 达成情况,根据业务需求调整目标。
推荐工具:Prometheus + Grafana 用于 SLI 采集和可视化;Google SLO Generator 或自建 SLO 计算器用于燃烧速率告警;Backstage 或自建服务目录用于服务画像展示。