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 精度:

SLI 口径构成要素与精度影响 SLI 口径构成要素与精度影响 SLI 精度 分子 分母 时间窗口 聚合方式 精度影响关系 • 分子过窄 → 成功率虚低;分子过宽 → 掩盖真实失败 • 分母污染 → 分母虚高,成功率被稀释 • 窗口过短 → 噪声大;窗口过长 → 掩盖短时故障 • 均值聚合 → 掩盖长尾;百分位聚合 → 暴露真实分布

2.6 口径精度校准流程

以下流程帮助团队系统化校准 SLI 口径:

  1. 定义用户旅程:明确哪些请求代表真实用户交互。
  2. 选择观测点:在网关层或客户端 SDK 采集数据,避免服务端内部重试污染。
  3. 设定成功标准:明确 HTTP 状态码范围、响应时间阈值、业务逻辑校验规则。
  4. 确定分母范围:排除健康检查、预加载、爬虫、内部监控流量。
  5. 选择时间窗口:告警用 1-2 分钟,SLO 报告用 1 小时或滚动窗口。
  6. 选择聚合方式:延迟用 P99,可用性用比率,错误率用滑动窗口。
  7. 验证与迭代:对比口径输出与真实用户体验,持续校准。
验证方法:将 SLI 口径计算结果与业务日志抽样比对。若口径显示 99.9% 可用性但用户投诉频繁,说明口径存在系统性偏差。

2.7 常见口径精度问题速查

问题现象 可能原因 修复方向
SLI 长期 100% 但用户投诉 分子过宽(包含非成功响应) 收紧成功阈值,加入业务校验
SLI 频繁抖动 时间窗口过短或分母过小 增大窗口或设置最小分母阈值
SLI 与告警不一致 告警与 SLI 使用不同口径 统一口径定义
SLI 趋势与业务指标背离 分母包含非用户流量 在入口网关层重新定义分母
关键提醒:口径定义是 SRE 团队的技术债务。每次修改口径后,必须重新计算历史数据以保持趋势一致性。建议使用版本化口径管理。