Skip to content

The Four Golden Signals of Monitoring: Latency, Traffic, Errors, Saturation (2026)

Quick answer: The four golden signals are latency, traffic, errors and saturation: the four metrics Google's Site Reliability Engineering book recommends measuring for every user-facing system. Latency is how long requests take. Traffic is how much demand the system is handling. Errors is the rate of requests that fail. Saturation is how full the system is. The book's guidance is that if you measure all four and page a human when one of them is problematic, or, for saturation, nearly problematic, your service will be at least decently covered by monitoring.

Most monitoring setups grow by accident. Every incident adds a new alert, every new tool adds a new dashboard, and after a few years nobody can say which of the 400 graphs matters at 3 a.m.

The four golden signals are the opposite approach: start with the smallest set of measurements that tells you whether users are being served well, and build everything else around them. The idea comes from the "Monitoring Distributed Systems" chapter of Google's Site Reliability Engineering book, and it has become the default starting point for monitoring services of almost any kind.

This guide explains each signal, how to measure it with example Prometheus queries, how golden signals compare with the RED and USE methods, what the four signals mean for databases, queues, batch jobs and Kubernetes, and how to turn them into alerts that page only when users are affected.

What are the four golden signals?

The four golden signals were introduced in Chapter 6 of Google's Site Reliability Engineering book (2016), "Monitoring Distributed Systems", written by Rob Ewaschuk. They describe a user-facing system from the outside: what users experience and how close the system is to its limits.

Signal

Question it answers

Typical measurement

Example

Latency

How long does it take to serve a request?

Request duration as a distribution (p50, p95, p99), split by success and failure

p99 checkout latency: 420 ms

Traffic

How much demand is the system handling?

Requests per second; for other systems, transactions, sessions or bytes per second

1,200 HTTP requests/second

Errors

How many requests fail?

Failed requests ÷ total requests, including wrong or too-slow responses

0.3% of requests return 5xx

Saturation

How full is the system?

Utilization of the most constrained resource, plus how soon it will run out

Connection pool 85% used; disk full in 6 hours

Two ideas from the chapter explain why these four were chosen.

They measure symptoms, not causes. The book distinguishes between what's broken (the symptom users feel) and why (the cause). Latency, traffic and errors describe symptoms directly. Saturation is the one forward-looking signal: it warns that a symptom is about to appear.

They cover most failure modes with very few metrics. A system can be slow, overloaded, broken or nearly full. Each golden signal catches one of those. Together they give an on-call engineer a reliable first answer to "are users OK?" before any deeper observability work begins.

Why the golden signals matter

Four metrics sounds like too few for a modern system. The value comes from what that small set makes possible:

Benefit

How the golden signals deliver it

Faster detection

Alerts based on user-facing symptoms fire when users are affected, not when an internal metric happens to cross a line. That shortens time to detect.

Faster diagnosis

Seeing all four together narrows the cause in seconds: slow but not failing points somewhere different from failing fast.

Capacity planning

Traffic and saturation trends together show how much headroom is left and when it will run out, before an outage forces the decision.

A shared language

Every service reports the same four things, so on-call engineers can read an unfamiliar team's dashboard during an incident.

Less noise

Four symptom-based signals per user journey replace dozens of cause-based alerts, which is one of the most direct ways to reduce alert fatigue.

A basis for SLOs

Latency and errors map directly to service level indicators, so the same data drives dashboards, alerts and reliability targets.

The four signals in detail

The example queries below use Prometheus with common metric names (http_requests_total, http_request_duration_seconds). Adapt the names and labels to your own instrumentation; the logic carries over to Datadog, Grafana, New Relic or any other tool.

1. Latency

What it is: the time it takes to serve a request.

How to measure it: as a distribution, not an average. Track percentiles such as p50, p95 and p99 over short windows. The average hides the slow tail: if 1% of requests take ten seconds, the mean barely moves, but one user in a hundred is having a bad experience.

histogram_quantile(0.99,
  sum by (le) (rate(http_request_duration_seconds_bucket{job="checkout"}[5m])))

The trap: mixing the latency of successful and failed requests. A request that fails fast with a 500 error can make your latency graph look better during an outage. The SRE book's advice is to track error latency separately, because a slow error is even worse than a fast one.

2. Traffic

