Stackbook Logo
observabilityestablished · low operational burden

RED Method

Also known as: rate-errors-duration

Intent

Instrument every microservice with request Rate, Errors, and Duration to get a consistent view of service health.

Problem

In a fleet of microservices each team invents its own metrics, so cross-service triage is slow. Engineers need a minimal, uniform instrumentation recipe that reflects what callers experience.

Forces

  • •Many services owned by many teams
  • •Callers care about requests, not internals
  • •Instrumentation must be cheap to adopt
  • •Metrics must be comparable across services

Solution

Overview

RED was popularized by Tom Wilkie for microservices. It keeps only the three measurements that describe a request-serving service from the caller's point of view: Rate, Errors, Duration. It is a subset of the golden signals, tuned for services rather than infrastructure.

How it works

Middleware or a mesh sidecar wraps every handler and updates three metrics:

http_requests_total{service,route,method,code}      # Rate and Errors
http_request_duration_seconds_bucket{service,route} # Duration

Rate     = sum(rate(http_requests_total[1m])) by (service)
Errors   = sum(rate(http_requests_total{code=~"5.."}[1m]))
           / Rate
Duration = histogram_quantile(0.95,
           sum(rate(http_request_duration_seconds_bucket[5m])) by (le,service))

A single dashboard row per service shows the three graphs. When a RED graph degrades, the on-call engineer pivots to the resources behind the service using the USE method, and to traces for individual slow requests.

Pitfalls

  • Using the raw URL as a label. Use the route template such as /users/:id, or the metric explodes in cardinality.
  • Counting every 4xx as an error. Client mistakes should not page the service owner; count 5xx and timeouts.
  • Measuring duration only inside the handler. Time spent queued before the handler runs is invisible, so measure at the load balancer or mesh as well.
  • Using summaries instead of histograms. Summaries cannot be aggregated across instances.

Key takeaways

  • RED is the service-level counterpart to USE.
  • Provide it by default via middleware so every service has it on day one.
  • Use histograms and route templates.
  • Pair with USE for diagnosis and with SLOs for targets.
  • Alert on RED at the service boundary and keep per-route graphs for diagnosis.

✓ When to Use

  • •Request-driven microservices and APIs
  • •Platform teams standardizing telemetry
  • •Service-level dashboards for on-call

✗ When Not to Use

  • •Resources such as disks, hosts, or queues (use USE)
  • •Batch jobs without a request concept
  • •As the sole signal when saturation drives incidents

Pros

  • +Trivial to explain and automate
  • +Uniform across services
  • +Maps directly to user experience

Cons

  • −Says nothing about resource exhaustion
  • −Route labels need template discipline
  • −Endpoint-level histograms add storage cost

Cost Profile

Infrastructure

Low - three metrics per route

Operational

Low - middleware owned by platform

Cognitive

Low - easy to teach

Failure Modes

  • Raw URL paths used as labels, exploding cardinality

  • Client errors (4xx) counted as service errors, causing false alerts

  • Duration measured at the app instead of at the edge, hiding queueing delay

Real-World Examples

Alternatives

    Related Patterns

    • golden-signals
    • observability
    • sli-slo

    Competency Domains

    reliability ops