A spike on a latency chart tells you something is wrong. An exemplar tells you exactly which request to open. It is the shortest path from "what" to "why".

You see a p99 spike on a dashboard. What now? Without exemplars you start guessing. With them, you click the spike and land on the exact trace that caused it.

What an exemplar actually is

An exemplar is a sample attached to an aggregated metric — a single concrete example of the thing being counted. When a histogram bucket records a slow request, the exemplar stores that request's trace id alongside it. The metric stays cheap and aggregated; the pointer to a real example rides along.

Why it changes debugging

The classic gap in observability is the jump from a metric (fast, aggregated, no detail) to a trace (detailed, but which one?). Exemplars close that gap. The slow bucket on your chart is now a link, not a search.

Turning it on

Most OpenTelemetry SDKs support exemplars behind a flag; the collector forwards them if your backend accepts them. Once enabled, correlation becomes a click:

metrics
| where __name__ == "http_request_duration_seconds"
| where le == "+Inf" and value > 2.0
| join exemplars on trace_id
| project ts, duration, trace_id, route

A caution

Exemplars are samples, not a census. They point you at representative offenders, not every one. Treat them as the fastest first lead in an investigation — which is exactly what you want at 3 a.m.