What it is: the demand placed on the system, in whatever unit fits it.

How to measure it: requests per second for web services; transactions or queries per second for databases; messages per second for queues; concurrent sessions or bytes per second for streaming and network systems. Break it down by endpoint or request type where the mix matters.

sum(rate(http_requests_total{job="checkout"}[5m]))

The trap: watching only for spikes. A sudden drop in traffic is often the clearest sign of an outage, because users can't reach you at all and so stop generating requests, or errors upstream stop requests from arriving.

3. Errors

What it is: the rate of requests that fail.

How to measure it: as a ratio of failed to total requests. The SRE book names three kinds of failure:

  • Explicit: the request returns an error, such as an HTTP 500.

  • Implicit: the request returns success but the wrong content, such as an HTTP 200 with an empty or incorrect body.

  • By policy: the request succeeds but breaks a commitment, such as a response slower than the one second you promised.

sum(rate(http_requests_total{job="checkout", code=~"5.."}[5m]))
  /
sum(rate(http_requests_total{job="checkout"}[5m]))

The trap: counting only explicit errors. Implicit errors don't appear in status codes, so they need end-to-end checks or application-level validation to catch them.

4. Saturation

What it is: how "full" the system is, measured against its most constrained resource: memory for a memory-bound service, I/O for a database, connections for a service behind a fixed pool.

How to measure it: current utilization of that resource, plus a prediction of when it will run out. The SRE book's example is a database that will fill its disk in four hours.

predict_linear(node_filesystem_avail_bytes{mountpoint="/var/lib/postgresql"}[6h], 4 * 3600) < 0

The trap: alerting at 100%. Most systems degrade well before full utilization, and rising latency is often the first sign of saturation. Set targets below 100%, and treat a sharp rise in p99 latency as a saturation warning too.

Reading the four signals together

Each signal on its own is ambiguous. High traffic can be good news, and rising saturation can be normal growth. The diagnostic power comes from the combination. These are the patterns on-call engineers see most often:

Latency

Traffic

Errors

Saturation

Likely meaning

First place to look

↑

↑

→

↑

The system is under more load than it can serve comfortably

Capacity: scale out, or check autoscaling

↑

→

→

↑

Something is consuming resources without more demand: a leak, a heavy query, a noisy neighbor

Recent deploys, long-running queries, memory growth

↑

→

→

→

A slow dependency: database, cache, third-party API

Latency of downstream calls

↓

→

↑

→

Requests are failing fast, which can make latency look better

Error logs, recent config changes, dependency health

→

↓

→

→

Users can't reach the service, or something upstream stopped sending traffic

DNS, load balancer, CDN, client releases

↑

↑ then ↓

↑

↑

Overload followed by retries, then users giving up

Saturated resource; retry storms

→

→

→

↑ steadily

Slow growth toward a limit, such as disk or connections

Time-to-exhaustion prediction; capacity plan

The most useful single habit is to check traffic before reacting to saturation. Saturation rising with traffic is load. Saturation rising without traffic is a bug.

Golden signals vs. the RED and USE methods

Two other monitoring frameworks are often mentioned alongside the golden signals. They overlap, but each is designed for a different layer of the system.

Four golden signals

RED method

USE method

Origin

Google SRE book (2016)

Tom Wilkie, for microservices (2015)

Brendan Gregg, for system performance

Signals

Latency, traffic, errors, saturation

Rate, errors, duration

Utilization, saturation, errors

Point of view

The user's experience of a service, plus its headroom

The user's experience of a request-driven service

Each hardware or software resource

Best for

Any user-facing system: services, databases, queues

Microservices and APIs

Hosts, disks, network interfaces, memory, CPU

What it misses

Resource-level detail behind a saturation problem

Saturation, so it warns late

Whether users are actually affected

In practice, RED is the four golden signals without saturation: rate is traffic and duration is latency. USE works one layer down, on each resource rather than each service.

The frameworks work best together, not as alternatives:

  • Golden signals or RED for every service: these are what you alert on, because they describe user impact.

  • USE for the infrastructure under those services: this is what you open during diagnosis, once a golden signal has told you something is wrong. Both sit inside a wider IT monitoring strategy that also covers logs, traces and uptime checks.

Some teams remember the four signals by the acronym LETS: latency, errors, traffic, saturation.

