1. 课程导论:误差预算台账的概念、数据偏差的常见原因、PromQL在排查中的核心价值
1.1 什么是误差预算台账
在SRE实践中,误差预算(Error Budget)是服务等级目标(SLO)与可用性之间的量化桥梁。误差预算台账则是对这一预算的消耗、剩余、趋势进行结构化记录与审计的数据集合。它通常以时间序列形式存储在Prometheus等监控系统中,并通过PromQL聚合查询进行日常巡检与异常排查。
核心公式:
误差预算 = 1 − SLO目标值(例如:99.9%可用性对应0.1%的误差预算)
消耗量 = 实际错误率 − SLO目标值(当实际错误率超过目标时,消耗为正)
误差预算 = 1 − SLO目标值(例如:99.9%可用性对应0.1%的误差预算)
消耗量 = 实际错误率 − SLO目标值(当实际错误率超过目标时,消耗为正)
台账数据通常包含以下关键指标:
| 台账字段 | Prometheus指标示例 | 说明 |
|---|---|---|
| 总请求量 | requests_total |
服务接收的总请求数 |
| 错误请求量 | errors_total |
不符合SLO定义的错误请求数 |
| 错误率 | rate(errors_total[5m]) / rate(requests_total[5m]) |
当前滑动窗口内的错误比例 |
| 预算消耗率 | 1 - (rate(errors_total[30d]) / rate(requests_total[30d])) / (1 - SLO) |
30天滚动窗口内的预算使用比例 |
| 剩余预算 | max(0, 1 - 预算消耗率) |
当前剩余的可用误差额度 |
1.2 数据偏差的常见原因
误差预算台账数据偏差是指台账中记录的预算消耗、剩余值与实际服务状况不一致的现象。根据一线SRE排查经验,偏差主要来源于以下四个维度:
| 偏差类别 | 典型场景 | 影响 |
|---|---|---|
| 采集层偏差 | Exporter数据丢失、指标重命名、标签不一致 | 台账数据缺失或重复计算 |
| 聚合层偏差 | PromQL聚合窗口不匹配、rate/irate误用、sum by维度遗漏 | 预算消耗率计算错误 |
| 存储层偏差 | Prometheus数据过期、分片丢失、联邦集群时间不同步 | 历史台账不可回溯 |
| 业务层偏差 | SLO定义变更未同步、错误分类逻辑调整、灰度发布期间数据混杂 | 台账与真实SLO脱节 |
常见误区:很多团队在排查偏差时,第一时间怀疑业务代码,但实际案例中超过60%的偏差源于PromQL聚合查询的误用或采集配置的疏漏。因此,掌握PromQL排查方法比盲目修改SLO定义更高效。
1.3 PromQL在排查中的核心价值
PromQL(Prometheus Query Language)是SRE工程师排查误差预算台账数据偏差的第一工具。其核心价值体现在以下三个方面:
- 分层验证能力:通过PromQL可以分别查询原始指标、中间聚合结果、最终台账值,快速定位偏差发生在哪一层。
- 时间窗口灵活性:支持秒级到月级的滑动窗口聚合,能够对比不同时间范围的预算消耗趋势,发现异常窗口。
- 多维下钻能力:利用
sum by (service, version, region)等聚合操作,可以按任意标签维度拆解偏差来源。
排查黄金三步法(PromQL视角):
① 验证原始指标:
② 验证聚合逻辑:
③ 验证台账输出:
① 验证原始指标:
rate(errors_total[5m]) / rate(requests_total[5m]) 是否与预期一致?② 验证聚合逻辑:
sum by (service) (rate(errors_total[5m])) 是否遗漏了关键标签?③ 验证台账输出:
clamp_max(1 - (rate(errors_total[30d]) / rate(requests_total[30d])) / (1 - 0.999), 1) 是否在合理范围内?
1.4 课程学习路径
本课程将围绕以下主线展开:
- 基础篇:PromQL聚合函数详解(rate、sum、avg、quantile等)及其在台账计算中的正确用法。
- 实战篇:通过真实案例,演示如何利用PromQL逐层排查台账偏差,定位根因。
- 进阶篇:多集群联邦查询、历史数据回溯、自动化偏差检测脚本编写。
- 总结篇:建立台账数据质量巡检SOP,形成可复用的排查方法论。
学习建议:建议在阅读本课程时,同时打开Prometheus的查询界面(如Grafana Explore或Prometheus Web UI),跟随课程中的PromQL示例进行实操验证。理论与实践结合,才能最快掌握排查技能。