1. SLO 与 MTTR 基础概念

在 SRE 实践中,SLO(Service Level Objective,服务等级目标)与 MTTR(Mean Time to Repair,平均修复时间)是衡量系统可靠性与故障响应效率的两大核心支柱。SLO 定义了用户可接受的服务质量边界,而 MTTR 则决定了当边界被突破后,系统恢复的速度。两者共同构成了 SRE 运维的闭环:设定目标 → 度量偏差 → 快速修复 → 复盘优化。

1.1 SLO 定义:可靠性的量化契约

SLO 是 SRE 团队与产品、业务方共同协商后,为服务设定的一个具体、可量化的可靠性目标。它不是“99.999%”这样的数字,而是基于用户体验和业务成本权衡后的承诺。SLO 通常以“在某个时间窗口内,SLI 达到某个阈值”的形式表达。

关键公式:
SLO = 目标阈值(如 99.9%) + 时间窗口(如 30 天滚动)
示例:过去 30 天内,请求延迟 P99 ≤ 200ms 的占比 ≥ 99.9%。

1.2 SLI 与错误预算:SLO 的度量与弹性

SLI(Service Level Indicator,服务等级指标)是 SLO 的原始数据来源。常见的 SLI 包括:

  • 延迟(Latency):请求响应时间,通常关注 P50、P95、P99。
  • 流量(Traffic):系统每秒处理的请求数(RPS)或吞吐量。
  • 错误(Errors):请求失败率,如 HTTP 5xx 占比。
  • 饱和度(Saturation):资源使用程度,如 CPU、内存、连接池占用率。

错误预算(Error Budget)是 SLO 的衍生概念,定义为 1 - SLO。例如,SLO 为 99.9%,则错误预算为 0.1%。这个预算代表了服务在时间窗口内允许“犯错”的总量。当错误消耗接近预算上限时,团队应停止发布新功能,优先投入稳定性建设。

概念 定义 示例
SLO 服务可靠性目标,是承诺 99.9% 可用性(30 天滚动)
SLI 实际测量的指标,是数据 请求成功率 99.95%
错误预算 允许失败的总量,是弹性空间 0.1% × 总请求数
实践要点: 错误预算不是“浪费额度”,而是“风险预算”。当预算充足时,团队可以更激进地发布;当预算紧张时,应冻结发布并启动稳定性加固。

1.3 MTTR 在 SRE 中的核心地位

MTTR(Mean Time to Repair)是衡量从故障发生到服务完全恢复所需平均时间的指标。在 SRE 体系中,MTTR 直接决定了故障对用户的影响时长,是 SLO 违约后最关键的恢复指标。MTTR 通常包含以下阶段:

  1. 检测时间(MTTD):从故障发生到被监控系统或人工发现的时间。
  2. 响应时间:从告警触发到 SRE 开始介入的时间。
  3. 定位时间:从介入到确定根因的时间。
  4. 修复时间:从确定根因到服务完全恢复的时间。

MTTR 的优化直接关系到 SLO 违约的严重程度。一次 SLO 违约的持续时间越长,消耗的错误预算越多,对用户信任和业务收入的冲击也越大。

常见误区: 很多团队只关注“修复时间”,而忽略了“定位时间”。在复杂分布式系统中,根因定位往往占据 MTTR 的 60%-80%。本课程后续章节将重点讲解如何通过 Tempo 查询优化来压缩定位时间。

1.4 SLO 与 MTTR 的关系:违约与恢复的闭环

下图展示了 SLO 违约发生后,MTTR 各阶段如何影响错误预算的消耗,以及如何通过复盘口径优化形成正向循环。

SLO 违约与 MTTR 闭环关系图 SLO 违约发生 错误预算持续消耗 检测 (MTTD) 响应 定位 (根因) 修复 服务恢复 复盘 & 查询优化 虚线箭头:复盘优化反馈闭环

1.5 MTTR 复盘口径:从数据到洞察

MTTR 复盘口径是指在对 SLO 违约事件进行事后分析时,所采用的统一数据查询与计算标准。一个规范的复盘口径应包含:

  • 时间边界:违约开始时间、结束时间、告警触发时间、人工确认时间。
  • 指标对齐:复盘时使用的 SLI 数据源必须与 SLO 监控面板一致。
  • Trace 采样:在违约窗口内,选取具有代表性的 Trace 样本用于根因分析。
  • 维度标签:按服务、集群、版本、地域等维度拆解 MTTR 各阶段耗时。
复盘口径示例(Tempo 查询):
# 查询违约窗口内 P99 延迟异常的 Trace
{ resource.service.name = "checkout-service" }
|> latency > 200ms
|> status = error
|> span.db.system = "redis"
|> by(service.version, k8s.cluster.name)
|> count() > 100
该查询直接定位到特定版本和集群的 Redis 调用异常,将定位时间从小时级压缩到分钟级。

通过建立标准化的复盘口径,SRE 团队可以确保每次故障复盘的结论可对比、可复现,从而持续优化 MTTR,守住 SLO 底线。