Jaeger is an open-source distributed tracing platform. It receives spans from instrumented applications, stores them, and gives engineers a way to search and read the resulting traces — the record of one request as it moved through every service, database call and queue hop on its path. It was created at Uber, donated to the CNCF and graduated there, and it remains one of the most widely deployed tracing backends in Kubernetes estates.
Architecturally Jaeger is a small number of cooperating components. Collectors receive spans, validate them, and write to storage, optionally through a Kafka buffer with an ingester behind it for estates whose write rate outpaces the database. A query service reads from storage and serves the UI, where traces are searched by service, operation, tag and duration, then read as a timeline or a flame graph. From Jaeger v2 onwards the whole backend is built on the OpenTelemetry Collector, so receivers, processors and exporters are the same components used elsewhere in an OpenTelemetry pipeline.
Two choices dominate a real deployment. The first is storage: Elasticsearch or OpenSearch, Cassandra, or ScyllaDB for production, with Badger and in-memory for development — each with different index behaviour, retention mechanics and cost curve. The second is sampling. Tracing every request at production volume is usually unaffordable, so Jaeger supports constant, probabilistic and rate-limiting samplers, plus remote and adaptive sampling served centrally by the collectors so per-service rates can be tuned without redeploying anything. Instrumentation itself now comes from OpenTelemetry SDKs; the original Jaeger client libraries are retired.
Why this skill matters now
Once a request crosses more than three services, aggregate latency graphs stop being useful. The p99 climbs, every service looks individually healthy, and nobody can say which hop is responsible. Distributed tracing is the only signal that answers that question directly, and Jaeger is the default open-source answer for teams that will not send trace data to a hosted vendor.
That constraint is common and getting more so. Data residency rules, contractual restrictions and the cost of per-span pricing all push organisations toward a backend they run themselves. Jaeger fits that requirement, is CNCF-graduated, and speaks OTLP natively, so it slots into an OpenTelemetry pipeline without custom glue.
The skill organisations hire for is operating it rather than opening it. A single-binary Jaeger is a five-minute exercise. Sizing an Elasticsearch cluster for span volume, configuring index rollover so retention does not silently fill disks, deciding between head and tail sampling, buffering through Kafka when a storage backend stalls, and diagnosing why a quarter of traces arrive incomplete — that is the work that makes tracing dependable enough for people to rely on during an incident.