2. SLI 定义与分类:什么是 SLI、常见的 SLI 类型

2.1 什么是 SLI

SLI(Service Level Indicator,服务等级指标) 是衡量系统或服务某一维度行为质量的定量指标。它是可观测性体系中最底层的“测量探头”,直接回答“系统现在表现如何”这一核心问题。

SLI 必须满足以下三个条件:

  • 可测量:能从监控数据中直接或间接计算得出,例如请求延迟、错误计数。
  • 可对比:能设定目标阈值(SLO),用于判断服务是否达标。
  • 可行动:当 SLI 恶化时,能触发告警或故障排查流程。
实践要点:SLI 不是越多越好。每个服务建议选择 3~5 个最能反映用户体验的核心 SLI,避免指标爆炸。

2.2 四大经典 SLI 类型

业界通常将 SLI 归纳为以下四类,覆盖系统性能、可靠性、容量与资源维度:

SLI 类型 定义 典型口径 常见阈值参考
延迟 请求从发出到收到完整响应的时间 P50 / P95 / P99 延迟(毫秒) P99 < 200ms(在线服务)
错误率 失败请求占总请求的比例 HTTP 5xx / 4xx 占比、gRPC 错误码占比 错误率 < 0.1%
吞吐量 单位时间内系统处理的请求量 RPS(每秒请求数)、TPS(每秒事务数) 不低于基线值的 80%
饱和度 系统资源被消耗的程度 CPU 使用率、内存使用率、连接池占用率 饱和度 < 70%(预留缓冲)

2.3 四类 SLI 的详细说明

2.3.1 延迟(Latency)

延迟是衡量用户体验最直接的指标。通常使用百分位值而非平均值,因为平均值会掩盖长尾请求。例如:

  • P50:50% 的请求在此时间内完成,反映典型体验。
  • P99:99% 的请求在此时间内完成,反映最差体验。
  • P999:用于对延迟极度敏感的场景(如金融交易)。

2.3.2 错误率(Error Rate)

错误率直接反映服务的可用性。定义错误时需明确:

  • 显式错误:HTTP 5xx、gRPC Internal、超时。
  • 隐式错误:返回 200 但业务逻辑失败(如“查询成功但结果为空”)。
常见陷阱:仅监控 HTTP 5xx 会漏掉业务层面的错误。建议在应用层注入自定义错误码,将业务错误纳入 SLI 计算。

2.3.3 吞吐量(Throughput)

吞吐量反映系统的处理能力。当吞吐量异常下降时,通常意味着系统存在瓶颈或故障;当吞吐量异常上升时,可能遭遇流量攻击或代码缺陷导致重复请求。

2.3.4 饱和度(Saturation)

饱和度是预测性指标,用于在系统完全过载前发出预警。常见饱和度指标包括:

  • CPU 使用率(特别是 iowait 占比)
  • 内存使用率(含 page cache)
  • 磁盘 I/O 队列深度
  • 网络带宽使用率
  • 数据库连接池活跃连接数

2.4 SLI 分类关系图

下图展示了四类 SLI 在服务调用链路中的位置与相互关系:

SLI 四类指标在服务调用中的位置 用户 负载均衡 应用服务 数据库 ① 延迟:端到端请求耗时 ② 错误率:失败请求占比 ③ 吞吐量:RPS / TPS ④ 饱和度:CPU / 内存 / 连接池 SLI 分类要点 • 延迟和错误率是面向用户的 SLI,直接反映体验。 • 吞吐量是面向容量的 SLI,反映系统处理能力。 • 饱和度是面向资源的 SLI,用于提前发现过载风险。

2.5 SLI 选择原则与常见误区

选择 SLI 时,建议遵循 USE 方法(Utilization、Saturation、Errors)和 RED 方法(Rate、Errors、Duration)的组合:

  • RED 方法:适用于面向用户的服务层,关注吞吐量(Rate)、错误率(Errors)、延迟(Duration)。
  • USE 方法:适用于基础设施层,关注资源利用率(Utilization)、饱和度(Saturation)、错误(Errors)。
实战建议:对于微服务架构,每个服务至少应包含 1 个延迟 SLI、1 个错误率 SLI 和 1 个饱和度 SLI。吞吐量 SLI 可根据业务流量特征选择性添加。

2.6 SLI 口径定义示例

以下是一个典型的 API 网关 SLI 口径定义:

# 延迟 SLI:P99 延迟
metric: http_request_duration_seconds
aggregation: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))
condition: < 0.2  # 200ms

# 错误率 SLI:5xx 占比
metric: http_requests_total
aggregation: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
condition: < 0.001  # 0.1%

# 饱和度 SLI:CPU 使用率
metric: node_cpu_seconds_total
aggregation: 1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m]))
condition: < 0.7  # 70%

2.7 SLI 与 SLO、SLA 的关系

在质量门禁体系中,SLI 是基础测量单元,SLO 是目标阈值,SLA 是服务承诺。三者关系如下:

概念 角色 示例
SLI 实际测量值 P99 延迟 = 180ms
SLO 目标阈值 P99 延迟 ≤ 200ms(99.9% 的时间)
SLA 对外承诺与补偿 P99 延迟 ≤ 500ms,否则赔偿 10% 月费
关键提醒:SLO 应比 SLA 更严格(通常预留 20%~30% 的缓冲),避免因 SLI 抖动直接触发 SLA 赔偿。