3. SLI分类与选择

在构建服务等级指标(SLI)时,首先需要明确指标的类别。Google SRE 经典体系将 SLI 归纳为五大黄金信号:可用性、延迟、吞吐量、错误率 和 饱和度。正确分类是后续定义 SLO 和设计误差预算的前提。

核心原则: 每个 SLI 必须对应一个明确的“好事件”定义。例如,“可用性”的好事件是“请求成功”,“延迟”的好事件是“响应时间 ≤ 阈值”。

3.1 五大 SLI 分类详解

分类 定义 典型测量方式 常见陷阱
可用性 服务能够正常处理请求的时间比例或请求比例。 成功请求数 / 总请求数;或正常运行时间 / 总时间。 忽略健康检查端点;将 4xx 错误计入不可用。
延迟 服务响应请求所花费的时间。 百分位数(p50, p95, p99);通常以毫秒为单位。 仅使用平均值;未区分客户端与服务器端延迟。
吞吐量 系统在单位时间内处理的请求量或数据量。 每秒请求数(RPS)、每秒事务数(TPS)、每秒字节数。 与并发数混淆;未考虑请求大小差异。
错误率 请求处理失败的比率。 HTTP 5xx 错误数 / 总请求数;或业务逻辑错误数。 仅监控显式错误;忽略隐式错误(如返回 200 但数据错误)。
饱和度 服务资源被使用的程度,通常反映容量瓶颈。 CPU 使用率、内存使用率、队列深度、连接池占用率。 使用 100% 作为唯一阈值;忽略软限制(如 GC 压力)。
选择优先级: 对于用户可见的在线服务,推荐优先定义 可用性 和 延迟 的 SLI;对于批处理或数据管道,吞吐量 和 错误率 更为关键;饱和度 通常作为预警指标,辅助容量规划。

3.2 SLI 分类与选择流程

选择正确的 SLI 需要遵循系统化的步骤,避免主观臆断。以下流程帮助团队从用户旅程出发,逐步收敛到可测量的指标。

  1. 识别用户关键操作: 列出用户最常执行或最重要的操作(如登录、搜索、下单)。
  2. 映射到系统组件: 将每个操作分解为后端依赖(API 网关、数据库、缓存)。
  3. 选择黄金信号: 对每个组件,从五大分类中选取 1-2 个最能反映用户体验的指标。
  4. 定义“好事件”: 明确什么算作一次“好”的请求或状态(例如:延迟 ≤ 200ms 且状态码 2xx)。
  5. 验证可测量性: 确认指标可以从现有监控系统(Prometheus、Datadog)中提取,且采集成本可控。
SLI 分类与选择决策流程 SLI 分类与选择决策流程 ① 用户关键操作 ② 映射系统组件 ③ 选择黄金信号 可用性 延迟 吞吐量 错误率 饱和度 ④ 定义“好事件” ⑤ 验证可测量性

3.3 实战案例:电商下单流程的 SLI 选择

以电商平台的“用户下单”操作为例,展示如何为不同组件选择合适的 SLI 分类。

系统组件 推荐 SLI 分类 具体指标定义 选择理由
前端 / API 网关 可用性、延迟 HTTP 请求成功率 ≥ 99.9%;p99 延迟 ≤ 500ms 直接面向用户,可用性和延迟直接影响转化率。
订单服务 错误率、延迟 业务错误率 ≤ 1%;p95 延迟 ≤ 200ms 业务逻辑复杂,需区分系统错误与业务错误。
库存数据库 饱和度、延迟 连接池使用率 ≤ 80%;p99 查询延迟 ≤ 50ms 数据库是常见瓶颈,饱和度预警可提前扩容。
支付回调 吞吐量、错误率 处理能力 ≥ 1000 TPS;回调失败率 ≤ 0.1% 大促期间流量突增,吞吐量是核心关注点。
常见误区: 不要试图为每个组件定义所有五个 SLI。过多的指标会导致监控噪音和运维成本上升。每个组件选择 1-2 个最关键的信号即可。

3.4 饱和度 SLI 的深入理解

饱和度是五个黄金信号中最容易被误解的一个。它不直接衡量用户体验,而是衡量系统距离容量极限的程度。饱和度 SLI 通常作为前兆指标,在可用性或延迟恶化之前发出预警。

  • CPU 饱和度: 不仅看 CPU 使用率,还要看 CPU 运行队列长度。当运行队列持续超过 vCPU 数量的 2 倍时,通常意味着饱和。
  • 内存饱和度: 关注交换(swap)使用率和 OOM Killer 事件。即使内存使用率未到 100%,频繁的页面交换也会导致性能急剧下降。
  • I/O 饱和度: 磁盘 I/O 等待时间和队列深度是关键指标。对于数据库,I/O 饱和度往往比 CPU 更早成为瓶颈。
  • 网络饱和度: 网卡丢包率和缓冲区溢出是典型信号。对于微服务架构,网络饱和度可能表现为连接超时。
饱和度 SLI 的层次与预警关系 饱和度 SLI 的层次与预警关系 资源层(CPU / 内存 / 磁盘 I/O / 网络) 指标:使用率、队列深度、丢包率、交换率 饱和度 SLI(前兆指标) 阈值:CPU 队列 > 2x vCPU / 连接池 > 80% 用户体验影响(延迟增加 / 错误率上升 / 可用性下降) 响应:自动扩容 / 限流 / 降级 预警价值 饱和度恶化 → 延迟增加 → 错误率上升 → 可用性下降 提前 5-15 分钟 触发扩容动作

3.5 选择 SLI 的检查清单

在最终确定 SLI 之前,建议团队对照以下清单进行评审,确保指标的有效性和可操作性。

  • 用户相关性: 该 SLI 是否直接或间接反映用户体验?如果指标变差,用户是否能感知到?
  • 可测量性: 指标是否可以从现有监控基础设施中可靠采集?采集频率是否足够(通常 1 分钟粒度)?
  • 可区分性: 指标能否区分“好”与“坏”事件?阈值是否明确且合理?
  • 可操作性: 当 SLI 违反 SLO 时,团队是否有明确的响应流程或自动化修复手段?
  • 避免代理指标: 是否使用了间接指标代替直接指标?例如,用 CPU 使用率代替请求延迟,这可能导致误判。
最佳实践: 初始阶段为每个服务定义 2-3 个 SLI,运行一个季度后根据实际告警和事故复盘进行调整。SLI 不是一成不变的,它应该随着系统架构和用户需求的变化而演进。