误差预算台账数据不准Prometheus采集链路排查 - 第1节

1.1 什么是误差预算

误差预算(Error Budget)是 SRE 实践中的核心量化指标,它定义了服务在给定时间窗口内允许的最大不可用时间。其数学基础来源于服务等级目标(SLO),计算公式为:

Error Budget = 1 - SLO
例如:SLO = 99.9% → Error Budget = 0.1% = 8.64 小时/年

误差预算将抽象的“可靠性”转化为可消耗的“预算额度”,团队可以据此决策发布节奏、故障响应优先级和容量规划。当预算充足时,可以加速功能迭代;当预算耗尽时,必须暂停变更并优先恢复稳定性。

关键公式: 误差预算消耗率 = (1 - 实际可用性) / (1 - SLO) × 100%

1.2 台账在 SRE 中的角色

误差预算台账(Error Budget Ledger)是记录、追踪和审计误差预算消耗状态的系统化数据集合。它在 SRE 体系中承担以下核心角色:

角色维度 具体职责 典型输出
决策依据 提供实时预算余额,支撑发布/回滚决策 预算消耗仪表盘、告警阈值
审计追溯 记录每次故障对预算的影响,支持事后复盘 时间序列曲线、事件关联表
趋势分析 识别长期可靠性退化或改进趋势 月度/季度预算消耗报告
责任划分 区分不同服务、团队或变更类型的预算消耗 多维度聚合台账

台账的准确性直接决定了 SRE 运营的可信度。如果台账数据不准,团队可能做出错误的发布决策、遗漏关键故障信号,甚至导致 SLO 违约而不自知。

1.3 数据不准的典型表现

在实际生产环境中,误差预算台账数据不准通常表现为以下六类典型场景:

  1. 预算消耗率异常跳变:台账显示某天预算消耗突然翻倍,但实际服务指标无对应波动。
  2. 台账与原始指标不一致:PromQL 查询原始指标与台账聚合结果存在系统性偏差。
  3. 时间窗口错位:台账的预算重置时间与 SLO 定义窗口(如滚动 30 天)不匹配。
  4. 缺失数据导致预算虚高:采集链路中断导致部分故障未被计入,台账显示预算充足但实际已耗尽。
  5. 重复计数:同一故障事件被多次计入预算消耗,导致预算提前耗尽。
  6. 维度聚合错误:多服务聚合台账时,权重计算或分组逻辑错误导致汇总数据失真。
⚠️ 常见误区: 很多团队只关注 SLO 是否达标,却忽略了台账数据本身的准确性。实际上,台账不准比 SLO 不达标更危险——它会让你在错误的数据基础上做出错误的决策。

1.4 误差预算台账数据流全景

为了系统性地排查台账数据不准问题,首先需要理解完整的采集链路。下图展示了从服务指标产生到台账呈现的端到端数据流:

误差预算台账数据流全景图 误差预算台账数据流全景图 服务指标 请求量/延迟/错误率 Prometheus 采集 scrape / remote write 指标存储 TSDB / Thanos / VictoriaMetrics SLO 计算 SLI 聚合 / 窗口计算 误差预算计算 消耗率 / 余额 台账呈现 Grafana / 告警 / 报告 ⚠️ 数据不准高发区: 采集缺失 → 存储重复/丢失 → SLO 窗口计算偏差 → 聚合维度错误 → 台账呈现不一致 每个环节都可能引入数据偏差,排查需从台账逆向追溯至原始指标

1.5 排查思路总览

基于上述数据流,排查台账数据不准问题应遵循“逆向追溯、分层验证”的原则:

  • 第一层:台账呈现层 — 验证 Grafana 面板的 PromQL 查询逻辑是否正确,聚合函数和窗口参数是否匹配 SLO 定义。
  • 第二层:计算逻辑层 — 检查 SLO 计算规则(如 SLI 定义、燃烧速率窗口、预算重置策略)是否与台账配置一致。
  • 第三层:存储层 — 确认 TSDB 中原始指标是否存在数据缺失、重复、乱序或过期问题。
  • 第四层:采集层 — 检查 Prometheus 采集配置(scrape 间隔、超时、服务发现)是否覆盖所有目标,是否存在采集失败或延迟。
  • 第五层:数据源层 — 验证服务端暴露的指标格式、标签命名、计数器重置行为是否符合预期。
💡 实战建议: 在开始排查前,先建立台账数据的“黄金基准”——通过 Prometheus 的原始指标直接计算一次误差预算,与台账对比。如果两者不一致,说明问题出在采集或存储层;如果一致,则问题在计算或呈现层。

1.6 本章小结