1. SLO 与误差预算基础
在 Kubernetes 集群可观测性体系中,服务等级目标(SLO)与误差预算(Error Budget)是告警降噪与阈值联动的核心数学基础。没有 SLO 的告警是盲目的,没有误差预算的阈值是静态的。本节从定义、指标选取、计算公式到燃烧速率,建立完整的理论地基。
1.1 SLO 定义与 SLI 指标选取
SLO(Service Level Objective):服务提供方承诺在特定时间窗口内,核心指标达到的目标值。通常表述为“99.9% 的请求在 200ms 内完成”。
SLI(Service Level Indicator):衡量服务质量的具体可观测指标。Kubernetes 环境下常见的 SLI 包括:
| SLI 类别 | 典型指标 | Kubernetes 数据源 |
|---|---|---|
| 可用性 | 请求成功率(HTTP 200/5xx 比例) | Ingress Controller / Service Mesh 指标 |
| 延迟 | P99 / P95 响应时间 | Prometheus Histogram / OpenTelemetry |
| 吞吐量 | 每秒请求数(RPS) | Kube-state-metrics / Custom Metrics |
| 饱和度 | Pod CPU / 内存使用率 | Metrics Server / Node Exporter |
实践建议:Kubernetes 集群的 SLI 应优先选取用户面指标(如 Ingress 请求成功率),而非基础设施指标(如节点 CPU)。用户感知的可用性才是 SLO 的真正锚点。
1.2 误差预算计算公式
误差预算(Error Budget)是 SLO 允许的最大失败量。其核心公式为:
Error Budget = (1 - SLO) × Total Events
示例:
SLO = 99.9% → 允许失败率 = 0.1%
时间窗口 = 30 天
总请求数 = 10,000,000
Error Budget = 0.001 × 10,000,000 = 10,000 次失败
误差预算的消耗计算:
Budget Consumption = (实际失败数 / Error Budget) × 100%
示例:
实际失败数 = 2,000
Budget Consumption = (2,000 / 10,000) × 100% = 20%
| SLO 值 | 允许失败率 | 30 天 100 万请求的预算 | 典型场景 |
|---|---|---|---|
| 99.9% | 0.1% | 1,000 次 | 生产核心服务 |
| 99.99% | 0.01% | 100 次 | 金融交易 / 实时系统 |
| 99.5% | 0.5% | 5,000 次 | 内部工具 / 非关键服务 |
1.3 误差预算消耗与燃烧速率概念
燃烧速率(Burn Rate):单位时间内误差预算的消耗速度。它是告警降噪的关键参数,决定了告警的紧急程度。
Burn Rate = 实际失败率 / 允许失败率
示例:
SLO = 99.9%(允许失败率 0.1%)
当前实际失败率 = 0.5%
Burn Rate = 0.5% / 0.1% = 5x
燃烧速率的分级与告警联动:
| 燃烧速率 | 含义 | 告警级别 | 响应时间要求 |
|---|---|---|---|
| < 1x | 预算充足,正常消耗 | 无告警 | — |
| 1x – 3x | 轻度超速,需关注 | Warning | 24 小时内排查 |
| 3x – 10x | 中度超速,预算快速消耗 | Critical | 1 小时内响应 |
| > 10x | 严重超速,预算即将耗尽 | Pager | 立即处理 |
关键洞察:燃烧速率告警比固定阈值告警更准确。例如:5 分钟内失败率 1% 可能触发固定阈值告警,但如果 SLO 是 99.99%(预算极低),1% 的失败率意味着燃烧速率高达 100x,必须立即响应;而如果 SLO 是 99%(预算充裕),1% 的失败率仅 1x,无需打扰值班人员。
常见误区:不要将燃烧速率与失败率混淆。一个 5% 的失败率在 SLO 99% 时燃烧速率为 5x(中度告警),但在 SLO 99.99% 时燃烧速率为 500x(灾难性事件)。始终基于 SLO 上下文解读指标。
1.4 误差预算台账概念
在 Kubernetes 集群中,误差预算台账(Error Budget Ledger)是对多个服务、多个 SLO 的预算消耗进行集中记录与追踪的机制。台账包含以下核心字段:
- 服务名称:对应 Kubernetes Service / Deployment
- SLO 目标:如 99.9%
- 时间窗口:30 天滚动窗口
- 总预算:允许的最大失败次数
- 已消耗预算:当前窗口内的累计失败次数
- 剩余预算百分比:剩余预算 / 总预算 × 100%
- 当前燃烧速率:最近 1 小时 / 5 分钟的平均燃烧速率
| 服务 | SLO | 总预算 | 已消耗 | 剩余% | 燃烧速率 | 状态 |
|---|---|---|---|---|---|---|
| api-gateway | 99.99% | 864 | 120 | 86.1% | 1.2x | 正常 |
| user-service | 99.9% | 8,640 | 4,320 | 50.0% | 4.5x | ⚠️ 需关注 |
| payment-svc | 99.99% | 864 | 800 | 7.4% | 18.0x | 🚨 紧急 |
台账实战价值:通过误差预算台账,SRE 团队可以一眼识别哪些服务正在“烧钱”(快速消耗预算),从而优先处理高燃烧速率的服务,而非被大量低优先级告警淹没。这是告警降噪的第一道防线。