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采集频率的最低要求:
3.5 采集频率对误差预算的影响
SLI采集频率直接影响误差预算计算的准确性和告警时效性。下表总结了不同采集频率下的典型影响:
| 采集频率 | 预算计算精度 | 告警延迟 | 存储成本 | 适用场景 |
|---|---|---|---|---|
| 1次/秒 | 极高 | <5秒 | 高 | 核心支付、实时交易 |
| 1次/分钟 | 高 | ~1分钟 | 中 | API网关、微服务 |
| 1次/5分钟 | 中等 | ~5分钟 | 低 | 批量处理、离线分析 |
| 1次/小时 | 低 | ~1小时 | 极低 | 非关键业务、报表 |