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 计算。

SLI 采集与聚合流水线 SLI 采集与聚合流水线 服务端埋点 客户端 RUM 基础设施指标 业务日志 统一采集层(OpenTelemetry Collector / Prometheus Server) 聚合层(滑动窗口 / 百分位 / 速率 / 直方图) SLO 计算引擎(Thanos / Cortex / 自研)

4.4 SLI 选取与聚合的工程落地清单

在实际平台工程中,建议按照以下步骤完成 SLI 的选取与配置:

  1. 识别关键服务与用户路径:列出所有对外暴露的 API 或业务功能,确定优先级。
  2. 为每个关键路径选取黄金信号:至少包含延迟(p99)、错误率(5xx + 业务错误)、饱和度(CPU/内存)。
  3. 补充自定义业务 SLI:与产品、业务团队对齐,定义 1-3 个业务核心指标。
  4. 确定采集方式:服务端埋点优先,客户端 RUM 补充,基础设施指标自动采集。
  5. 配置聚合规则:延迟使用百分位聚合(p50/p95/p99),错误率使用滑动窗口(1 小时/1 天),饱和度使用速率聚合。
  6. 验证 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 目标设定与错误预算计算。