ObservabilityII · Production Monitoring FundamentalsMethodologies
RED Methodology: Rate, Errors, Duration
What you'll learn
- Define Rate, Errors, Duration in service terms
- Apply RED to HTTP APIs, gRPC services, queues
- Distinguish RED from USE
- Construct the SLI pair for a typical service
Prerequisites
Verified against Prometheus 2.55.x · Alertmanager 0.28.x · node_exporter 1.8.x · blackbox_exporter 0.26.x · Grafana 11.x · Loki 3.x · Tempo current · OpenTelemetry Collector 0.110.x · Grafana Alloy current · Docker Engine 28.x · Ubuntu 24.04 LTS · Debian 12 (Bookworm) · RHEL / Rocky / AlmaLinux 9.x · 2026-08-13
RED — Rate, Errors, Duration — is a methodology invented by Tom Wilkie at Weaveworks for distributed services. Every service is described by three metrics: how many requests per second, what fraction fail, and how long the successful requests take.
RED is the methodology for services. USE is the methodology for hosts. The two together cover a distributed system.
What RED is
For every service endpoint:
- Rate. Requests per second.
- Errors. Fraction or count of requests that fail.
- Duration. Time taken to complete each request (histogram).
A RED pass on a service produces:
Rate:
rate = sum by (route, instance) (
rate(http_requests_total[5m])
)
Errors:
rate = sum by (route, instance, status) (
rate(http_requests_total{status=~"5xx"}[5m])
)
Duration:
histogram =
http_request_duration_seconds_bucket{le="..."}
p99 = histogram_quantile(0.99,
sum by (le, route) (rate(http_request_duration_seconds_bucket[5m]))
)
RED is the canonical layer of instrumentation for a service. The instrumentation is typically one or two lines in the framework (HTTP server middleware, gRPC interceptor) and produces counters and histograms that the platform can ingest.
Why RED is the user-visible layer
Every dimension in RED is user-visible:
- Rate. A user-visible metric indirectly; users see spikes and dips, but rate itself is internal.
- Errors. A user-visible metric directly: errors are what the user sees.
- Duration. A user-visible metric directly: latency is what the user feels.
The combination of the three produces the user-visible state. USE alone does not produce the user-visible state. RED is what anchors the user-visible SLO pair (availability, latency).
How RED maps to SLOs
The canonical SLO pair for an HTTP API:
Availability SLO:
SLI = sum(rate(http_requests_total{status!~"5xx"}[30d]))
/ sum(rate(http_requests_total[30d]))
Target: SLI >= 0.999
Window: 30 days
Latency SLO:
SLI = sum(rate(http_request_duration_seconds_bucket{le="0.5"}[30d]))
/ sum(rate(http_request_duration_seconds_count[30d]))
Target: SLI >= 0.99
Window: 30 days
Both SLIs use the RED primitives (requests_total and
request_duration_seconds_bucket). The SLO construction is
mechanical once the primitives are instrumented.
USE vs RED
| Layer | Methodology | What it describes |
|---|---|---|
| Service | RED | rate, errors, duration |
| Host | USE | utilisation, saturation, errors |
| Network | NetUSE | bandwidth, drops, errors |
USE and RED are complementary, not competing. A complete platform layers:
- Service-level: RED on every HTTP API / RPC service / queue producer-consumer chain.
- Resource-level: USE on every host and infrastructure component.
- Network-level: NetUSE on every link.
The two methodologies operate at different layers. The on-call engineer consults the service-level RED first to find which service is failing; consults the resource-level USE second to find which resource is exhausted.
Choosing the right RED pair
For an HTTP API: rate + errors + duration (the full trio). For a job processor: rate of jobs + error rate + processing duration. For a queue producer: produced rate + publish error rate + publish latency. For a queue consumer: consumed rate + processing error rate + processing duration.
The shape varies by service type but the trio is the same.
RED instrumentation
Three instrumentation primitives the team must own:
- Counter
requests_total{status=...}— every completed request, labeled by status code. - Histogram
request_duration_seconds{...}— every request’s duration. - Middleware/interceptor — the framework glue that records the metrics.
Most languages have a Prometheus client library that provides
default middleware (Go: promhttp.InstrumentHandler*,
Python: prometheus-client, Node: prom-client,
Java: micrometer-registry-prometheus). The pattern is
standard.
Production guidance
- Instrument RED on every service at the framework layer. The instrumentation should be automatic for every endpoint, not manual per endpoint.
- Use shared label sets across
requests_totalandrequest_duration_secondsso aggregation in PromQL works trivially. - Pair every RED SLO with a corresponding RED alert: a burn-rate alert at 2× over a 1 h window is a typical page.
- Provide dashboards that put RED front-and-centre; USE is secondary.
- Audit the metrics regularly: an endpoint that does not appear in the RED dashboard is unmonitored.
Verification
You should be able to answer:
- What does RED stand for?
- Why is RED the user-visible layer that USE is not?
- Construct the SLO pair from RED primitives.
- Why are USE and RED complementary, not competing?
Quiz
Knowledge check · 8 questions
Q1. What is the primary purpose of red methodology: rate, errors, duration?
Q2. Which failure mode of red methodology: rate, errors, duration is most operationally costly?
Q3. Production verification should run on production hosts.
Q4. First response when red methodology: rate, errors, duration misbehaves?
Q5. Name one signal that confirms red methodology: rate, errors, duration is healthy.
Q6. Which of these are validation steps?
Q7. Right discipline when changing in production?
Q8. Telemetry usefulness requires:
Passing score: 75%. Answers are checked in this browser.