4、误差预算台账设计原则:台账的四大核心字段与版本控制

误差预算台账是SRE团队从“被动救火”转向“数据驱动决策”的核心载体。一份设计良好的台账,必须同时满足可观测性(一眼看清当前风险)和可审计性(追溯历史变更与决策依据)。本章聚焦台账的四大核心字段定义、字段间的计算关系,以及版本控制与审计的工程落地方法。

4.1 台账的四大核心字段

任何误差预算台账都必须包含以下四个字段,缺一不可。它们共同构成了“定义→测量→消耗→剩余”的闭环。

字段名称 英文缩写 定义与作用 示例值
服务等级指标 SLI 衡量服务质量的具体指标,通常是“好事件/总事件”的比率。它是台账的测量源头。 请求成功率:99.95%
服务等级目标 SLO SLI的目标阈值,定义了“什么是可接受的服务质量”。它是台账的基准线。 99.9%(滚动30天窗口)
预算消耗 Budget Burn 在SLO窗口内,实际SLI低于SLO的累计“不合格时间”或“不合格事件数”。它是台账的风险计数器。 0.05%(过去7天累计)
剩余预算 Remaining Budget SLO窗口内剩余的、可容忍的故障额度。计算公式:剩余预算 = SLO窗口总预算 - 预算消耗。它是台账的决策触发器。 0.05%(剩余50%)
工程落地要点: 四个字段必须使用同一时间窗口(如滚动30天)。如果SLI使用1分钟粒度,SLO使用30天窗口,预算消耗必须按分钟累计到30天窗口内,避免“口径不一致”导致台账失真。

4.2 四大字段的关联关系与计算逻辑

四个字段不是孤立的,它们通过以下公式形成动态关联:

# 核心计算公式
SLO窗口总预算 = 1 - SLO目标值
预算消耗 = 窗口内所有SLI < SLO的偏差累计
剩余预算 = SLO窗口总预算 - 预算消耗

# 示例:SLO = 99.9%,窗口总预算 = 0.1%
# 若过去30天累计消耗了0.04%的预算
# 剩余预算 = 0.1% - 0.04% = 0.06%(剩余60%)

下图展示了四个字段在台账中的流转关系与决策链路:

误差预算台账四大核心字段流转图 SLI 请求成功率 99.95% SLO 目标 99.9% / 30天 预算消耗 累计 0.04% 剩余预算 0.06% (剩余60%) 决策触发器 剩余预算 < 20% → 告警 剩余预算 < 10% → 冻结发布 剩余预算 = 0% → 启动复盘
关键认知: 剩余预算不是“剩余时间”,而是“剩余故障额度”。当剩余预算趋近于0时,意味着服务已经接近违反SLO,必须立即采取降速、回滚或扩容等干预措施。

4.3 台账的版本控制与审计

误差预算台账是SRE团队的“服务健康档案”,必须像代码一样进行版本管理。任何对SLI定义、SLO阈值、窗口周期的修改,都必须留下审计痕迹。

4.3.1 版本控制的三大场景

  • SLI定义变更: 例如从“请求成功率”改为“有效请求成功率”(排除爬虫)。变更后,历史预算消耗需要重新计算或标记为“旧版口径”。
  • SLO阈值调整: 例如从99.9%提升到99.95%。调整后,剩余预算会瞬间“缩水”,需要记录变更原因与审批人。
  • 窗口周期修改: 例如从固定30天改为滚动28天。窗口变化会导致预算消耗的累计速度发生变化,必须审计。

4.3.2 审计日志的核心字段

字段 说明 示例
变更ID 全局唯一标识 CHG-20240521-001
变更时间 精确到毫秒的时间戳 2024-05-21T14:30:00.000Z
变更人 执行变更的工程师或系统 zhangsan@company.com
变更类型 SLI/SLO/窗口/计算逻辑 SLO阈值调整
变更前值 变更前的完整配置快照 SLO: 99.9%
变更后值 变更后的完整配置快照 SLO: 99.95%
审批人 变更审批链 liwei@company.com (Tech Lead)
变更原因 Jira/工单链接或文字说明 PROJ-1234: 提升核心API可用性目标

4.3.3 版本控制工程实践

推荐使用Git + YAML作为台账的版本控制基础设施。每个SLO条目对应一个YAML文件,变更通过Pull Request提交,CI流水线自动校验格式并生成审计日志。

# 示例:slo-payment-service.yaml
version: "2.0"
metadata:
  service: payment-service
  owner: team-payment
  last_modified: 2024-05-21T14:30:00Z
spec:
  sli:
    metric: "http_requests_total{status=~\"2xx|3xx\"} / http_requests_total"
    measurement_window: "1m"
  slo:
    target: 0.9995
    window: "rolling_30d"
    burn_rate_alerts:
      - level: warning
        threshold: 0.2  # 剩余预算 < 20%
      - level: critical
        threshold: 0.1  # 剩余预算 < 10%
  budget:
    total: 0.0005
    consumed: 0.0002
    remaining: 0.0003
    last_updated: 2024-05-21T14:30:00Z
避坑指南: 不要将“预算消耗”和“剩余预算”直接写入YAML文件作为静态值。它们应该由监控系统实时计算并写入数据库,YAML只保存SLI/SLO定义和版本历史。否则,每次PR都会导致预算数据冲突。

4.4 台账版本控制与审计的架构

下图展示了台账版本控制与审计的工程架构,从变更触发到审计归档的完整链路:

台账版本控制与审计架构 变更触发 PR / 工单 Git 仓库 YAML 版本管理 CI 校验 格式 + 逻辑检查 审计数据库 变更日志 + 快照 监控系统 实时计算预算消耗 台账展示 Dashboard / API 变更审批通过后 自动同步监控配置
工程落地建议: 审计数据库建议使用不可变日志存储(如EventStore或Kafka + 对象存储),确保历史记录无法被篡改。每次变更都生成一个完整的配置快照,方便回溯任意时间点的台账状态。

4.5 本章小结

  • 四大核心字段(SLI、SLO、预算消耗、剩余预算)构成了误差预算台账的骨架,缺一不可。
  • 计算关系必须基于同一时间窗口,剩余预算 = 总预算 - 累计消耗,是决策的核心依据。
  • 版本控制通过Git + YAML实现,每次变更必须记录变更ID、时间、人、前后值、审批人和原因。
  • 审计架构采用“变更触发 → Git仓库 → CI校验 → 审计数据库”的链路,确保台账的完整性和可追溯性。