4. SLI 指标设计原则:选择正确的 SLI 与采集方式

SLI(Service Level Indicator,服务等级指标)是 SLO 体系的基石。选择错误的 SLI 会导致 SLO 无法真实反映用户体验,甚至误导运维决策。本节从四大黄金指标出发,阐述 SLI 的设计原则、采集方式与数据源选型。

4.1 四大黄金指标:选择正确的 SLI

Google SRE 实践总结出四个通用 SLI 类别:延迟、错误率、吞吐量、饱和度。每个类别对应不同的用户感知维度,需根据服务类型组合使用。

指标类别 定义 典型测量方式 适用场景
延迟 请求从发出到收到完整响应的时间 P50 / P95 / P99 分位延迟 API 网关、数据库查询、页面加载
错误率 失败请求占总请求的比例 HTTP 5xx 比例 / 业务错误码比例 所有在线服务
吞吐量 单位时间内处理的请求量或数据量 RPS(每秒请求数)、TPS(每秒事务数) 批处理系统、消息队列、CDN
饱和度 资源使用程度与容量上限的比值 CPU 使用率、内存占用、连接池水位 基础设施层、中间件、数据库
设计原则:优先选择面向用户的 SLI(延迟、错误率),而非仅关注内部资源指标(饱和度)。例如,即使 CPU 使用率低于 50%,若 P99 延迟已超过 2 秒,则用户体验已受损。

4.2 SLI 采集方式与数据源

SLI 数据源分为三类:客户端埋点、服务端日志、基础设施监控。不同数据源在准确性、覆盖面和采集成本上存在差异。

数据源类型 采集方式 优势 劣势
客户端埋点 RUM(真实用户监控)、APM Agent 最贴近真实用户体验 受网络波动影响,采样率受限
服务端日志 访问日志、结构化日志、Metrics 端点 数据完整,易于聚合 可能遗漏客户端超时导致的失败
基础设施监控 Prometheus Exporter、CloudWatch、JMX 覆盖资源饱和度,实时性强 无法直接反映用户感知
推荐组合:服务端日志 + 基础设施监控作为主要数据源,客户端埋点作为补充校准。例如,使用 Nginx 访问日志计算延迟和错误率,使用 Prometheus 采集 CPU/内存饱和度。

4.3 SLI 采集架构与数据流

下图展示了一个典型的 SLI 采集架构,从数据产生到 SLO 计算的全链路。

SLI 采集架构与数据流 SLI 采集架构与数据流 客户端埋点 RUM / APM Agent 服务端日志 Nginx / 应用日志 基础设施监控 Prometheus / CloudWatch SLI 采集层 日志采集器 / Exporter / Agent 时序数据库 / 日志存储 Prometheus / Elasticsearch / InfluxDB SLO 计算引擎
避坑提示:不要将基础设施指标直接作为用户侧 SLI。例如,CPU 使用率 90% 不一定意味着请求延迟升高;反之,CPU 使用率 30% 也可能因锁竞争导致高延迟。始终以用户感知指标为主,基础设施指标为辅。

4.4 SLI 设计检查清单

在定义每个 SLI 时,建议对照以下清单进行评审:

  • 用户相关性:该指标是否直接反映用户感受到的服务质量?
  • 可测量性:是否有现成的数据源或采集方式?采集频率是否满足 SLO 窗口要求?
  • 可区分性:能否区分正常流量与异常流量(如爬虫、健康检查)?
  • 稳定性:指标定义是否在较长时间内保持稳定,避免频繁调整?
  • 可操作性:当 SLI 恶化时,团队能否快速定位根因并采取行动?

4.5 常见 SLI 定义示例

服务类型 SLI 名称 定义公式 数据源
HTTP API 延迟 P99 所有成功请求中,第 99 百分位的响应时间 Nginx 访问日志 / APM
HTTP API 错误率 HTTP 5xx 响应数 / 总请求数 × 100% Nginx 访问日志
数据库 查询延迟 P95 所有成功查询中,第 95 百分位的执行时间 慢查询日志 / Prometheus
消息队列 吞吐量 每秒成功投递的消息数 Broker Metrics
CDN 缓存命中率 缓存命中请求数 / 总请求数 × 100% CDN 日志
计算集群 饱和度 CPU 使用率 / 容量阈值 Prometheus Node Exporter
最佳实践:每个 SLO 至少绑定 2 个 SLI(一个用户感知指标 + 一个资源指标)。例如,API 服务的 SLO 可同时监控“P99 延迟 < 500ms”和“CPU 饱和度 < 80%”,前者保障体验,后者预警容量风险。