2. 核心概念
在深入 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 口径漂移的直接表现。
2.4 变更口径
变更口径(Change Caliber) 是本次课程的核心校准对象。它定义了“什么算一次变更”以及“什么算一次成功的变更”的测量边界。口径漂移是指:在未通知观测系统的情况下,SLI 的统计口径发生了隐性变化,导致 SLO 合规性数据失真。
变更口径的四个关键维度:
- 计数口径: 变更的原子单位是什么?
- 一次
terraform apply算一次变更?还是其中每个资源变更算一次? - 预检查失败(Plan 失败)是否计入分母?
- 一次
- 成功口径: 什么状态算“成功”?
- API 返回 200?状态文件更新?还是最终一致性校验通过?
- 部分成功(部分资源更新成功,部分失败)如何归类?
- 时间口径: 变更的观测窗口如何界定?
- 从提交到完成?还是从开始执行到状态收敛?
- 超时后手动终止的变更是否计入失败?
- 排除口径: 哪些变更被排除在统计之外?
- 只读查询、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 配置中,作为每次变更的元数据标签。