4. SLI 与 SLO 基础:服务等级指标与服务等级目标

在可观测性与告警降噪体系中,服务等级指标(SLI)和服务等级目标(SLO)是定义系统健康度的核心量化工具。没有明确的 SLI 与 SLO,告警将失去判断基准,DORA 度量体系中的部署频率也无法与用户体验建立关联。本节将系统讲解 SLI 的定义原则、SLO 的设定方法,以及错误预算的引入机制。

4.1 服务等级指标(SLI)的定义原则

SLI 是对服务某个特定维度真实表现的量化度量。它回答的是“服务现在到底怎么样”的问题。定义 SLI 需遵循以下核心原则:

  • 用户视角优先:SLI 必须从用户(或下游服务)的感知出发,而非内部实现细节。例如,用“页面加载时间”而非“CPU 使用率”。
  • 可测量且可重复:指标必须能被稳定采集,且在不同时间、不同环境下测量结果具有可比性。
  • 覆盖关键路径:优先定义直接影响核心业务流程的指标,如登录、下单、搜索等。
  • 有限且聚焦:每个服务通常只定义 3~5 个核心 SLI,避免指标泛滥导致监控疲劳。
💡 实战建议: 在定义 SLI 时,先列出用户最关心的 3 个操作(如“搜索商品”“提交订单”“支付成功”),再为每个操作定义 1~2 个 SLI,如延迟和错误率。

4.1.1 常见 SLI 分类与口径

SLI 类别 典型口径 测量方式
延迟 请求响应时间(P50/P95/P99) 服务端埋点、APM 工具
错误率 HTTP 5xx 占比 / 业务错误码占比 负载均衡日志、应用日志
吞吐量 每秒请求数(RPS) 网关指标、服务端计数器
可用性 成功请求数 / 总请求数 健康检查、探针
饱和度 CPU 使用率 / 内存使用率 / 队列深度 系统指标采集

4.2 服务等级目标(SLO)的设定方法

SLO 是为 SLI 设定的目标阈值,它定义了“服务达到什么程度才算健康”。SLO 的设定直接影响告警阈值和错误预算的计算。

4.2.1 SLO 设定步骤

  1. 确定 SLI 基线:收集过去 2~4 周的历史数据,了解当前服务的真实表现。
  2. 对齐业务期望:与产品、业务方沟通,明确可接受的用户体验下限。
  3. 设定目标值:通常以“百分比”形式表达,如“99.9% 的请求延迟低于 200ms”。
  4. 定义时间窗口:SLO 的计算周期,常见为 30 天滚动窗口或 7 天滚动窗口。
  5. 区分严格等级:核心服务使用更严格的 SLO(如 99.99%),非核心服务可适当放宽。
⚠️ 避坑指南: 不要将 SLO 设定得过于理想化(如 100%),这会导致错误预算为零,任何微小故障都会触发告警,反而降低运维效率。通常 99.9% ~ 99.99% 是合理区间。

4.2.2 SLI 与 SLO 关系示例

服务 SLI 口径 SLO 目标 时间窗口
用户登录服务 P99 延迟 ≤ 500ms 30 天滚动
商品搜索服务 错误率 ≤ 0.1% 7 天滚动
支付网关 可用性 ≥ 99.99% 30 天滚动

4.3 错误预算的引入

错误预算(Error Budget)是 SLO 的衍生概念,它表示在 SLO 允许范围内,服务可以“犯错”的总时间或总请求量。错误预算 = 1 - SLO。例如,SLO 为 99.9% 的服务,其错误预算为 0.1%,即每月(约 43200 分钟)允许宕机 43.2 分钟。

4.3.1 错误预算的核心作用

  • 平衡稳定性与迭代速度:当错误预算充足时,团队可以更频繁地部署新功能(提升部署频率);当错误预算耗尽时,应暂停发布,优先修复稳定性。
  • 驱动告警降噪:告警阈值应基于错误预算消耗速率设定,而非固定静态值。只有当错误预算消耗速度超过预期时,才触发告警。
  • 量化风险决策:产品经理和工程师可以基于剩余错误预算,共同决定是否上线高风险变更。
🚨 关键认知: 错误预算不是“浪费额度”,而是风险预算。它让团队在创新与稳定之间做出有数据支撑的权衡,避免因过度追求 100% 可用性而扼杀部署频率。

4.4 SLI/SLO/错误预算关系图

下图展示了 SLI、SLO 与错误预算之间的核心关系,以及它们如何共同驱动告警降噪与部署频率决策:

SLI / SLO / 错误预算关系图 服务等级指标 SLI 延迟 / 错误率 / 可用性 服务等级目标 SLO 99.9% 请求 ≤ 200ms 错误预算 Error Budget 1 - SLO = 0.1% 对比 计算 告警降噪 基于错误预算消耗速率触发 部署频率 错误预算充足时加速发布 核心公式:错误预算 = 1 - SLO SLI 是测量值,SLO 是目标值,错误预算是可消耗的风险额度

4.5 错误预算驱动的告警降噪实战

在 DORA 度量体系中,部署频率的提升往往伴随着稳定性风险。错误预算提供了一种量化风险的机制,让告警不再“一刀切”。以下是基于错误预算的告警策略对比:

告警策略 传统方式 错误预算驱动方式
触发条件 单次延迟 > 200ms 即告警 错误预算消耗速率 > 预期值(如 10%/小时)
告警频率 频繁误报,容易产生告警疲劳 仅在风险累积时告警,降噪效果显著
对部署频率的影响 任何异常都可能导致发布暂停 错误预算充足时,允许快速迭代
业务对齐 技术指标驱动,与用户体验脱节 直接反映用户可接受的故障时间
📊 实战案例: 某电商平台将支付服务的 SLO 设为 99.95%(月错误预算 21.6 分钟)。当错误预算消耗超过 50% 时,触发 P2 告警;消耗超过 80% 时,触发 P1 告警并自动冻结发布管道。该策略使告警量下降 60%,同时部署频率提升 40%。

4.6 本章小结

  • SLI 是服务的真实测量值,必须从用户视角定义,聚焦关键路径。
  • SLO 是 SLI 的目标阈值,设定时需结合历史数据与业务期望,避免过于理想化。
  • 错误预算 = 1 - SLO,是连接稳定性与迭代速度的桥梁,也是告警降噪的核心依据。
  • 在 DORA 度量体系中,合理的 SLI/SLO 设计能够直接提升部署频率,同时保障用户体验。