4. SLI 指标选取:四大黄金信号与自定义业务 SLI
SLI(Service Level Indicator)是 SLO 工程的量化基石。选错 SLI,后续的 SLO 计算、错误预算、部署频率评估都会失去意义。本章聚焦 SLI 的选取原则、四大黄金信号、自定义业务 SLI 的设计方法,以及生产级的采集与聚合策略。
4.1 四大黄金信号:系统可观测性的核心维度
Google SRE 团队提出的“四大黄金信号”是基础设施与微服务 SLI 的首选框架。每个信号对应一类典型的故障模式,组合使用可覆盖 90% 以上的系统异常场景。
| 黄金信号 | 核心关注点 | 典型 SLI 示例 | 常见故障模式 |
|---|---|---|---|
| 延迟 (Latency) | 请求处理耗时,区分成功与失败请求 | p99 延迟 < 200ms;平均延迟 < 50ms | 慢查询、网络抖动、资源争抢 |
| 流量 (Traffic) | 系统负载水平,通常用请求速率衡量 | QPS < 10000;带宽利用率 < 80% | 突发峰值、限流触发、容量不足 |
| 错误 (Errors) | 显式错误(HTTP 5xx)与隐式错误(错误响应体) | 错误率 < 0.1%;可用性 > 99.9% | 代码缺陷、依赖故障、配置错误 |
| 饱和度 (Saturation) | 资源使用程度,越接近上限越危险 | CPU 使用率 < 80%;内存使用率 < 75% | 内存泄漏、连接池耗尽、磁盘满 |
工程经验:延迟和错误是最常用的两个黄金信号,但饱和度往往是“慢病”的根源。建议至少将延迟、错误、饱和度三者纳入核心 SLI 池,流量作为辅助扩容信号。
4.2 自定义业务 SLI:从技术指标到业务价值
黄金信号解决的是“系统是否健康”,但平台工程还需要回答“业务是否正常”。自定义业务 SLI 将技术指标映射到用户体验或业务流程,是 SLO 与业务对齐的关键。
4.2.1 业务 SLI 设计原则
- 用户视角优先:SLI 应反映用户实际感知,而非内部组件状态。例如“登录成功率”优于“认证服务可用性”。
- 可量化可采集:每个业务 SLI 必须有明确的计数器和测量点,避免模糊描述。
- 覆盖关键路径:优先选取用户核心流程(下单、支付、搜索)作为 SLI 目标。
4.2.2 常见业务 SLI 示例
| 业务场景 | 业务 SLI | 测量方式 |
|---|---|---|
| 电商下单 | 订单创建成功率 > 99.5% | 前端埋点 + 后端确认 |
| 视频播放 | 首帧加载时间 < 1.5s | 客户端上报 + CDN 日志 |
| 搜索推荐 | 搜索结果返回率 > 99.9% | API 响应状态码 + 空结果检测 |
| 支付流程 | 支付回调成功率 > 99.8% | 支付网关回调日志 |
避坑提醒:不要将“内部组件健康度”直接当作业务 SLI。例如“数据库连接池使用率”是饱和度指标,不是业务 SLI。业务 SLI 必须包含“用户是否完成了预期操作”的判断。
4.3 SLI 采集与聚合策略
选好 SLI 后,如何稳定、高效地采集和聚合数据,决定了 SLO 计算的准确性和实时性。以下是生产级采集与聚合的工程实践。
4.3.1 采集策略:多源数据整合
- 服务端埋点:在 API 网关、微服务框架层统一拦截请求,记录延迟、状态码、请求量。推荐使用 OpenTelemetry 标准。
- 客户端埋点:对于前端或移动端场景,通过 RUM(Real User Monitoring)采集真实用户延迟和错误。
- 基础设施指标:通过 Prometheus Node Exporter、cAdvisor 等采集 CPU、内存、磁盘饱和度。
- 业务日志解析:从结构化日志中提取业务成功/失败计数,用于自定义业务 SLI。
4.3.2 聚合策略:时间窗口与统计方法
原始指标需要经过聚合才能用于 SLO 计算。常见的聚合方式包括:
| 聚合类型 | 说明 | 适用场景 |
|---|---|---|
| 滑动窗口 | 固定时间窗口(如 1 小时、1 天)内计算指标 | 错误率、可用性 |
| 百分位聚合 | 计算 p50、p95、p99 延迟 | 延迟 SLI |
| 速率聚合 | 计算每秒/每分钟的请求量或错误量 | 流量、错误率 |
| 直方图聚合 | 将延迟分布到桶中,支持多百分位计算 | 高精度延迟 SLI |
4.3.3 采集与聚合架构
下图展示了一个典型的 SLI 采集与聚合流水线,从多源数据采集到最终 SLO 计算。
4.4 SLI 选取与聚合的工程落地清单
在实际平台工程中,建议按照以下步骤完成 SLI 的选取与配置:
- 识别关键服务与用户路径:列出所有对外暴露的 API 或业务功能,确定优先级。
- 为每个关键路径选取黄金信号:至少包含延迟(p99)、错误率(5xx + 业务错误)、饱和度(CPU/内存)。
- 补充自定义业务 SLI:与产品、业务团队对齐,定义 1-3 个业务核心指标。
- 确定采集方式:服务端埋点优先,客户端 RUM 补充,基础设施指标自动采集。
- 配置聚合规则:延迟使用百分位聚合(p50/p95/p99),错误率使用滑动窗口(1 小时/1 天),饱和度使用速率聚合。
- 验证 SLI 质量:运行 1-2 周,检查 SLI 是否稳定、是否与故障事件吻合、是否存在数据缺口。
关键产出:完成本章后,你应该能输出一份 SLI 定义清单,包含每个服务的黄金信号 SLI、自定义业务 SLI、采集方式、聚合策略,以及对应的 Prometheus 或 OpenTelemetry 配置片段。
4.5 常见问题与避坑指南
| 问题 | 影响 | 解决方案 |
|---|---|---|
| SLI 粒度过粗(如仅用平均延迟) | 掩盖长尾故障,SLO 虚高 | 改用 p95/p99 延迟,配合直方图 |
| 业务 SLI 与黄金信号脱节 | 业务不认可 SLO 结果 | 业务 SLI 必须映射到用户可感知的指标 |
| 采集点缺失导致数据空洞 | SLO 计算不准确,错误预算异常 | 增加冗余采集路径,设置数据完整性告警 |
| 聚合窗口过短导致抖动 | SLO 频繁触发告警,团队疲劳 | 滑动窗口至少 1 小时,业务 SLI 建议 1 天 |
SLI 的选取不是一次性工作。随着服务演进和业务变化,SLI 需要定期复审和调整。下一阶段将基于本章定义的 SLI,进入 SLO 目标设定与错误预算计算。