1. SLO 基础概念:服务等级目标

服务等级目标(Service Level Objective, SLO)是站点可靠性工程(SRE)与可观测性实践的核心度量。它定义了一个服务在特定时间窗口内应达到的可靠性水平,通常以百分比形式表示,例如“API 请求的 99.9% 在 200ms 内完成”。

理解 SLO 需要先厘清它与 SLA、SLI 的关系,以及为什么 SLO 是可靠性工程的基石。

1.1 SLI / SLO / SLA 三角关系

三个概念构成可靠性度量的完整链路:

术语 全称 定义 典型示例
SLI Service Level Indicator 服务等级指标,是实际测量的服务质量数值 请求延迟 P99 = 180ms
SLO Service Level Objective 服务等级目标,是期望达到的可靠性阈值 99.9% 请求延迟 ≤ 200ms
SLA Service Level Agreement 服务等级协议,是对外承诺的法律/商业条款 99.95% 可用性,否则赔偿 10% 月费
关键区别: SLI 是“实际值”,SLO 是“目标值”,SLA 是“承诺值”。SLO 通常比 SLA 更严格(内部目标高于对外承诺),为可靠性留出安全缓冲。

1.2 SLO 定义的核心要素

一个完整的 SLO 定义包含以下维度:

  • 指标类型:可用性、延迟、吞吐量、错误率、饱和度(USE 方法)
  • 测量窗口:滚动窗口(如 30 天)、日历窗口(如月度)
  • 目标阈值:如 99.9%、99.99%(“多少个九”)
  • 合规条件:好事件 / 总事件 ≥ 阈值
  • 排除条件:计划内维护、客户端错误(4xx)是否计入
# Prometheus 中 SLO 合规率的典型计算表达式
# 以 HTTP 请求延迟为例(好事件:延迟 ≤ 200ms)
slo_compliance = (
    sum(rate(http_request_duration_seconds_bucket{le="0.2"}[5m]))
    /
    sum(rate(http_request_duration_seconds_count[5m]))
) * 100

1.3 为什么 SLO 对可靠性至关重要

SLO 将抽象的“可靠性”转化为可量化、可追踪、可告警的工程指标,其核心价值体现在:

  1. 定义“足够好”:避免追求 100% 可用性的不切实际成本,明确可接受的故障边界。
  2. 驱动错误预算:SLO 与错误预算(Error Budget)直接挂钩——100% - SLO = 允许的故障时间,指导发布节奏与风险决策。
  3. 对齐业务与工程:SLO 将用户体验(如页面加载快慢)映射为技术指标,使团队聚焦对用户真正重要的维度。
  4. 触发自愈与告警:基于 SLO 燃烧速率(Burn Rate)的告警比静态阈值更早发现潜在故障,为自动化自愈争取时间。
SRE 最佳实践: 始终从用户视角定义 SLI 和 SLO。例如,对于 Web 服务,优先关注“首页加载延迟”而非“服务器 CPU 使用率”——前者直接影响用户感知,后者只是内部信号。

1.4 SLI → SLO → 错误预算 关系图

SLI → SLO → 错误预算 关系图 SLI 服务等级指标 实际测量值 定义目标 SLO 服务等级目标 期望阈值 计算 错误预算 允许故障时间 100% - SLO SLA 与 SLO 的关系 SLA 是对外承诺(通常 SLO 比 SLA 严格 10%~50%),SLO 是内部工程目标 SLO 驱动故障自愈流程 SLI 持续测量 → 与 SLO 比较 → 燃烧速率告警 → 触发自动化自愈动作 → 恢复 SLI 合规 (本课程后续章节将详细展开自愈机制设计)

1.5 常见 SLO 类型与示例

SLO 类型 SLI 示例(Prometheus 指标) SLO 目标 典型窗口
可用性 up{job="api-server"} == 1 99.99% 30 天滚动
延迟 histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) P99 ≤ 200ms 7 天滚动
错误率 sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) < 0.1% 1 小时
吞吐量 sum(rate(http_requests_total[5m])) ≥ 1000 req/s 5 分钟
常见陷阱: 不要定义无法测量的 SLO。如果无法通过 Prometheus 或其他可观测性工具采集到准确的 SLI,该 SLO 就是“纸面目标”,无法用于告警或自愈。始终先确认 SLI 的可观测性,再设定 SLO。

1.6 本章小结

  • SLI 是实际测量值,SLO 是内部目标,SLA 是对外承诺。
  • SLO 将可靠性量化为百分比,驱动错误预算机制,平衡创新速度与系统稳定。
  • 在 Prometheus 生态中,SLO 通过 histogram_quantile、rate、sum 等函数计算合规率,并作为燃烧速率告警的输入。
  • 良好的 SLO 定义是故障自愈机制的前提——只有知道“什么是正常”,才能自动化地“恢复正常”。