1. SLI 与 SLO 基础概念

在构建可观测性体系与可靠性工程实践时,SLI、SLO 与 SLA 是三个最核心的术语。它们共同构成了服务质量的度量、目标与承诺体系。理解三者的定义及其关系,是后续进行 Metric Design 与 SLI 口径设计的前提。

1.1 SLI(Service Level Indicator)—— 服务等级指标

SLI 是对服务某个特定维度质量的直接量化度量。它回答的是“服务现在表现如何”的问题。

  • 定义:SLI 是一个随时间变化的数值,通常表示为比率、百分比或计数。
  • 常见维度:可用性、延迟、吞吐量、错误率、饱和度。
  • 典型形式:请求成功数 / 总请求数、响应时间 < 200ms 的请求数 / 总请求数。
  • 数据来源:通常来自监控系统、日志、链路追踪或业务埋点。
关键原则:SLI 必须可测量、可采集、可聚合。一个好的 SLI 定义应明确“分子是什么、分母是什么、统计窗口是多长”。

1.2 SLO(Service Level Objective)—— 服务等级目标

SLO 是为 SLI 设定的目标阈值或目标范围。它回答的是“我们希望服务表现成什么样”的问题。

  • 定义:SLO 是 SLI 在一段评估周期内需要达到的目标值,通常以百分比表示。
  • 示例:99.9% 的请求在 200ms 内完成、99.99% 的请求成功。
  • 评估周期:通常为 30 天、季度或自定义滚动窗口。
  • 用途:作为团队内部可靠性决策边界,触发告警、容量规划或发布门禁。
实践建议:SLO 应设置得比 SLA 更严格(通常高 0.1% ~ 0.5%),为 SLA 留出安全缓冲。例如 SLA 为 99.9%,SLO 可设为 99.95%。

1.3 SLA(Service Level Agreement)—— 服务等级协议

SLA 是服务提供方与用户/客户之间签订的正式合同或承诺。它回答的是“我们向客户承诺了什么,以及违约后果是什么”的问题。

  • 定义:SLA 是对外承诺,通常包含 SLO 目标、测量方式、报告周期以及违约惩罚(如服务抵扣、退款)。
  • 特点:具有法律或商业约束力;通常比 SLO 宽松;涉及业务影响评估。
  • 常见内容:可用性 ≥ 99.9%、月度 uptime 计算方式、故障响应时间、赔偿条款。
注意:SLA 是商业合同,SLO 是技术目标。不要将内部 SLO 直接写入 SLA,否则可能因过于严格导致频繁违约或过度投入。

1.4 三者关系与区别

三者的核心关系可以用一句话概括:SLI 是测量值,SLO 是目标值,SLA 是承诺值。下面通过表格和图示进一步说明。

维度 SLI SLO SLA
本质 度量指标 目标阈值 商业协议
受众 工程师、监控系统 工程团队、管理层 客户、法务、商务
约束力 无 内部约束 法律/商业约束
严格程度 如实反映 较严格(预留缓冲) 较宽松(商业可接受)
变更频率 随系统变化 季度/版本迭代 合同周期(年/半年)
典型示例 请求延迟 P99 = 150ms P99 延迟 ≤ 200ms 月度可用性 ≥ 99.9%

1.5 三者关系示意图

下图展示了 SLI、SLO、SLA 在服务可靠性管理中的层级关系与数据流向。

SLI / SLO / SLA 层级关系 SLI(服务等级指标) “实际测量值”:请求成功率、延迟分布、错误计数 SLO(服务等级目标) “内部目标”:SLI ≥ 99.95% 可用性,P99 ≤ 200ms SLA(服务等级协议) “对外承诺”:月度可用性 ≥ 99.9%,含赔偿条款 约束 度量 关键关系 SLI ≤ SLO ≤ SLA (严格程度)

1.6 典型场景示例

以一个电商平台的“商品详情页加载”为例,说明三者如何协同工作:

  1. SLI 定义:商品详情页在 2 秒内完成加载的请求数 / 总请求数,统计窗口为 1 分钟。
  2. SLO 设定:在 30 天滚动窗口内,该 SLI 的值 ≥ 99.5%。
  3. SLA 承诺:与商家签订的合同中写明“月度页面加载成功率 ≥ 99.0%”,否则按比例减免平台服务费。
关键洞察:SLO(99.5%)比 SLA(99.0%)严格 0.5 个百分点,这 0.5% 就是团队的“错误预算”缓冲空间。当 SLI 跌破 SLO 但仍在 SLA 之上时,团队应停止发布新功能,优先修复可靠性问题。

1.7 常见误区与避坑

  • 误区一:将 SLI 直接当作 SLO。SLI 是原始数据,SLO 是带阈值的决策目标。
  • 误区二:SLA 与 SLO 使用同一数值。这会导致没有缓冲,任何微小波动都可能触发违约。
  • 误区三:SLI 定义不清晰。例如“请求成功率”未明确分母是否包含健康检查、爬虫或重试请求,导致口径混乱。
  • 误区四:SLO 设置过多。建议每个服务只定义 2~3 个核心 SLO,避免监控疲劳。