Golden signals vs. SRE KPIs

The golden signals are often listed alongside metrics like MTTR and MTBF, but they measure different things. Golden signals describe how a service is behaving right now. Reliability KPIs describe how well the team detects, responds to and prevents problems over time. You need both, and the first feeds the second.

Metric

What it measures

How the golden signals affect it

SLIs and SLOs

Whether a service meets its reliability target

Latency and errors usually are the SLIs; see SLA vs SLO vs SLI

MTTD (mean time to detect)

How long problems go unnoticed

Symptom-based golden-signal alerts, plus early warning from saturation, shorten it most

MTTA and MTTR

How fast the team acknowledges and resolves incidents

Clear signals and correlated alerts reduce time lost to triage and diagnosis

MTBF

How often failures happen

Saturation trends reveal recurring capacity problems before they become outages

Change failure rate (DORA)

Share of deployments that cause problems

Comparing golden signals before and after each release shows which changes hurt users

MTTD, MTTA, MTTR and MTBF, how to calculate them and their benchmarks are covered in our guide to MTTR, MTTA, MTBF and MTTD. For the wider set of incident metrics, see incident management KPIs.

Golden signals for different kinds of systems

The four signals were written with request-serving systems in mind, but they translate to almost anything. What changes is the unit of work and the resource that fills up first.

System

Latency

Traffic

Errors

Saturation

Web service or API

Request duration (p95, p99)

Requests per second

5xx rate, plus wrong-content and too-slow responses

CPU, memory, connection or thread pool usage

Database

Query duration

Queries or transactions per second

Failed queries, deadlocks, replication errors

Connections in use, disk space, I/O wait, replication lag

Message queue or stream

Time from publish to consume (end-to-end lag)

Messages published and consumed per second

Failed or dead-lettered messages

Queue depth and its growth rate, consumer lag

Batch or scheduled job

Run duration against its deadline

Runs and records processed per run

Failed runs, records rejected

Time left before the job misses its window

Kubernetes workload

Request duration at the ingress or service

Requests per second per service

5xx rate, pod restarts and crash loops

CPU throttling, memory against limits, pending pods

Server or VM (server monitoring)

Response time of the service it hosts

Network throughput, connections

Hardware and kernel errors, failed health checks

CPU, memory, disk, network utilization (use USE here)

For queues and batch jobs, the most useful latency measure is usually freshness: how old is the newest data a user can see? A queue can process thousands of messages per second and still be hours behind.

How to implement the four golden signals

  1. Start from user journeys, not services. List the three to five things users most need to do: log in, search, check out, load the dashboard. Each journey gets its own set of golden signals.

  2. Instrument at the edge first. Measure latency, traffic and errors where requests enter the system, at the load balancer, API gateway or ingress. That's closest to what users experience. Add per-service signals behind it afterwards.

  3. Use histograms for latency. Record request duration in buckets so you can calculate any percentile later. Averages and pre-computed percentiles can't be combined across instances.

  4. Define what counts as an error. Agree on explicit, implicit and policy errors for each journey before you build alerts, or each team will count differently.

  5. Find the constrained resource for saturation. For each service, ask what runs out first: CPU, memory, connections, disk, a rate limit at a third-party API. Measure that one, and add a time-to-exhaustion prediction where it grows steadily.

  6. Build one dashboard per journey. Four panels, one per signal, at the top. Everything else goes below or on a second dashboard. During an incident, the first screen should answer "are users OK?" in five seconds.

  7. Turn the signals into SLOs. Latency and errors become service level indicators, each with a target. That target gives you an error budget and the basis for alerting, covered in the next section.

  8. Test the signals before you need them. Run a chaos experiment or game day, such as adding latency to a dependency or exhausting a connection pool in staging, and check that the right signal moves and the right alert fires.

  9. Review after every incident. Did a golden signal show the problem before customers did? If not, the signal is measured at the wrong place or with the wrong threshold, and fixing it belongs on the list of postmortem action items.

Where the data comes from

Golden signals are categories, not specific metrics, so the same signal can be collected in several ways. Most teams combine three or four sources:

Source

Best for

Notes

Application metrics (Prometheus client libraries, StatsD)

All four signals for services you own

Histograms for latency; counters for traffic and errors

OpenTelemetry

