RousselTMLEARNING

Observability

Distributed tracing with Jaeger: concepts and architecture

The concepts of distributed tracing (trace, span, context, propagation) and Jaeger: its history, its v2 architecture built on the OpenTelemetry Collector and its components.

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)

Related articles

Installing Jaeger v2: all-in-one, configuration and storage

Run Jaeger v2 as all-in-one, understand its configuration file (jaeger_storage and jaeger_query extensions, O…

Instrumenting applications for Jaeger with OpenTelemetry

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

Analyzing traces in the Jaeger interface

Search for traces, read a timeline, spot the critical path, compare two traces, use the dependency graph and …

Keep learning

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!