Start Prometheus with --enable-feature=exemplar-storage and optionally --storage.exemplars.exemplars-limit to control maximum exemplar count in the ring buffer
Confirm exemplar storage is active by querying GET /api/v1/status/runtimeinfo and checking that the exemplarsLimit field is non-zero
Instrument your application's Prometheus histogram or counter to attach exemplars on each observation; include at minimum a TraceID label whose value is the current span's trace ID in hex format
Scrape the metrics endpoint using a job configured with honor_labels: false and verify the target exposes the OpenMetrics content type by checking the Content-Type response header
Use the HTTP API GET /api/v1/query_exemplars with parameters query (a metric selector), start, and end to retrieve stored exemplars and their label sets over a time range
In Grafana, link the Prometheus data source exemplar TraceID label to a Tempo or Jaeger data source so exemplar dots on time series panels are clickable and navigate directly to the trace
Known gotchas
Only histogram and counter metric types support exemplars in the Prometheus data model; gauges and summaries do not carry exemplars
Exemplar storage is per-process and in-memory; a Prometheus restart clears all stored exemplars, so exemplar data cannot be queried for time ranges before the last restart
The --storage.exemplars.exemplars-limit flag sets a global cap across all series; in a high-series environment the ring buffer fills quickly and older exemplars are evicted before they can be queried
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp