1. Tracing concepts #
Following a request end to end.
Trace and span #
| Concept | Definition |
|---|---|
| Trace | The complete journey of a request, identified by a trace_id |
| Span | An operation (HTTP call, SQL query) with start, duration, attributes, events and status |
| Parent-child relationship | Each span knows its parent: you get a tree |
| Context | trace_id + span_id passed from one service to the next |
| Propagation | Carrying 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 #
| Role | Function |
|---|---|
| Collector | Receives spans (OTLP), processes them and writes them to storage |
| Query | API and web search interface (port 16686) |
| Ingester | Reads spans from Kafka and writes them to storage (buffered architecture) |
| Storage | Memory, Badger, Elasticsearch, OpenSearch, Cassandra, or a remote plugin (gRPC) |
My progress
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.
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...