RED 方法

面向服务的指标三件套:请求速率(Rate)、错误数(Errors)与请求耗时分布(Duration);适合微服务监控面板,与 USE 的资源视角互补。

什么是 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。
告警基于错误率与延迟分位设置,并对单点毛刺设持续时间条件,减少无效告警导致的告警疲劳。

面板组织建议

  • 按服务分层:服务总览看三要素曲线,下钻到接口维度再定位具体请求
  • 按依赖拆分:自身耗时与下游调用耗时分开,避免把下游问题算在自己头上
  • 按版本标注:发布事件打在时间轴上,异常曲线可与变更直接对齐
  • 按客户端区分:移动端与网页端分开统计,避免一端劣化被另一端稀释

易错点

  • 只有资源指标没有服务指标,用户侧影响不可见,故障发现依赖投诉
  • 延迟用均值表达,长尾恶化被掩盖,容量评估失真
  • 错误不按类型区分,4xx 与 5xx 混在一起,无法判断是否用户受损
  • 指标维度缺失接口与依赖信息,定位时要靠猜或翻日志

数据来源与参考

  • Weaveworks 博客:The RED Method
  • Google SRE Book:Monitoring
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