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 在服务调用链路中的位置与相互关系:
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 赔偿。