1. SLO 与误差预算基础

1.1 服务等级目标(SLO)定义

服务等级目标(Service Level Objective, SLO) 是衡量服务可靠性水平的量化指标阈值,它定义了在特定时间窗口内,服务必须达到的可用性或性能标准。SLO 通常以百分比形式表示,例如“99.9% 的请求在 200ms 内完成”。

SLO 的核心特征:

  • 可量化:必须基于明确的 SLI(服务等级指标)进行计算,如延迟、错误率、吞吐量。
  • 时间窗口:定义在滚动窗口(如 30 天、季度)内评估,而非瞬时值。
  • 业务对齐:SLO 应反映用户对可靠性的真实期望,而非基础设施的极限能力。
SLO 等级 典型百分比 允许停机时间/月 适用场景
基础型 99.9% 43.2 分钟 内部工具、开发环境
标准型 99.95% 21.6 分钟 一般业务 API、Web 应用
高可用型 99.99% 4.32 分钟 支付系统、实时交易
关键任务型 99.999% 25.9 秒 电信核心网、医疗设备
实践要点: SLO 不是越高越好。99.999% 的 SLO 意味着每年仅允许 5.26 分钟故障,其运维成本和架构复杂度呈指数级增长。建议从 99.9% 起步,根据用户反馈逐步收紧。

1.2 误差预算(Error Budget)概念

误差预算(Error Budget) 是 SLO 的衍生概念,定义为 100% - SLO。它表示在 SLO 时间窗口内,服务可以“犯错”或“不可用”的累计时间上限。误差预算将可靠性从“目标”转化为“可消耗资源”。

误差预算的核心公式:

Error Budget = 100% - SLO%
可用消耗时间 = 时间窗口总时长 × (1 - SLO%)

示例(30 天窗口,SLO = 99.9%):
总时长 = 30 × 24 × 60 × 60 = 2,592,000 秒
误差预算 = 2,592,000 × (1 - 0.999) = 2,592 秒 ≈ 43.2 分钟

误差预算的消耗与剩余状态:

  • 预算充足(剩余 > 50%):允许进行快速迭代、灰度发布、功能实验。
  • 预算紧张(剩余 20% ~ 50%):需要放缓变更节奏,加强监控与回滚准备。
  • 预算耗尽(剩余 ≤ 0%):立即冻结所有非关键变更,启动事故复盘与稳定性加固。
常见误区: 误差预算不是“允许故障的额度”,而是“可靠性运营的决策杠杆”。预算耗尽不代表服务必须停机,而是提示团队需要将优先级从“功能交付”切换为“可靠性修复”。

1.3 误差预算在可靠性运营中的核心地位

误差预算将可靠性从“运维问题”转化为“业务决策问题”,在 SRE 实践中扮演以下核心角色:

  1. 变更节奏调节器:根据预算剩余量决定发布频率与风险容忍度。
  2. 事故优先级排序:预算消耗速率快的故障获得更高修复优先级。
  3. 跨团队沟通桥梁:用统一量化指标对齐开发、运维、产品团队的目标。
  4. SLO 合规审计:为季度/年度可靠性报告提供可追溯的数据台账。
SLO 与误差预算关系结构图 服务等级目标 (SLO) 99.9% 请求成功 P99 延迟 < 200ms 可用性 ≥ 99.95% 时间窗口:30 天滚动 误差预算 (Error Budget) 100% - SLO% = 0.1% 时间窗口 ≈ 43.2 分钟/月 可消耗的不可用额度 推导 可靠性运营决策引擎 预算充足 → 快速迭代 灰度发布、A/B 测试 预算紧张 → 减速观察 加强监控、限制变更 预算耗尽 → 冻结修复 事故复盘、架构加固

1.4 误差预算台账:从概念到数据验证

在 Jaeger 链路诊断场景中,误差预算不再是抽象百分比,而是通过分布式追踪数据精确计算的可验证台账。每条 trace 的延迟、错误状态、请求结果都会实时影响 SLI 计数,进而驱动误差预算的消耗计算。

误差预算台账的数据验证流程:

步骤 数据源 计算逻辑 输出
1. SLI 采集 Jaeger span 数据 按 service/operation 聚合请求总数、错误数、延迟分位数 原始指标时间序列
2. SLO 合规判定 SLI 指标 + SLO 阈值 比较实际 SLI 是否在 SLO 边界内 合规/违规标记
3. 误差消耗计算 违规时间窗口 累计违规时长 / 总窗口时长 × 100% 消耗百分比
4. 预算剩余更新 初始预算 - 累计消耗 滚动窗口内实时扣减 剩余预算百分比
5. 告警与决策 剩余预算阈值 低于 20% 触发预警,低于 0% 触发冻结 PagerDuty/工单
Jaeger 集成价值: 传统误差预算依赖聚合指标(如 Prometheus),无法区分“哪些具体请求导致了预算消耗”。通过 Jaeger 的分布式追踪,可以下钻到单条 trace 级别,精确识别是哪个微服务、哪个代码路径消耗了误差预算,实现从“知道预算少了”到“知道为什么少了”的跨越。
误差预算台账数据验证流(Jaeger 链路视角) Jaeger 链路采集 span / trace / 延迟 SLI 指标计算 错误率 / 延迟分位数 SLO 合规判定 阈值比较 / 违规标记 误差消耗 累计扣减 误差预算台账存储 滚动窗口 / 剩余预算 / 消耗速率 运营决策与告警 变更冻结 / 事故响应 / 容量规划 数据验证关键点 trace → SLI 映射准确性 时间窗口对齐一致性

1.5 本章小结