1. 课程导论:误差预算(Error Budget)的概念、SLO与SLI的关系、为什么需要聚合查询优化
1.1 从可用性到误差预算:SRE 的核心量化工具
在站点可靠性工程(SRE)实践中,传统的“9 的个数”可用性指标(如 99.9%、99.99%)虽然直观,但存在两个致命缺陷:粒度粗糙和无法指导决策。误差预算(Error Budget)正是为了解决这些问题而诞生的量化框架。
误差预算的定义非常简单:
Error Budget = 1 − SLO
例如:SLO 为 99.9% 的服务,其月度误差预算为 0.1%,即约 43 分 12 秒的不可用时间。
例如:SLO 为 99.9% 的服务,其月度误差预算为 0.1%,即约 43 分 12 秒的不可用时间。
这个预算代表了服务所有者可以“消耗”的不可靠性额度。只要实际错误率未超出预算,团队就可以放心地进行功能发布;一旦预算耗尽,则必须暂停发布并优先投入稳定性工作。这种机制将模糊的“可靠性”转化为可量化的、可操作的决策依据。
1.2 SLO 与 SLI 的关系:指标金字塔
要理解误差预算,必须先理清三个核心概念之间的层级关系:
| 概念 | 英文 | 定义 | 示例 |
|---|---|---|---|
| SLI | Service Level Indicator | 服务水平的原始度量指标,通常为比率或分布 | 请求延迟 P99 ≤ 200ms 的比例 |
| SLO | Service Level Objective | SLI 的目标阈值,是团队承诺的可靠性边界 | 99.9% 的请求延迟 P99 ≤ 200ms |
| Error Budget | Error Budget | 1 − SLO,表示允许的失效额度 | 0.1% 的请求可以超过 200ms |
三者之间的关系可以用下面的结构图来概括:
1.3 为什么需要聚合查询优化?—— 台账场景的挑战
在实际的误差预算台账系统中,我们通常需要按多维度(服务、集群、版本、区域)实时计算每个 SLO 的预算消耗情况。这直接依赖 PromQL 的聚合查询能力。然而,未经优化的聚合查询会带来严重的性能问题:
⚠ 常见痛点: 一个包含 1000 个服务、每个服务 5 个 SLO、时间窗口为 30 天的误差预算台账,如果直接使用
avg_over_time(sum(rate(...))) 等嵌套聚合,单次查询可能消耗数 GB 内存,导致 Prometheus 响应超时或 OOM。
聚合查询优化的必要性体现在以下三个层面:
- 计算效率:误差预算需要按 滑动窗口(如 28 天、7 天)反复计算,低效的 PromQL 会导致查询延迟从秒级恶化到分钟级。
- 资源消耗:嵌套的
avg、sum、rate组合会触发 Prometheus 的多次数据扫描,内存和 CPU 开销呈指数增长。 - 准确性保障:错误的聚合顺序(如先平均后求和 vs 先求和后平均)会直接导致误差预算计算偏差,误导发布决策。
1.4 优化前后的对比:一个直观的例子
假设我们需要计算每个服务的月度误差预算消耗率(Budget Burn Rate),典型的优化路径如下:
| 阶段 | PromQL 示例 | 查询耗时(1000 服务) | 内存峰值 |
|---|---|---|---|
| 未优化 | |
~45 秒 | ~2.8 GB |
| 优化后 | |
~3 秒 | ~0.4 GB |
💡 优化关键: 将外层
avg 下推到内层,减少 Prometheus 需要维护的时间序列数量。本课程后续章节将系统讲解 聚合下推、Recording Rules 预计算、子查询消除 等实战技巧。
1.5 本章小结
- 误差预算 是 SRE 将可靠性量化为可消耗额度的核心工具,公式为
1 − SLO。 - SLI → SLO → Error Budget 构成从原始指标到决策依据的完整链路。
- 在大规模误差预算台账场景中,PromQL 聚合查询优化 是保障系统实时性、降低资源消耗、确保数据准确性的必要手段。
- 本课程将从 PromQL 聚合原理、常见反模式、Recording Rules 设计、台账架构等维度,系统讲解优化实践。