1. SLI 基础概念:SLI 定义、SRE 四大黄金信号、SLI 与 SLO 的关系

1.1 SLI 定义:服务等级指标

SLI(Service Level Indicator,服务等级指标) 是对服务某个特定维度(如延迟、错误率、吞吐量、饱和度)进行量化的原始测量值。在基础设施即代码(IaC)场景中,SLI 是判断基础设施资源是否“健康”的数字化标尺。

核心公式:
SLI = 符合预期行为的样本数 / 总样本数
通常以百分比(%)或比率形式呈现,例如:99.5% 的请求在 200ms 内完成。

SLI 的选取必须满足 R.E.A.L. 原则:

原则 说明 IaC 示例
Relevant(相关) 直接反映用户体验或系统关键行为 API 网关 P99 延迟
Easy to measure(易测量) 能从现有监控或日志中低成本获取 Prometheus 指标 / CloudWatch 日志
Actionable(可行动) 指标异常时能触发明确的修复动作 CPU 使用率 > 80% 触发扩容
Linear(线性) 数值变化与系统状态变化呈单调关系 错误率上升 → 系统可用性下降

1.2 SRE 四大黄金信号

Google SRE 团队定义了四个最通用的 SLI 类别,称为四大黄金信号(Four Golden Signals)。它们是构建任何基础设施 SLI 口径的起点。

SRE 四大黄金信号 延迟 (Latency) 请求处理耗时 错误率 (Errors) 失败请求占比 吞吐量 (Traffic) 请求/数据量 饱和度 (Saturation) 资源使用程度 四大黄金信号覆盖了基础设施的“速度、正确性、容量、压力”四个维度,缺一不可。 → IaC 场景下的 SLI 映射 P99 响应时间 Terraform apply 耗时 部署失败率 IaC 编排错误计数 QPS / RPS API 网关请求量 CPU / 内存使用率 节点资源水位

每个黄金信号在 IaC 场景中的典型 SLI 口径:

  • 延迟(Latency):基础设施变更生效时间、API 响应时间、数据库查询耗时。
  • 错误率(Errors):Terraform/Ansible 执行失败率、HTTP 5xx 占比、证书过期比例。
  • 吞吐量(Traffic):每秒请求数(RPS)、网络带宽使用量、日志写入速率。
  • 饱和度(Saturation):CPU 使用率、内存占用百分比、磁盘 I/O 等待队列长度。

1.3 SLI 与 SLO 的关系

SLO(Service Level Objective,服务等级目标) 是围绕 SLI 设定的目标阈值或范围。SLI 是“测量值”,SLO 是“期望值”。两者构成可观测性闭环的核心:

一句话区分:
SLI = 你测量了什么(数据)
SLO = 你承诺了什么(目标)

关系模型可以用以下流程表示:

SLI → SLO → 错误预算 闭环 SLI 实际测量值 SLO 目标阈值 错误预算 可容忍的失败量 反馈调整 SLI 口径或 SLO 目标

SLI 与 SLO 的典型对应关系:

SLI 示例 对应的 SLO 错误预算(30天)
P99 延迟 ≤ 200ms 99.9% 的请求在 200ms 内完成 约 43 分钟不可接受延迟
HTTP 5xx 错误率 错误率 ≤ 0.1% 约 0.1% × 总请求量
CPU 使用率 CPU 使用率 ≤ 80% 持续 5 分钟 按时间窗口计算
Terraform apply 成功率 部署成功率 ≥ 99.5% 约 0.5% 的部署可失败
常见误区:
❌ 把 SLO 当成 SLI 来定义(例如:“SLO 是 99.9%” —— 缺少测量维度)
✅ 正确做法:先定义 SLI(P99 延迟),再设定 SLO(99.9% 请求 ≤ 200ms)

1.4 为什么 IaC 需要 SLI 口径

在基础设施即代码场景中,SLI 口径决定了可观测性的数据质量。没有标准化的 SLI 口径,不同团队对同一指标的理解可能完全不同:

  • 口径不一致:A 团队用“平均延迟”,B 团队用“P50 延迟”,无法对齐。
  • 采集频率差异:10s 采样 vs 60s 采样,导致 SLO 计算偏差。
  • 聚合方式混乱:全局平均 vs 分位值 vs 滑动窗口,结果天差地别。