Vendor-neutral instrumentation across languages

Standard HTTP metrics such as http.server.request.duration give latency, traffic and errors with consistent names

Load balancer, gateway and ingress logs or metrics

Latency, traffic and errors at the edge

Closest to what users experience; no code changes

Distributed traces

Latency per dependency, and where errors start

Useful for diagnosis; usually sampled, so less suited to alerting

Infrastructure agents and exporters (node exporter, cloud provider metrics)

Saturation

CPU, memory, disk, network, connection pools

eBPF-based collection

All four signals without changing application code

Captures requests at the kernel level; useful for services you can't instrument

Synthetic checks

Latency and errors when real traffic is low

Scheduled test requests from outside; essential for low-traffic or overnight periods

Real user monitoring (RUM)

Latency and errors as browsers and apps experience them

Includes network and front-end time that server-side metrics miss

A note on low-traffic services. With only a few requests a minute, a single failure can swing the error rate from 0% to 50%, and percentiles become meaningless. For these services, alert over longer windows, add synthetic checks so there's always a steady baseline, and consider request counts rather than ratios.

How to alert on the golden signals

Not every signal should wake someone up. The guiding rule from the SRE book is to page on symptoms users can feel, and to treat everything else as a ticket or a dashboard. Applied to the four signals:

Signal

Page when…

Ticket when…

Good alert style

Latency

The latency SLO's error budget is burning fast

Slow burn over days, or p99 creeping up week over week

Burn-rate alert on a latency SLO

Errors

The availability SLO's error budget is burning fast

Error rate elevated but within budget

Burn-rate alert on an availability SLO

Traffic

Traffic drops sharply against the same time last week

Sustained growth that will need capacity

Comparison with a baseline, not a fixed threshold

Saturation

A critical resource is predicted to run out within hours

Utilization trending toward its limit over weeks

Time-to-exhaustion prediction

For latency and errors, multi-window burn-rate alerts are the most reliable approach: they page when users are being hurt fast enough to matter and ignore short spikes. The thresholds and the math are in our guide to error budgets.

For traffic, a fixed threshold rarely works, because normal traffic changes by hour and day. Compare against the same window a week earlier:

sum(rate(http_requests_total{job="checkout"}[10m]))
  < 0.5 * sum(rate(http_requests_total{job="checkout"}[10m] offset 1w))

Expect signals to fire together. A saturated database raises latency, then errors, then drops traffic as clients give up. Without grouping, that's three or four pages for one problem. Alert correlation groups them into a single incident, and good golden-signal alerting is one of the most effective ways to reduce alert fatigue: fewer, more meaningful pages that each describe user impact.

When a golden-signal alert does fire, it also makes incident triage faster, because the alert already answers the first triage question: is this affecting users?

Worked example: golden signals for a checkout API

An illustrative setup for a checkout API serving about 300 requests per second at peak, behind a fixed database connection pool of 200 connections.

The dashboard and the alerts:

Signal

What's measured

Normal

Alert

Latency

p99 duration of successful checkout requests

250–400 ms

Page on fast burn of the SLO "99% of checkouts under 800 ms"

Traffic

Checkout requests per second

120–300, following the daily curve

Page if below 50% of the same 10 minutes last week

Errors

5xx plus checkouts that return no order ID, over all requests

Under 0.1%

Page on fast burn of the SLO "99.9% of checkouts succeed"

Saturation

Database connections in use, out of 200

60–110

Ticket above 150 for 15 minutes; page above 180

Note the error definition: it includes the implicit error of a "successful" checkout with no order ID, which a status-code-only metric would miss.

How an incident shows up across the four signals:

Database pool exhaustion shown across saturation, latency, errors and traffic over 16 minutes

Saturation gave four minutes of warning before users noticed anything, and latency paged before errors began. Measured from the first latency impact to the page, the time to detect was under a minute. Without the saturation and latency signals, the first page would have come from the error rate, or from customers.

