1. SLI 基础概念:SLI 定义、SRE 四大黄金信号、SLI 与 SLO 的关系
1.1 SLI 定义:服务等级指标
SLI(Service Level Indicator,服务等级指标) 是对服务某个特定维度(如延迟、错误率、吞吐量、饱和度)进行量化的原始测量值。在基础设施即代码(IaC)场景中,SLI 是判断基础设施资源是否“健康”的数字化标尺。
核心公式:
SLI = 符合预期行为的样本数 / 总样本数
通常以百分比(%)或比率形式呈现,例如:99.5% 的请求在 200ms 内完成。
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 口径的起点。
每个黄金信号在 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 | 错误预算(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)
❌ 把 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 滑动窗口,结果天差地别。