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,无需打扰值班人员。
误差预算消耗与燃烧速率联动流程 SLO 定义 99.9% / 99.99% SLI 指标采集 成功率 / 延迟 / 吞吐量 误差预算计算 (1 - SLO) × 总事件 燃烧速率计算 实际失败率 / 允许失败率 告警分级与响应联动 < 1x 无告警 1x – 3x Warning 3x – 10x Critical > 10x Pager 立即处理
常见误区:不要将燃烧速率与失败率混淆。一个 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 团队可以一眼识别哪些服务正在“烧钱”(快速消耗预算),从而优先处理高燃烧速率的服务,而非被大量低优先级告警淹没。这是告警降噪的第一道防线。