Tracing & Performance

APM Metrics: The Ones That Actually Matter

Throughput, latency percentiles, error rate, Apdex, saturation — a practical guide to the APM metrics worth alerting on and the ones that just make noise.

Most teams can name the metrics they track. Few can name the ones that actually matter. Your APM dashboard probably displays forty metrics — response time, throughput, error rate, saturation, memory, CPU, disk I/O, database connection pool usage, cache hit rate, and so on. But when something breaks at 3 a.m., you look at five of them. APM metrics that matter are the ones that directly tell you if your system is working, where it's failing, and what to fix. Everything else is noise.

This guide cuts through the noise. You'll learn which metrics drive decisions, how to compute them correctly, and which ones deserve alerts. You'll also learn the arithmetic traps that catch every team: why you cannot average percentiles across instances, why low-traffic endpoints make latency metrics lie, and why measuring performance wrong is often worse than not measuring at all.

The metrics that actually matter

Pick five. Pick five metrics and know them better than you know your app. These are the ones that correlate with user experience and infrastructure capacity. Everything else can wait.

Throughput — requests per minute (RPM) or requests per second (RPS). This is the load on your system. It answers one question: how many requests is your system handling right now? A service doing 100 RPS at 100ms latency might serve 200 RPS at 500ms latency — or start timing out. Throughput and latency are intertwined. You must track both.

Latency percentiles — P50, P75, P95, P99. Not averages. Percentiles. If your average response time is 200ms but your P99 is 2 seconds, you have a problem: 1% of your users wait 10x longer than the median. Percentiles reveal the tail of your distribution — the frustrated users, the queries that hit a cold cache, the requests that land during peak load. P50 tells you the typical experience. P95 and P99 tell you what your slowest users actually see.

Never average percentiles across multiple instances or time windows. Averaging percentiles is mathematically invalid and produces meaningless numbers. If Instance A has P95=500ms and Instance B has P95=600ms, the system-wide P95 is NOT 550ms. You must preserve the raw distribution and compute percentiles across all requests.

Error rate — errors per minute, or errors as a percentage of requests. Not error count. Rate. A service that handles 10,000 requests per minute with 100 errors per minute has a 1% error rate. During peak load, the same 100 errors becomes a problem. During quiet periods, the same error count might be acceptable. Error rate accounts for scale. Error rate matters more than error count because you can't set a static threshold for count.

Apdex score — application performance index. A single number from 0 to 1 that buckets responses into three categories: satisfied (under a threshold), tolerating (under a higher threshold), and frustrated (everything else). If you define satisfied as under 500ms and tolerating as under 2 seconds, then:

  • Satisfied: responses under 500ms
  • Tolerating: responses 500ms to 2s
  • Frustrated: responses over 2s
  • Apdex = (satisfied + tolerating/2) / total

An Apdex of 1.0 means all requests are satisfied. 0.5 means half are satisfied, half are frustrated. Apdex distills performance into one number — useful for dashboards and alerts, though it hides the percentile details.

Saturation and resource use — what percentage of your system's capacity is in use? This answers the second half of the reliability equation. Your API might respond in 100ms, but if your database connection pool is 95% full, the next burst of traffic will exhaust it and every new request will timeout. Saturation includes CPU, memory, disk I/O, database connections, thread pools, and any other resource that can become the bottleneck. Track it not because you need to alert on 95% usage, but because 95% usage predicts what will happen at 105% usage — a crash.

Transaction breakdown — where does the time go? In your average 500ms request, is 400ms spent waiting for the database, 50ms waiting for an external API, and 50ms in your app code? Or the reverse? A transaction waterfall shows the composition of latency. Without it, you optimize the wrong thing. You might add cache to reduce database queries from 10ms to 5ms when the real problem is a 400ms call to a third-party service that you could parallelize or timeout aggressively.

The metrics to dashboard (not necessarily alert)

These are important but usually don't need hard alerts. They're for dashboards, for on-call engineers to understand context.

Slow transaction volume — how many requests hit your slow threshold? If you define slow as over 1 second, track how many requests cross that line each minute. This is a leading indicator — before error rate spikes, slow transaction volume rises.

External call timing — time spent in third-party services. If 40% of your latency is waiting for a payment processor, you have a different problem than 40% database latency. Parallelization vs. optimization vs. timeout tuning are all different strategies.

Cache hit rate — what percentage of cache requests hit? A cache hit rate below 60% means you're either not caching the right things, or your cache is too small. Below 30% and you're probably wasting CPU and adding latency by checking the cache when it never hits.

The metrics to ignore (unless context demands otherwise)

These feel important but usually aren't. They're often symptoms of problems, not causes.

Response time averages — already covered above. Percentiles. Always percentiles.

Request count — total requests served, without context. 10,000 requests at 100ms latency is healthy; 10,000 requests at 5 seconds is a crisis. Count is noise without latency.

