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 实践中扮演以下核心角色:
- 变更节奏调节器:根据预算剩余量决定发布频率与风险容忍度。
- 事故优先级排序:预算消耗速率快的故障获得更高修复优先级。
- 跨团队沟通桥梁:用统一量化指标对齐开发、运维、产品团队的目标。
- SLO 合规审计:为季度/年度可靠性报告提供可追溯的数据台账。
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 级别,精确识别是哪个微服务、哪个代码路径消耗了误差预算,实现从“知道预算少了”到“知道为什么少了”的跨越。