2. SLI 口径定义:构成要素与精度影响
SLI 口径(Service Level Indicator Definition)是 SRE 可观测性体系的基石。一个不精确的口径会导致误告警、错误容量规划甚至业务决策偏差。本节从构成要素出发,系统拆解分子、分母、时间窗口与聚合方式对精度的影响。
2.1 SLI 口径的四大构成要素
任何 SLI 口径都可以抽象为以下四元组:
| 要素 | 定义 | 典型示例 | 精度影响 |
|---|---|---|---|
| 分子 | 符合成功标准的请求/事件计数 | HTTP 200-499 响应数 | 成功阈值定义过宽或过窄 |
| 分母 | 总请求/事件计数(含成功与失败) | 所有 HTTP 响应数 | 分母是否包含重试、健康检查、爬虫 |
| 时间窗口 | 聚合计算的时间范围 | 1 分钟 / 5 分钟 / 1 小时 | 窗口大小决定噪声平滑程度 |
| 聚合方式 | 数据汇总与统计方法 | 平均值 / 百分位数 / 比率 | 聚合粒度掩盖异常分布 |
核心原则:分子与分母必须来自同一观测域(同一组请求),否则口径产生系统性偏差。
2.2 分子与分母:精度陷阱
分子与分母的定义直接决定 SLI 是否反映真实用户体验。常见精度问题包括:
- 分母污染:将健康检查、预加载、爬虫流量计入分母,导致成功率虚低。
- 分子过窄:仅将 HTTP 200 视为成功,忽略 201/204/304 等正常响应。
- 重试污染:客户端自动重试导致同一用户请求被多次计入分母,分子却只计最后一次成功。
- 超时截断:服务端在超时后返回 200,但用户实际已等待超时——分子虚高。
最佳实践:分子应定义为“用户可感知的成功”,分母应排除非用户流量。建议在入口网关层(而非应用层)定义分母。
2.3 时间窗口:平滑与灵敏的平衡
时间窗口的选择直接影响 SLI 的波动特性:
| 窗口大小 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 1 分钟 | 高灵敏度,快速发现异常 | 噪声大,易触发抖动告警 | 核心交易链路、实时监控 |
| 5 分钟 | 平衡灵敏度与稳定性 | 对突发流量响应延迟 | 通用 SLI、SLO 计算 |
| 1 小时 | 平滑噪声,趋势清晰 | 掩盖短时故障 | 容量规划、长期趋势分析 |
避坑提示:不要使用单一窗口同时做告警和 SLO 报告。告警用短窗口(1-2 分钟),SLO 报告用长窗口(1 小时或滚动 28 天)。
2.4 聚合方式:均值掩盖真相
聚合方式的选择决定了 SLI 能否反映真实分布。以下对比展示不同聚合方式对同一数据集的精度影响:
| 聚合方式 | 计算逻辑 | 精度风险 | 推荐替代 |
|---|---|---|---|
| 平均值 | 总和 / 计数 | 被极端值拉偏,掩盖长尾 | P50 / P95 / P99 |
| 百分位数 | 排序后取第 p 百分位 | 样本量不足时不稳定 | 配合 T-Digest 算法 |
| 比率 | 分子 / 分母 | 分母过小时比率剧烈波动 | 设置最小分母阈值 |
| 滑动窗口 | 固定时间区间滚动计算 | 窗口边界效应导致跳变 | 使用指数加权移动平均 |
案例:某 API 平均延迟 200ms,但 P99 延迟 5s。若仅用平均值定义 SLI,会完全忽略 1% 用户的极差体验。建议将延迟 SLI 定义为 P99 ≤ 1s。
2.5 口径定义对精度的综合影响
以下 SVG 展示四大要素如何协同影响 SLI 精度:
2.6 口径精度校准流程
以下流程帮助团队系统化校准 SLI 口径:
- 定义用户旅程:明确哪些请求代表真实用户交互。
- 选择观测点:在网关层或客户端 SDK 采集数据,避免服务端内部重试污染。
- 设定成功标准:明确 HTTP 状态码范围、响应时间阈值、业务逻辑校验规则。
- 确定分母范围:排除健康检查、预加载、爬虫、内部监控流量。
- 选择时间窗口:告警用 1-2 分钟,SLO 报告用 1 小时或滚动窗口。
- 选择聚合方式:延迟用 P99,可用性用比率,错误率用滑动窗口。
- 验证与迭代:对比口径输出与真实用户体验,持续校准。
验证方法:将 SLI 口径计算结果与业务日志抽样比对。若口径显示 99.9% 可用性但用户投诉频繁,说明口径存在系统性偏差。
2.7 常见口径精度问题速查
| 问题现象 | 可能原因 | 修复方向 |
|---|---|---|
| SLI 长期 100% 但用户投诉 | 分子过宽(包含非成功响应) | 收紧成功阈值,加入业务校验 |
| SLI 频繁抖动 | 时间窗口过短或分母过小 | 增大窗口或设置最小分母阈值 |
| SLI 与告警不一致 | 告警与 SLI 使用不同口径 | 统一口径定义 |
| SLI 趋势与业务指标背离 | 分母包含非用户流量 | 在入口网关层重新定义分母 |
关键提醒:口径定义是 SRE 团队的技术债务。每次修改口径后,必须重新计算历史数据以保持趋势一致性。建议使用版本化口径管理。