Raw CPU and memory usage — these matter for capacity planning, not for performance diagnosis. A service running at 80% memory with 50ms latency is fine. The same service at 20% memory with 2 second latency is broken. Use saturation percentage instead.

Critical arithmetic and measurement traps

You cannot average percentiles. This is the most common mistake. If your system has three instances and each reports P95=500ms, the system-wide P95 is not 500ms. It might be 800ms or 1200ms. Percentile aggregation requires the raw latency data, not the percentiles themselves.

Low-traffic endpoints make percentiles unreliable. If an endpoint gets 1 request per minute, its P95 latency is meaningless — you don't have 20 requests to compute a meaningful 95th percentile. A single slow request from a warm cache miss becomes your P95. For low-traffic endpoints, use raw response times or track them separately.

A P99 over a 1-minute window is not comparable to a P99 over a 1-hour window. A 1-minute window captures 6000 requests for a 100 RPS service. A 1-hour window captures 360,000 requests. The 1-hour P99 is almost always slower because you have more samples to find the rare catastrophic outlier. Always specify the window when quoting percentiles.

Percentiles computed from averages are wrong. Some tools compute percentiles like this: aggregate data into 1-minute buckets, compute the average for each bucket, then compute percentiles of those averages. This is invalid. You must compute percentiles from raw request timings, not from aggregated averages.

Saturation is relative to your threshold, not your current load. If your database can handle 1000 connections and you have 800 open, you're at 80% saturation — close to the wall. If your threshold is 10,000 connections and you have 8000 open, that's also 80%. The number that matters is the distance to failure.

Relating to frameworks: RED, USE, and golden signals

The RED method — Rate, Errors, Duration — maps cleanly to your core metrics: throughput (rate), error rate (errors), and latency percentiles (duration). RED is excellent for services. The USE method — Utilization, Saturation, Errors — emphasizes saturation and resource use, which is essential for infrastructure. Golden signals — latency, traffic, errors, and saturation — are the four things that matter across every system. These frameworks don't conflict; they're lenses. Use RED for your API, USE for your database, and golden signals to tie them together.

Metering with confidence: the decision table

Here's a decision table for each metric. Track all of them. Alert on some. Ignore most.

MetricWhat it answersAlert?Track via
ThroughputIs traffic normal?Yes, if it drops suddenly (deploy side effect)RPS / RPM
P95 latencyDo users experience acceptable speed?Yes, if it exceeds thresholdPercentile computation
P99 latencyDo edge cases (worst users) have usable speed?Usually not alone; dashboard contextPercentile computation
Error rateIs the system correct?Yes, if it spikesErrors per minute / % of requests
ApdexIs the service healthy (one number)?Yes, if it drops below thresholdFormula above
SaturationHow close to breaking?Yes, if over 80%CPU, memory, connections, queue
Slow transaction %Are more requests hitting latency ceiling?Yes, if trending upTransactions over threshold / total
External API latencyAre third-party services slowing us?Sometimes; depends on criticalitySpan timing data
Cache hit rateIs caching effective?Rarely; use for diagnosticsHits / (hits + misses)

LightTrace and these metrics

LightTrace captures transaction-level APM metrics that matter: throughput (requests per second), latency percentiles (P50, P75, P95, P99), and error rate. You see transaction breakdowns in span waterfalls — exactly where your request spends time. Set alert rules on latency thresholds or error rate spikes; dashboards show you the percentiles so you can diagnose the tail.

LightTrace does not capture RUM (Real User Monitoring), Core Web Vitals, or synthetic monitoring. Those require JavaScript instrumentation in the browser, which is a different product category. For backend performance — the metrics that matter for on-call engineers — LightTrace shows you the exact data you need to diagnosis and fix slowdowns in production.

MetricLightTraceStatus
Throughput (RPS/RPM)Captured from all transactions
Latency percentiles (P50/P75/P95/P99)Computed per transaction type
Error rateErrors per minute, grouped by endpoint
ApdexManual calculation from percentiles
SaturationRequires infrastructure monitoring
Slow transaction countFlagged in transaction list
Transaction breakdownSpan waterfall timing

The ones you'll use most: throughput, latency percentiles, error rate, and transaction breakdown. These four answer 90% of performance questions at 3 a.m. The rest are context.

Start with P95 latency. It's the sweet spot between capturing the typical experience (P50 is too forgiving) and chasing noise (P99 can be a single fluke). If your P95 is healthy, your users are happy. When it isn't, span waterfalls show you why.

Start tracking errors in minutes

Start tracking the metrics that matter — set up APM in LightTrace and get percentile-based latency, throughput, and error rate with transaction breakdowns in minutes.

The difference between a fast app and a slow one isn't usually code quality — it's clarity about what you're measuring. Pick the right metrics, compute them correctly, and alert on the right thresholds. Everything else is noise.

Fix your next production error faster

Point any Sentry SDK at LightTrace — free up to 5,000 events/month.