4. SLI 重定义方法论:USE 方法、RED 方法、四步重定义法
在 SRE 实践中,SLI 的选择直接决定了 SLO 的准确性与可操作性。错误的 SLI 会导致“指标好看,系统却挂了”的假阳性,或“指标报警,业务却正常”的假阴性。本章系统讲解三种主流的 SLI 重定义方法论:USE 方法(资源视角)、RED 方法(服务视角)以及四步重定义法(通用流程),帮助你在不同场景下精准定位并重构 SLI。
4.1 USE 方法:资源饱和与错误检测
USE 方法(Utilization、Saturation、Errors)由 Brendan Gregg 提出,主要用于基础设施资源层的 SLI 定义。其核心思想是:对于每一个资源(CPU、内存、磁盘、网络),分别检查其利用率、饱和度和错误率。
| 维度 | 定义 | 典型 SLI 示例 | 阈值参考 |
|---|---|---|---|
| U (Utilization) | 资源被占用的平均时间比例 | CPU 使用率、内存占用率、磁盘 IOPS 利用率 | < 80% 为健康,> 90% 需关注 |
| S (Saturation) | 资源无法及时服务的排队程度 | CPU 运行队列长度、磁盘 IO 等待队列、网络缓冲区积压 | 队列长度持续 > 0 表示饱和 |
| E (Errors) | 资源操作失败的次数或比例 | 磁盘读写错误计数、网络丢包率、内存 ECC 错误 | 任何非零错误都应视为 SLI 降级 |
实战建议:USE 方法最适合裸金属、虚拟机、容器节点的监控。当应用出现延迟抖动时,先检查 USE 三要素,往往能快速定位到资源瓶颈。
4.2 RED 方法:请求维度的黄金三角
RED 方法(Rate、Errors、Duration)由 Tom Wilkie 提出,专为微服务与 API 网关设计。它将 SLI 聚焦在请求的生命周期上,是构建服务级别指标(Service Level Indicators)最直接的方法。
- R (Rate) — 请求速率:单位时间内处理的请求数(RPS/QPS)。用于衡量服务负载与吞吐量。
- E (Errors) — 错误率:请求失败的占比(HTTP 5xx、业务错误码)。直接反映服务正确性。
- D (Duration) — 延迟分布:请求响应时间的百分位值(p50、p95、p99)。反映服务响应速度。
RED vs USE 对比:USE 回答“资源够不够?”,RED 回答“服务好不好?”。在分层监控中,通常上层用 RED,下层用 USE,形成完整的可观测性栈。
4.3 四步重定义法:从原始指标到精准 SLI
USE 和 RED 提供了 SLI 的分类框架,但实际生产中的指标往往混杂、冗余、噪声多。四步重定义法提供了一套可执行的流程,将原始指标逐步提炼为可用于 SLO 计算的精确 SLI。
步骤一:识别(Identify)
列出系统所有可观测的原始指标。包括基础设施指标(CPU、内存)、中间件指标(队列深度、连接数)、应用指标(请求数、错误码、延迟)。此阶段不设限,目标是穷举。
步骤二:筛选(Filter)
根据以下原则剔除无效指标:
- 业务相关性:该指标是否直接影响用户体验?
- 可测量性:指标是否可稳定采集,且误差在可接受范围内?
- 可区分性:指标能否区分“正常”与“异常”?
- 可操作性:指标降级时,团队是否有明确的响应动作?
步骤三:聚合(Aggregate)
将筛选后的指标按时间窗口和维度进行聚合。常见聚合方式:
| 聚合类型 | 说明 | 示例 |
|---|---|---|
| 时间窗口聚合 | 将原始数据点按 1m/5m/1h 窗口计算均值或百分位 | 原始延迟 → 5 分钟窗口 p99 延迟 |
| 维度聚合 | 按服务、实例、区域、用户类型等维度分组 | 所有实例错误率 → 按可用区聚合的错误率 |
| 比率聚合 | 将数值转换为比率,便于设定 SLO | 错误请求数 / 总请求数 → 错误率 |
步骤四:验证(Validate)
使用历史数据回测 SLI 的有效性:
- 假阳性测试:SLI 报警时,是否真的发生了业务受损?
- 假阴性测试:业务受损时,SLI 是否一定能捕捉到?
- 稳定性测试:SLI 在正常运行时,波动是否在可接受范围内?
常见陷阱:跳过“验证”步骤直接上线 SLI,是导致 SLO 误差预算失效的首要原因。务必使用至少 2-4 周的历史数据进行回测,确认 SLI 与业务体验的关联性。
4.4 方法论选择矩阵
在实际项目中,应根据监控对象和团队成熟度选择合适的方法论。下表总结了三种方法的适用场景与产出物:
| 方法论 | 适用层级 | 核心维度 | 典型产出 SLI | 推荐场景 |
|---|---|---|---|---|
| USE | 基础设施层 | 利用率、饱和度、错误 | CPU 利用率 < 80%、磁盘队列长度 = 0 | 物理机、虚拟机、容器节点、网络设备 |
| RED | 服务/应用层 | 速率、错误、延迟 | 请求错误率 < 1%、p99 延迟 < 200ms | 微服务、API 网关、消息队列消费端 |
| 四步重定义法 | 全层级(通用流程) | 识别-筛选-聚合-验证 | 经过验证的精确 SLI 定义文档 | 新系统接入 SLO、现有 SLI 重构、指标治理 |
最佳实践:推荐组合使用。先用四步重定义法建立 SLI 治理流程,再根据监控对象选择 USE(资源层)或 RED(服务层)作为具体指标框架。例如:对数据库集群,底层用 USE 监控磁盘和 CPU,上层用 RED 监控查询延迟和错误率。