RousselTMLEARNING

Article · Jaeger: distributed tracing from discovery to expertise

Distributed tracing with Jaeger

1. Tracing concepts #

Following a request end to end.

Trace and span #

A distributed trace
All spans share the same trace identifier.
ConceptDefinition
TraceThe complete journey of a request, identified by a trace_id
SpanAn operation (HTTP call, SQL query) with start, duration, attributes, events and status
Parent-child relationshipEach span knows its parent: you get a tree
Contexttrace_id + span_id passed from one service to the next
PropagationCarrying the context in headers (W3C traceparent, B3, or the historical uber-trace-id)
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
#           version-trace_id(16 octets)-span_id parent(8 octets)-drapeaux (01 = échantillonné)

2. Jaeger #

A mature CNCF project.

History #

Jaeger was created at Uber in 2015, donated to the CNCF in 2017 and has been « graduated » there since 2019. Version 2 (late 2024) rebuilds Jaeger on the OpenTelemetry Collector: native OTLP reception, Collector-style configuration, and the ability to add any OpenTelemetry processor.

Good to know: The historical Jaeger clients (jaeger-client-* libraries) are discontinued in favor of the OpenTelemetry SDKs. Jaeger version 1 has also reached end of life: new installations should start from v2.

Architecture #

Jaeger v2 architecture
The same binary can act as collector, query service, or both (all-in-one).
RoleFunction
CollectorReceives spans (OTLP), processes them and writes them to storage
QueryAPI and web search interface (port 16686)
IngesterReads spans from Kafka and writes them to storage (buffered architecture)
StorageMemory, Badger, Elasticsearch, OpenSearch, Cassandra, or a remote plugin (gRPC)

📄 Distributed tracing with Jaeger: concepts and architecture →

My progress

  • ⏱ Estimated time : ≈ 3 min

Sign in to track your progress and take notes. Sign in

💬 Questions about this lesson

No questions yet: be the first to ask for help or share your configuration.

Ask a question about this lesson →

Recommended Articles

Distributed tracing: context propagation (W3C Trace Context and baggage)

Understand and implement OpenTelemetry context propagation: the traceparent header, tracestate, b...

Distributed tracing best practices with Jaeger

Checklist for useful tracing: OpenTelemetry instrumentation, span naming, attributes, propagation...

Traefik: distributed tracing with OpenTelemetry

Enable Traefik v3 tracing with OpenTelemetry (OTLP), propagate the W3C context to applications, s...

From click to database: front-end to back-end traces with Faro

Link browser requests to back-end traces: TracingInstrumentation, traceparent header propagation,...

Grafana Tempo: the distributed tracing backend at scale

Understand distributed tracing and Grafana Tempo: traces, spans, TraceID, architecture (distribut...

Grafana Tempo or Jaeger: which tracing backend to choose?

Detailed comparison of Grafana Tempo and Jaeger: architecture, storage, search, query language, s...

Instrumenting applications for Jaeger with OpenTelemetry

Send traces to Jaeger with OpenTelemetry: auto-instrumentation (Java, Python, Node.js), SDK and m...

OpenTelemetry traces in depth: spans, status, events, links and sampling

Master the trace signal: anatomy of a distributed trace, span and SpanKind, attributes, status an...

OpenInference: the OpenTelemetry conventions for tracing AI applications

Detailed guide to OpenInference: OpenTelemetry semantic conventions and instrumentations for LLMs...

Support us

♥ SUPPORT US

Support RousselTM Learning

Courses, articles, labs and certificates stay free with no intrusive ads. A voluntary contribution, of any amount you choose, pays for hosting, lab environments and new content.

Contribute with PayPal Any amount · card or PayPal accountLearn more
QR code PayPal
Or scan this QR code with your phone

Thank you, every contribution counts!