3. SLO与误差预算基础:SLO定义、误差预算计算方式、燃烧速率与告警窗口

SLO(Service Level Objective,服务等级目标)与误差预算是可观测性工程的核心量化工具。没有精确的SLO定义,SLI采集频率的优化就失去了评价基准;没有误差预算的实时计算,就无法判断当前服务质量是否处于健康区间。本节从定义、计算、燃烧速率和告警窗口四个维度建立完整的理论基础。

3.1 SLO定义:从SLI到目标阈值

SLO是围绕SLI设定的目标阈值,表示在一段评估窗口内,良好事件占总事件的比例必须达到的数值。SLO的定义包含三个要素:

  • SLI选择:明确使用哪个SLI作为衡量对象(如请求延迟、错误率、吞吐量)。
  • 良好事件标准:定义什么算“良好”。例如:http_request_duration_seconds <= 0.5 为良好。
  • 目标比例与窗口:例如“过去30天内,99.9%的请求延迟≤500ms”。
SLO示例 SLI 良好标准 目标比例 评估窗口
API延迟SLO 请求延迟 ≤200ms 99.5% 28天滚动
支付成功率SLO 错误率 HTTP 2xx/3xx 99.99% 7天滚动
数据管道SLO 数据新鲜度 延迟≤5min 99.0% 24小时滚动

关键原则:SLO必须比用户实际能容忍的阈值更严格(通常预留10%~20%的缓冲),否则误差预算会过早耗尽,导致告警频繁但无实际业务影响。

3.2 误差预算计算方式

误差预算(Error Budget)是SLO的“允许失败额度”。其核心公式为:

误差预算 = 总事件数 × (1 - SLO目标比例)

示例:
- 总请求数 = 10,000,000
- SLO目标 = 99.9%
- 误差预算 = 10,000,000 × (1 - 0.999) = 10,000 次失败

误差预算的消耗速率直接反映服务健康度。实际应用中,误差预算通常以剩余百分比的形式呈现:

剩余误差预算(%) = (误差预算总额 - 已消耗的失败次数) / 误差预算总额 × 100%

当剩余误差预算降至0%时,意味着SLO已违反,需要立即介入。

采集频率关联:误差预算的计算精度依赖于SLI数据的完整性和时效性。采集频率过低会导致预算消耗被低估,错过干预窗口;采集频率过高则增加存储和传输成本。这正是本课程要解决的核心矛盾。

3.3 燃烧速率与告警窗口

燃烧速率(Burn Rate)衡量误差预算消耗的快慢。它定义为:实际失败率与SLO允许失败率的比值。

燃烧速率 = 实际失败率 / (1 - SLO目标比例)

示例:
- SLO目标 = 99.9% → 允许失败率 = 0.1%
- 当前实际失败率 = 0.5%
- 燃烧速率 = 0.5% / 0.1% = 5x

燃烧速率直接决定告警的紧急程度。Google SRE实践中定义了三个典型告警窗口:

燃烧速率 告警窗口 含义 响应要求
1x ~ 2x 长窗口(数小时~数天) 缓慢消耗,可观察 日常排班处理
2x ~ 10x 中窗口(30分钟~2小时) 快速消耗,需关注 值班工程师介入
> 10x 短窗口(5~15分钟) 急剧消耗,紧急 立即响应/回滚

常见误区:仅使用单一固定窗口(如5分钟)检测燃烧速率,会导致误报或漏报。短窗口对突发敏感但易误报,长窗口稳定但响应滞后。正确做法是多窗口联合检测:同时监控短、中、长三个窗口的燃烧速率,只有多个窗口同时触发才告警。

3.4 多窗口燃烧速率检测模型

下图展示了多窗口燃烧速率检测的典型架构,该模型直接决定了SLI采集频率的最低要求:

多窗口燃烧速率检测模型 SLI事件流 短窗口 (5min) 中窗口 (30min) 长窗口 (6h) 速率 > 14x? 速率 > 6x? 速率 > 2x? AND 触发告警 只有当短、中、长三个窗口的燃烧速率同时超过阈值时,才触发告警,避免单窗口误报。

3.5 采集频率对误差预算的影响

SLI采集频率直接影响误差预算计算的准确性和告警时效性。下表总结了不同采集频率下的典型影响:

采集频率 预算计算精度 告警延迟 存储成本 适用场景
1次/秒 极高 <5秒 高 核心支付、实时交易
1次/分钟 高 ~1分钟 中 API网关、微服务
1次/5分钟 中等 ~5分钟 低 批量处理、离线分析
1次/小时 低 ~1小时 极低 非关键业务、报表