Operations Updated

Four golden signals, RED and USE

Three widely used checklists for what to monitor. The four golden signals (latency, traffic, errors, saturation) and RED (rate, errors, duration) describe request-driven services from the user’s side; USE describes resources such as CPUs, disks and queues. Most systems need a service view and a resource view.

On this page
  1. The four golden signals
  2. The RED method
  3. The USE method
  4. Which to use
FrameworkSignalsApplies toOrigin
Four golden signalsLatency, traffic, errors, saturationUser-facing servicesGoogle SRE book
REDRate, errors, durationRequest-driven services, especially microservicesTom Wilkie
USEUtilization, saturation, errorsEvery hardware or software resourceBrendan Gregg

The four golden signals

Latency
Time to serve a request. Track successful and failed requests separately: a fast error should not make latency look good, and a slow error is worse than a fast one. Use distributions or the share of requests under a threshold, not averages.
Traffic
Demand on the system: requests per second for an API, sessions or transactions for others, bytes for streaming.
Errors
Rate of failed requests, whether explicit (HTTP 5xx), implicit (a 200 with the wrong content) or by policy (slower than your latency commitment).
Saturation
How full the service is: the most constrained resource, such as CPU, memory, I/O, connection pool or queue depth. Many systems degrade well before 100%, and saturation predicts problems before they show as errors.

The RED method

RED trims the golden signals to three per-service metrics that are easy to standardise across every microservice, so every dashboard looks the same:

Saturation is left to the resource view. Example PromQL for a service instrumented with a request counter and a latency histogram:

# Rate
sum by (service) (rate(http_requests_total[5m]))

# Errors (ratio)
sum by (service) (rate(http_requests_total{code=~"5.."}[5m]))
  / sum by (service) (rate(http_requests_total[5m]))

# Duration: 99th percentile
histogram_quantile(0.99,
  sum by (service, le) (rate(http_request_duration_seconds_bucket[5m])))

# Duration: share of requests taking 300 ms or less (SLI-friendly)
sum by (service) (rate(http_request_duration_seconds_bucket{le="0.3"}[5m]))
  / sum by (service) (rate(http_request_duration_seconds_count[5m]))

These use classic Prometheus histograms. The last query needs a bucket boundary at exactly 0.3 seconds, and le means “less than or equal”, so it counts requests of 300 ms or less; choose bucket boundaries to match your latency SLO thresholds. histogram_quantile interpolates within buckets, so it estimates the percentile. Native histograms use different expressions.

The USE method

For every resource, check:

USE is a methodology for performance investigation: walk every resource systematically instead of guessing. Typical Linux resources:

ResourceUtilizationSaturationErrors
CPUBusy time per CPU and overallRun-queue length above CPU count; CPU pressure (PSI); throttling in containersMachine check exceptions (rare)
MemoryUsed vs available memorySwapping, page scanning, memory pressure (PSI), OOM killsAllocation failures; ECC errors
DiskDevice busy timeWait queue length; I/O latency; I/O pressure (PSI)Device and filesystem errors
NetworkThroughput vs link speedDrops, overruns, retransmits; socket backlogInterface errors
Connection pool, thread pool, queueIn use ÷ sizeWaiters; queue ageTimeouts; rejected work

Which to use

Sources: Google, Site Reliability Engineering, ch. 6 “Monitoring Distributed Systems”; Julie Dam, “The RED Method: How to instrument your services”, reporting Tom Wilkie’s talk; Brendan Gregg, “The USE Method”.