Jaeger v2.20.0 is here, and the graduated CNCF distributed tracing project just picked up some serious firepower. Think of Jaeger as a flight recorder for your microservices — when something goes wrong in production (and something always goes wrong), Jaeger tells you exactly which service, which request, and which line of code is to blame. In v2.20.0, the headline act is a brand-new native flamegraph trace view, a deep push into AI-powered tracing with session-scoped MCP endpoints and a dedicated GenAI tab, plus Elasticsearch datastream rotation and the long-overdue dropping of Elasticsearch v6 support.
For anyone running Jaeger in production — and that is a lot of you, given it is one of the most widely deployed tracing backends in Kubernetes — this release brings tangible new capabilities worth your attention. Let’s break down what matters.
The Flamegraph Trace View Arrives
If you have ever stared at a waterfall trace view trying to figure out where time is being spent across nested service calls, you will appreciate this. Jaeger v2.20.0 ships a native flamegraph trace view built directly into the UI — no plugins, no external tools, no exporting to a third-party visualizer.
A flamegraph shows you the execution hierarchy of a trace as stacked bars, where the width of each bar represents the time spent. Wider bars are where your latency lives. It is the fastest way to spot which service call or internal operation is eating up response time, because your eyes naturally gravitate toward the widest towers.
The new view includes a resizable 50/50 split between the trace table and the flamegraph chart, so you can click on a span in the table and instantly see its flame representation on the right. Scroll affordances are baked in, so even deeply nested traces stay navigable.
Why this matters: Before this, getting a flamegraph view of your Jaeger traces required exporting data to external tools like speedscope or Jaeger’s own legacy flamegraph plugins. Now it is part of the core UI. For platform engineers debugging latency issues across dozens of services, this is a workflow improvement that saves real time.
jaeger-ui #4098 | jaeger-ui #4121
AI-Powered Tracing: GenAI Tab and Session-Scoped MCP
Jaeger has been quietly building out AI-assisted tracing capabilities, and v2.20.0 pushes this into experimental territory with real structure. The headline here is the AI Gateway’s new session-scoped MCP (Model Context Protocol) endpoint, which allows per-session UI tool exposure over a session-stream registry.
In practice, this means an AI agent (like an LLM debugging assistant) can interact with Jaeger through a dedicated MCP session — discovering available tools, reading skill definitions, and querying traces — all scoped to a single session rather than a global endpoint. This is a meaningful architectural pattern for teams building AI-assisted incident response workflows where an LLM agent needs to read trace data to diagnose production issues.
The UI side gets a GenAI tab in the span detail panel that renders AI-generated content with a toggle between plain text, Markdown, and JSON. A companion GenAI timeline viewer auto-activates when a trace contains GenAI-specific span types (LLM calls, tool invocations, retrieval operations, agent spans). Each span type gets its own icon in the trace timeline — so you can visually distinguish between “the model was thinking” and “the tool was running” at a glance.
Why this matters: As more teams wire LLM calls into their service meshes, understanding the latency and behavior of AI workloads inside distributed traces becomes critical. Jaeger is positioning itself as the tracing backend that understands GenAI workloads natively rather than treating them as opaque spans.
jaeger #8973 | jaeger #8910 | jaeger #8849 | jaeger-ui #4122 | jaeger-ui #3872
Elasticsearch Datastream Rotation
For teams using Elasticsearch or OpenSearch as their Jaeger storage backend, v2.20.0 introduces a new datastream rotation strategy. Datastreams are Elasticsearch’s recommended approach for time-series data, offering automatic rollover, lifecycle management, and better index management compared to traditional index-per-day patterns.
This is part of a broader effort documented in RFC 0004 to bring Elasticsearch/OpenSearch storage fully up to modern best practices. The new datastream-aware span write path means Jaeger can now write traces directly into Elasticsearch datastreams rather than manually managed indices.
The ES rotation and index-cleaner feature gates have also been promoted to beta, which means these strategies are one step closer to becoming the default. If you are running Jaeger with Elasticsearch today, this is the direction the project is heading.
Why this matters: Teams running Jaeger at scale with Elasticsearch have long needed better index lifecycle management. Datastream rotation, combined with the beta promotion of rotation feature gates, means the storage backend is maturing toward a more hands-off operational model.
jaeger #8833 | jaeger #9018 | jaeger #8804
Breaking Changes You Need to Know
This release carries four breaking changes, and one of them is a hard cutoff:
- Elasticsearch v6 support is removed entirely. If you are still running ES v6 — and honestly, that ship sailed years ago — you cannot upgrade to Jaeger v2.20.0 without first migrating your storage backend. jaeger #8948
- The jaegermcp extension has been merged into the jaegerquery extension. If you were running jaegermcp as a separate binary, it is now part of jaegerquery. Update your deployment configs accordingly. jaeger #8894
- Configurable max_trace_duration with improved time-range design. The time-range handling has been reworked, and you can now set a maximum trace duration at the storage level. jaeger #8840
- ES rotation and index-cleaner feature gates promoted to beta. Default behavior for index rotation may change. jaeger #9018
Base64 Trace IDs and UI-Tracing
Two smaller but thoughtful changes deserve a callout. Trace IDs are now treated as opaque strings with full base64 encoding support across both the backend API and the UI. This is a quality-of-life improvement for systems that generate trace IDs in formats other than hex — particularly W3C Trace Context compliant implementations that use base64-encoded trace IDs natively.
Additionally, the Jaeger UI now exports its own OTLP traces back to Jaeger. Yes — the tracing tool now traces itself. The UI emits spans for its own internal operations (trace lookups, searches, rendering), giving you observability into your observability tool. If the Jaeger UI feels slow, you can now open Jaeger and… trace the Jaeger UI tracing Jaeger. It is traces all the way down.
jaeger #8828 | jaeger-ui #4118 | jaeger-ui #4051
Bug Fixes Worth Noting
- ClickHouse panic fix: Decoded trace and span ID lengths are now validated, preventing a panic on corrupted rows. If you store traces in ClickHouse, this is a stability fix worth upgrading for. jaeger #8935
- Elasticsearch auth validation: Jaeger now rejects mutually exclusive Elasticsearch authentication methods at config validation time rather than failing at runtime. jaeger #8946
- Sampling graceful shutdown: The adaptive sampler now correctly forfeits its leader lock on graceful shutdown, preventing a stale leader from blocking sampling in rolling deployments. jaeger #8825
- Native trace summaries: A new summaryreader backend feature provides native trace summaries, giving you pre-computed aggregation data without external tooling. jaeger #8812
Jaeger v2.20.0 is a feature-rich release that pushes the tracing platform forward on three fronts simultaneously: better visualization (flamegraph), AI-native tracing (GenAI tab + MCP), and storage maturity (datastream rotation). Whether you are debugging latency, investigating AI workloads, or just trying to keep your Elasticsearch indices from eating your cluster, there is something here for you.