Common golden signals mistakes

  1. Averaging latency. The mean hides the slow tail users actually complain about. Use percentiles from histograms.

  2. Mixing success and error latency. Fast failures pull the latency graph down during an outage. Track them separately.

  3. Counting only HTTP 5xx as errors. Implicit errors, such as a 200 response with the wrong content, and policy errors, such as responses slower than promised, are invisible to status-code metrics.

  4. Measuring saturation on the wrong resource. CPU is easy to graph, but the resource that runs out first is often a connection pool, a queue, a file-descriptor limit or a third-party rate limit.

  5. Alerting on raw thresholds. "Page if p99 > 500 ms" fires on every short spike. Alert on SLO burn rate for latency and errors, and on prediction for saturation.

  6. Ignoring traffic drops. Teams alert on spikes but not on silence. A sudden drop is one of the fastest outage signals there is.

  7. Monitoring only the servers. Golden signals measured inside one service can look healthy while users fail at the load balancer, DNS or a dependency. Start at the edge.

  8. Dozens of "golden" signals. The point is to have four, per user journey. A dashboard with forty panels labelled "golden" has lost the idea, and is a common source of monitoring toil.

Where ITOC360 fits

Golden signals are measured in your monitoring stack. ITOC360 handles what happens when one of them fires:

  • Golden-signal alerts from every tool in one place. ITOC360 Alerting receives alerts from Prometheus, Grafana, Datadog, New Relic, Zabbix and 50+ other sources, so latency alerts from one tool and saturation alerts from another arrive in the same queue.

  • One incident when the signals move together. AI-driven correlation groups the latency, error and saturation alerts caused by the same problem, as in the checkout example above, into a single incident instead of four paes.

  • Routed by service. Each alert reaches the on-call engineer for the service it describes, through ITOC360 On-Call schedules and escalation policies.

  • Detection time you can measure. Every alert, page and acknowledgment is timestamped, so you can see whether your golden signals catch problems before customers do. For how these timestamps feed the core reliability metrics, see the MTTR, MTTA, MTBF and MTTD guide.

Frequently asked questions

What are the four golden signals of monitoring?

Latency, traffic, errors and saturation. Latency is how long requests take, traffic is how much demand the system handles, errors is the rate of failed requests, and saturation is how close the system is to its limits.

Where do the four golden signals come from?

They come from Chapter 6, "Monitoring Distributed Systems", of Google's Site Reliability Engineering book, published in 2016. The book recommends them as the minimum set of measurements for any user-facing system.

Why are they called "golden" signals?

Because they're the few measurements that matter most. Google's SRE book argues that if you can only measure four things about a user-facing system, these are the four, and that alerting on them gives decent coverage on their own.

What is saturation in the golden signals?

Saturation is how full the system is, measured on its most constrained resource, such as memory, disk I/O, a connection pool or a rate limit. It's the one forward-looking signal: it warns before latency and errors are affected, often as a prediction of when the resource will run out.

What is the difference between the golden signals and the RED method?

The RED method measures rate, errors and duration, which correspond to traffic, errors and latency. It leaves out saturation, so it describes user experience but warns later. Golden signals add saturation as an early warning.

What is the difference between the golden signals and the USE method?

The USE method measures utilization, saturation and errors for each resource, such as CPU, memory, disks and network. Golden signals describe a service from the user's side. Teams typically alert on golden signals and use USE during diagnosis.

Are the golden signals the same as observability?

No. The golden signals are a monitoring practice: four metrics that tell you whether users are served well. Observability is the broader ability to understand why, using metrics, logs and traces together. Golden signals are usually the first layer of an observability setup.

Should every golden signal trigger a page?

No. Page on latency and errors when an SLO's error budget is burning fast, on traffic when it drops sharply against its baseline, and on saturation when a critical resource is predicted to run out within hours. Slower trends should open tickets.

What are examples of the four golden signals?

For a web API: p99 request duration (latency), requests per second (traffic), share of requests returning 5xx or wrong content (errors), and connection pool or memory usage (saturation). For a queue: end-to-end message lag, messages per second, dead-lettered messages, and queue depth.

How do the golden signals relate to SLIs and SLOs?

Latency and errors are usually the service level indicators themselves, measured as the share of requests that are fast enough and succeed. An SLO sets a target for them, such as 99.9% of requests succeeding over 30 days, and the gap between the target and 100% is the error budget used for alerting.

Do the golden signals work for low-traffic services?

Yes, with adjustments. With few requests, ratios and percentiles swing wildly, so use longer alert windows, add synthetic checks to create a steady baseline, and alert on counts of failed requests rather than percentages.

Sources