2. 核心概念:SLI、SLO、错误预算与变更口径

在深入 IaC 变更的 SLI 口径漂移校准之前,必须统一团队对四个核心术语的认知。这些概念构成了可观测性工程与 SRE 实践的基石,也是后续所有校准动作的数学与逻辑依据。

2.1 SLI(服务等级指标)定义

SLI(Service Level Indicator) 是对服务某个特定维度质量的直接量化测量值。它不是目标,而是原始观测数据。在 IaC 变更场景中,SLI 通常围绕变更的成功率、延迟和覆盖率来定义。

SLI 黄金三原则(针对 IaC 变更):
  • 变更成功率(Success Rate): 成功应用的变更次数 / 总变更尝试次数 × 100%。
  • 变更延迟(Latency): 从提交 IaC 变更到最终状态收敛(成功/失败)的 P50/P95 耗时。
  • 配置漂移率(Drift Rate): 实际基础设施状态与 IaC 声明状态不一致的资源比例。
SLI 名称 测量维度 典型数据来源 单位
变更成功率 可靠性 CI/CD 管道日志、Terraform/CloudFormation 状态文件 百分比(%)
变更延迟 性能 API 网关耗时、部署工具指标 毫秒(ms)
配置漂移率 一致性 定期合规扫描、Drift Detection 工具 百分比(%)
回滚率 稳定性 变更事件数据库 百分比(%)
口径漂移预警: 同一个 SLI 名称(如“变更成功率”)在不同团队或不同时间窗口内,可能因为分母(总变更次数)是否包含“预检查失败”或“手动跳过”而产生巨大差异。这就是口径漂移的起点。

2.2 SLO(服务等级目标)定义

SLO(Service Level Objective) 是为 SLI 设定的目标阈值。它回答了“我们的服务需要多好?”的问题。SLO 是一个承诺边界,通常以“在某个时间窗口内,SLI 达到某个百分比”的形式表达。

在 IaC 变更场景中,SLO 的典型表达方式为:

# 示例:SLO 定义(YAML 格式)
slo:
  name: "IaC 变更成功率 SLO"
  sli: "变更成功率"
  target: 99.9%          # 目标值
  window: "28_days"      # 滚动窗口
  compliance: "rolling"  # 合规计算方式
SLO 类型 SLI 关联 典型目标值 业务含义
变更成功率 SLO 变更成功率 ≥ 99.9% 每 1000 次变更最多允许 1 次失败
变更延迟 SLO 变更延迟(P95) ≤ 300s 95% 的变更在 5 分钟内完成
漂移 SLO 配置漂移率 ≤ 1% 任意时刻最多 1% 的资源处于漂移状态
关键认知: SLO 不是 SLA(服务等级协议)。SLO 是内部工程目标,SLA 是对外的法律承诺。SLO 可以比 SLA 更严格,但绝不能更宽松。

2.3 错误预算

错误预算(Error Budget) 是 SLO 的衍生概念,定义为 1 - SLO。它代表了服务在特定时间窗口内允许失败的总量。错误预算将“可靠性”转化为一种可消耗的工程资源,用于平衡变更速度与系统稳定性。

错误预算的计算公式:

错误预算 = 总事件数 × (1 - SLO)

示例:
- 总变更次数(28天窗口):10,000 次
- SLO 目标:99.9%
- 错误预算 = 10,000 × (1 - 0.999) = 10 次失败

含义:在 28 天内,最多允许 10 次变更失败。一旦耗尽,应暂停高风险变更。
错误预算在 IaC 变更中的核心作用:
  • 决策依据: 当错误预算充足时,可以加速发布和实验;当预算紧张时,应优先进行稳定性修复和漂移校准。
  • 漂移检测触发器: 如果配置漂移率 SLO 的错误预算快速消耗,说明口径漂移或合规扫描机制可能失效。
  • 校准信号: 错误预算消耗速率与预期不符,往往是 SLI 口径漂移的直接表现。
错误预算消耗与变更决策流程 总变更事件 10,000 次/28天 SLO 目标 99.9% 错误预算 10 次失败 × (1 - SLO) = 允许失败 ✅ 预算充足 继续发布 & 实验 ⚠️ 预算耗尽 暂停高风险变更 消耗 < 预算 消耗 ≥ 预算 🔍 口径漂移影响:如果 SLI 分母被错误缩小,错误预算会被虚增,导致风险被掩盖。

2.4 变更口径

变更口径(Change Caliber) 是本次课程的核心校准对象。它定义了“什么算一次变更”以及“什么算一次成功的变更”的测量边界。口径漂移是指:在未通知观测系统的情况下,SLI 的统计口径发生了隐性变化,导致 SLO 合规性数据失真。

变更口径的四个关键维度:

  1. 计数口径: 变更的原子单位是什么?
    • 一次 terraform apply 算一次变更?还是其中每个资源变更算一次?
    • 预检查失败(Plan 失败)是否计入分母?
  2. 成功口径: 什么状态算“成功”?
    • API 返回 200?状态文件更新?还是最终一致性校验通过?
    • 部分成功(部分资源更新成功,部分失败)如何归类?
  3. 时间口径: 变更的观测窗口如何界定?
    • 从提交到完成?还是从开始执行到状态收敛?
    • 超时后手动终止的变更是否计入失败?
  4. 排除口径: 哪些变更被排除在统计之外?
    • 只读查询、Dry-run、自动化巡检触发的状态同步?
    • 回滚操作是否单独统计?
口径维度 宽松口径(易达标) 严格口径(真实反映) 漂移风险
计数口径 只计 apply 成功数 计所有 plan + apply 尝试 分母缩小,成功率虚高
成功口径 API 返回 200 即成功 最终一致性校验通过才算成功 掩盖异步失败
时间口径 忽略超时手动终止的变更 超时即失败 延迟 SLO 失真
排除口径 排除所有自动化巡检变更 仅排除明确只读操作 漂移率被低估
变更口径漂移的四个维度 变更口径 计数口径 原子单位定义 成功口径 成功状态判定 时间口径 观测窗口界定 排除口径 统计排除规则 📌 校准目标:确保四个维度的定义在团队、工具链和时间窗口内保持一致且可审计。

2.5 四者关系总结

SLI、SLO、错误预算和变更口径构成了一个闭环反馈系统。口径是基础,SLI 是测量,SLO 是目标,错误预算是决策燃料。

核心关系链:
变更口径 → SLI(原始测量) → SLO(目标阈值) → 错误预算(可消耗资源) → 变更决策(加速/暂停)

一旦口径发生漂移:
  • SLI 数据失真 → SLO 合规性虚假 → 错误预算虚增/虚减 → 错误决策。
  • 校准口径,就是校准整个可靠性管理体系的基准线。
概念 角色 在 IaC 变更中的体现 口径漂移的影响
变更口径 测量基准 定义“一次变更”的边界 所有下游指标失准
SLI 原始数据 变更成功率、延迟、漂移率 数值偏离真实质量
SLO 目标承诺 99.9% 成功率、P95 ≤ 300s 合规状态虚假
错误预算 决策资源 允许失败的次数 风险被掩盖或夸大
实战建议: 在开始任何校准工作之前,先在团队内部对齐本章的四个核心定义。建议将口径定义文档化,并纳入 IaC 变更管道的 CI/CD 配置中,作为每次变更的元数据标签。