Observability and reliability
RED, USE and dashboards
Three frameworks for choosing what to graph, and a dashboard layout that answers "is this service okay?" in one screen. RED on top, USE underneath.
You rarely need a hundred metrics on day one. Three frameworks cover nearly every service and host. The four golden signals are latency, traffic, errors and saturation. RED is the request-driven version: rate, errors and duration. USE covers resources: utilization, saturation and errors. A good dashboard puts RED at the top and USE underneath, so you can see both the symptom and the likely cause.
The big idea
RED tells you whether users are hurting. USE tells you where the pressure is. They answer different questions, and each one alone can mislead. RED without saturation misses a service that is about to fall over. USE without RED pages on busy CPUs that still serve users well.
Walking through it
The service row answers "is this service okay?" with four panels, from the same histogram:
- Rate: requests per second, stacked or split by status class.
- Errors: the error ratio, or the 5xx rate.
- Duration: p50, p95 and p99 from one histogram. See histograms and percentiles.
- Saturation: thread-pool wait, database connections in use, or queue depth.
Drill-downs sit below, in their own rows or linked boards. They include RED per endpoint for the top routes, latency for each dependency, and USE for the pods and nodes behind the service.
Example
For a checkout API at about 800 requests per second, the overview shows a rate of 800, an error ratio of 0.12%, p50 of 40 ms, p99 of 180 ms, and a database pool wait p99 of 2 ms. After a bad deploy, the rate and error ratio are unchanged, but p99 is 900 ms and the pool wait is 700 ms. RED says users are slow. USE on the pool says where to look. That is a ten-second read.
Two habits make a dashboard trustworthy:
- Use explicit units. Mixing
duration_msandduration_secondson adjacent panels causes misreadings. Prefer seconds for Prometheus latency. - Overlay deploy markers. The fastest latency question is still "what changed?" A marker on every graph answers it without archaeology.
Avoid fifty panels of "maybe useful someday", mixing unrelated services on one board, and duplicate panels whose queries differ slightly.
Common mistakes
- Building the dashboard with CPU first. Start with RED. Users are the symptom.
- Two panels for the same thing with different PromQL. They drift, and people stop trusting either.
- Boards no one opens. Delete them after a quarter without views.
Check yourself
- Rate and error ratio are normal, but p99 jumped. Which framework tells you that users are slow? RED. The duration panel shows the users are slow even though nothing is failing.
- Your DB pool wait is high after the same jump. What does that point to? Saturation in a resource behind the service. Use USE on the pool to find where the wait comes from.
Key takeaways
- RED for the service, USE for the resources. Put RED on top.
- A service row of four panels answers "is it okay?" in one screen.
- Annotate deploys and use explicit units on every panel.
Further learning
Resource checks in more depth are in Linux performance analysis. Alerts built on the same signals are in alerting on symptoms.
Monitoring Distributed Systems (Google SRE book)SRE management techniques | How Google scales team collaborations and management to ensure operational excellence across distributed teams.sre.googleRelated
Metrics, dashboards and alerting
Golden signals, RED and USE, Prometheus histograms and alerts that page you only when users are hurting.
Histograms and fleet percentiles
Why you cannot average p99 latency across pods, and how to aggregate histogram buckets first and then take the quantile. Summaries cannot be merged, so they are the wrong tool for fleet SLOs.
Linux performance analysis
The USE method and the 60-second checklist for finding why a box is slow, covering CPU, memory, disk, network and the container limits that look like application bugs.