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.