GitOps交付SLO错误预算监测与复盘 - 第1节

1.1 从服务等级到可靠性度量:SLA、SLI、SLO

在开始 SLO 预算复核之前,必须先厘清三个核心术语:SLA(Service Level Agreement,服务等级协议)、SLI(Service Level Indicator,服务等级指标)和 SLO(Service Level Objective,服务等级目标)。它们是现代站点可靠性工程(SRE)的基石,也是 GitOps 驱动预算复核的输入数据源。

1.1.1 三者的定义与定位

术语 全称 核心定义 典型场景
SLA Service Level Agreement 服务提供商与客户之间的法律/合同承诺,包含违约处罚条款。 云厂商承诺 99.99% 可用性,未达标则退还月度费用。
SLI Service Level Indicator 对服务质量的原始量化测量,通常是比率、延迟或错误计数。 请求成功率 99.95%、P99 延迟 200ms。
SLO Service Level Objective 团队内部设定的目标阈值,SLI 必须在此范围内才算健康。 月度 SLI ≥ 99.95% 为达标,低于 99.9% 触发告警。
关键认知:SLA 是商业合同,SLO 是工程目标,SLI 是原始数据。SRE 实践的核心是定义好的 SLO,而不是直接追逐 SLA。SLA 通常比 SLO 宽松(例如 SLA 为 99.9%,内部 SLO 设为 99.95%),为违约风险留出缓冲。

1.1.2 三者关系:从数据到承诺的链路

下图展示了从原始指标到商业承诺的完整链路:

SLA / SLI / SLO 关系链路 原始观测数据 日志 / 指标 / 追踪 SLI(服务等级指标) 可用率 / 延迟 / 错误率 SLO(服务等级目标) 阈值 + 预算窗口 SLA(服务等级协议) 合同承诺 + 处罚条款 内部工程目标(SLO)通常比商业承诺(SLA)更严格 SLO 99.95% → SLA 99.9%,预留 0.05% 的误差缓冲 SLO 预算复核结果反馈至 SLI 采集与告警策略调整
实践要点:在 GitOps 工作流中,SLI 数据通常由 Prometheus / Thanos 等监控系统采集,SLO 配置以 YAML 形式存储在 Git 仓库中,SLA 条款则记录在合同管理系统。SLO 预算复核的本质是:对比当前 SLI 与 SLO 阈值的差距,计算剩余错误预算,并决定是否触发部署门禁或回滚。

1.2 为什么需要 SLO 预算?

SLO 预算(Error Budget,错误预算)是 SRE 中最具工程实践价值的概念。它将抽象的可靠性目标转化为可量化的“容错额度”,让团队在发布速度与系统稳定性之间做出理性决策。

1.2.1 错误预算的定义

错误预算 = 1 − SLO。例如:

  • SLO = 99.9% → 错误预算 = 0.1%(月度允许的不可用时间约 43 分钟)
  • SLO = 99.99% → 错误预算 = 0.01%(月度允许的不可用时间约 4.3 分钟)

错误预算消耗完之前,团队可以自由发布新功能;一旦预算耗尽,必须暂停发布并优先修复可靠性问题。

1.2.2 错误预算的三大价值

价值维度 说明 GitOps 场景示例
消除对立 不再有“开发 vs 运维”的零和博弈,双方共享同一个预算池。 CI/CD 流水线中根据预算剩余自动决定是否允许合并 PR。
量化风险 每次发布前可以评估“这次变更会消耗多少预算”。 GitOps 控制器在 Apply 前检查预算水位,低于阈值则拒绝同步。
驱动改进 预算快速耗尽说明系统存在根本性缺陷,需要架构优化。 预算消耗趋势图作为 Git 仓库中的可观测性 Dashboard 配置。

1.2.3 错误预算的生命周期

下图展示了一个典型的月度错误预算消耗与复核流程:

月度错误预算生命周期 月初:错误预算 = 100%(例如 SLO 99.9% → 43 分钟) 第 1-2 周:正常消耗(~30%) 第 3 周:故障消耗(~40%) 第 4 周:预算告急(~90%) 预算剩余 ≥ 10% → 继续发布;预算剩余 < 10% → 冻结发布,启动可靠性 Sprint 月末:预算归零 / 重置 → 生成复核报告,调整下月 SLO 阈值
常见误区:错误预算不是“可用时间”,而是“允许失败的时间”。如果系统在月初就因重大故障耗尽预算,团队不应继续发布新功能,而应优先进行根因分析和架构加固。GitOps 的自动化门禁可以强制实施这一策略——当预算低于阈值时,ArgoCD 或 Flux 的同步操作会被自动拒绝。

1.3 SLO 预算与 GitOps 的天然契合

GitOps 的核心原则是“以 Git 仓库作为单一事实来源”,而 SLO 预算的配置、状态和复核结果同样可以(也应该)存储在 Git 中。这种结合带来了以下优势:

  • 声明式 SLO 配置:SLO 阈值、预算窗口、告警规则全部以 YAML 形式管理,可审计、可回滚。
  • 自动化预算复核:CI/CD 流水线在每次部署前自动计算当前预算消耗,决定是否放行。
  • 可追溯的决策记录:每次预算复核的结果(通过/拒绝)都作为 Git 提交记录留存。