4. 误差预算台账核心字段设计

误差预算台账是 SLO 管理的数据核心,其字段设计直接决定了预算计算、消耗追踪与告警触发的准确性和可维护性。本章从 时间窗口、SLI 值、SLO 目标、预算消耗量 和 剩余预算 五个维度,给出 Metric Design 视角下的字段定义、类型选择与约束规则。

4.1 时间窗口字段

时间窗口定义了误差预算的统计周期,是台账记录的“时间锚点”。常见窗口类型包括滚动窗口(Sliding Window)与日历窗口(Calendar Window)。

字段名 类型 说明 示例值
window_start timestamp 窗口起始时间(含) 2025-04-01 00:00:00 UTC
window_end timestamp 窗口结束时间(不含) 2025-04-08 00:00:00 UTC
window_type enum 窗口类型:rolling / calendar rolling
window_duration interval 窗口长度,如 7d、30d 7 days
设计要点:滚动窗口适合实时监控场景,每次计算基于最近 N 天数据;日历窗口适合财务或合规审计场景,按自然月/季度对齐。建议台账同时保留 window_start 与 window_end,避免仅存时长导致跨时区歧义。

4.2 SLI 值字段

SLI(Service Level Indicator)值是误差预算计算的原始输入,通常为一段时间内的成功率、延迟达标率或可用时长占比。

字段名 类型 说明 示例值
sli_value float SLI 实际值,范围 [0.0, 1.0] 0.9987
sli_unit string SLI 单位,如 ratio、ms、seconds ratio
good_events bigint 成功事件计数(可选) 998700
total_events bigint 总事件计数(可选) 1000000
精度警告:SLI 值建议使用 float64 或 decimal(18,6),避免因浮点舍入导致预算计算偏差。当 SLI 接近 1.0(如 0.99999)时,微小误差会被预算公式放大。

4.3 SLO 目标字段

SLO 目标定义了服务承诺的阈值,是误差预算的“基准线”。该字段通常与 SLI 值成对出现,用于计算偏差。

字段名 类型 说明 示例值
slo_target float SLO 目标值,范围 [0.0, 1.0] 0.9990
slo_compliance enum 合规类型:monthly / quarterly monthly
budget_period interval 预算重置周期 30 days
关键约束:slo_target 必须大于等于 SLI 值的历史最低容忍线。例如,SLO 为 99.9% 时,SLI 低于 99.9% 即开始消耗预算。目标值一旦设定,不建议频繁修改,否则台账历史记录将失去可比性。

4.4 预算消耗量字段

预算消耗量表示在时间窗口内,因 SLI 未达标而“消耗”的误差预算比例。计算公式为:budget_consumed = max(0, slo_target - sli_value) * window_duration_seconds。

字段名 类型 说明 示例值
budget_consumed float 当前窗口消耗的预算量(秒或百分比) 86.4
budget_consumed_unit string 消耗单位:seconds / percent seconds
consumed_rate float 消耗速率,单位时间消耗量 12.34
单位选择:推荐使用 seconds 作为消耗单位,便于与 SLO 目标中的时间窗口对齐。百分比单位在跨窗口对比时容易产生歧义,例如 10% 消耗在 7 天窗口与 30 天窗口中的实际含义不同。

4.5 剩余预算字段

剩余预算反映当前窗口内还可容忍的故障时间,是告警与决策的直接依据。

字段名 类型 说明 示例值
budget_remaining float 剩余预算量(秒或百分比) 518.4
budget_remaining_pct float 剩余预算百分比 85.7
burn_rate float 当前燃烧速率,与消耗速率对应 0.8
eta_exhaustion timestamp 预计预算耗尽时间 2025-04-05 14:30:00 UTC
告警阈值:当 budget_remaining_pct 低于 20% 时,应触发黄色告警;低于 5% 时触发红色告警。同时监控 burn_rate,若 burn_rate > 1.0 且持续超过 1 小时,说明故障正在加速消耗预算,需立即响应。

4.6 核心字段关系图

下图展示了五个核心字段在误差预算台账中的流转关系:时间窗口定义计算范围,SLI 值与 SLO 目标共同决定预算消耗量,消耗量累积后得出剩余预算,剩余预算再驱动告警与燃烧速率分析。

误差预算台账核心字段关系图 误差预算台账核心字段关系图 时间窗口字段 window_start / window_end SLI 值字段 sli_value / good_events SLO 目标字段 slo_target / budget_period 预算消耗量字段 budget_consumed / consumed_rate 剩余预算字段 budget_remaining / burn_rate 定义周期 实际表现 基准线 累积消耗 字段依赖关系说明 • 时间窗口 + SLI 值 + SLO 目标 → 计算预算消耗量 • 预算消耗量累积 → 剩余预算 → 驱动告警与燃烧速率分析

4.7 字段设计检查清单

在落地台账表结构时,建议逐项核对以下要点:

  • 时间窗口唯一性:同一 SLO 在同一时间窗口内只能有一条记录,使用 (slo_id, window_start, window_type) 作为联合唯一键。
  • SLI 值范围约束:添加 CHECK 约束 sli_value BETWEEN 0 AND 1,防止脏数据导致预算计算异常。
  • SLO 目标不可为空:每个台账记录必须关联有效的 SLO 目标,建议使用外键引用 SLO 配置表。
  • 预算消耗量非负:消耗量字段必须大于等于 0,可通过应用层或数据库触发器保证。
  • 剩余预算实时性:剩余预算字段应随新窗口数据写入而更新,避免使用定时批处理导致延迟。
最佳实践:将 budget_remaining_pct 与 burn_rate 作为派生字段,通过视图或物化视图计算,减少冗余存储。但 budget_consumed 建议持久化,因为它是审计与复盘的核心依据。