什么是 RED 方法
RED 方法是面向服务的监控三件套:请求速率(Rate)、错误数(Errors)与请求耗时(Duration)。它由 Tom Wilkie 提出,适合微服务的服务级看板。与 USE 的资源视角互补:RED 回答「用户是否受影响」,USE 回答「哪个资源是瓶颈」,两者并排展示才能既看到现象又找到根因。
基本信息
| 三要素 | Rate 请求速率、Errors 错误数或比例、Duration 耗时分布 |
|---|---|
| 推荐口径 | 延迟用 P95 与 P99,而不是平均值 |
| 适用层级 | 服务、接口、依赖调用、客户端版本等维度 |
| 配套面板 | 每个服务并列展示三组曲线,配错误率与延迟分位告警 |
典型使用场景
- 服务健康看板:每个微服务一个面板,先看三要素是否有异常
- 发布验证:发布后对照错误率与 P99 变化,判断是否引入退化
- 容量规划:用速率趋势推算峰值与资源需求
- 接口分级:按接口维度拆分指标,识别是整体劣化还是单接口问题
- 依赖排查:区分自身处理耗时与下游调用耗时,快速定位责任方
- 故障复盘:用错误率突增的时间点对齐变更记录
三要素读法
| 指标 | 含义 | 异常信号 |
|---|---|---|
| Rate | 每秒请求数(按服务与接口) | 速率骤降可能是上游熔断或调用失败 |
| Errors | 失败请求数或比例(按错误码分类) | 5xx 比例上升直接反映用户受损 |
| Duration | 延迟分布(P50/P95/P99) | 均值正常但 P99 上升说明长尾恶化 |
指标查询示意(PromQL)
指标查询示意(PromQL)
# Rate:每秒请求数,按服务聚合
sum(rate(http_requests_total[5m])) by (service)
# Errors:错误率(5xx 占比)
sum(rate(http_requests_total{code=~"5.."}[5m])) by (service)
/ sum(rate(http_requests_total[5m])) by (service)
# Duration:P99 延迟
histogram_quantile(0.99,
sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service))延迟用平均值会掩盖长尾:高并发场景下单条慢请求对均值影响有限,但对用户体验影响直接,默认展示 P95 与 P99。
告警基于错误率与延迟分位设置,并对单点毛刺设持续时间条件,减少无效告警导致的告警疲劳。
面板组织建议
- 按服务分层:服务总览看三要素曲线,下钻到接口维度再定位具体请求
- 按依赖拆分:自身耗时与下游调用耗时分开,避免把下游问题算在自己头上
- 按版本标注:发布事件打在时间轴上,异常曲线可与变更直接对齐
- 按客户端区分:移动端与网页端分开统计,避免一端劣化被另一端稀释