RousselTMLEARNING

Observabilité

Le tracing distribué avec Jaeger : concepts et architecture

Les concepts du tracing distribué (trace, span, contexte, propagation) et Jaeger : son histoire, son architecture v2 fondée sur l'OpenTelemetry Collector et ses composants.

1. Les concepts du tracing #

Suivre une requête de bout en bout.

Trace et span #

Une trace distribuée
Tous les spans partagent le même identifiant de trace.
ConceptDéfinition
TraceLe parcours complet d'une requête, identifié par un trace_id
SpanUne opération (appel HTTP, requête SQL) avec début, durée, attributs, événements et statut
Relation parent-enfantChaque span connaît son parent : on obtient un arbre
Contextetrace_id + span_id transmis d'un service à l'autre
PropagationTransport du contexte dans les en-têtes (W3C traceparent, ou B3, ou uber-trace-id historique)
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
#           version-trace_id(16 octets)-span_id parent(8 octets)-drapeaux (01 = échantillonné)

2. Jaeger #

Un projet CNCF mature.

Histoire #

Jaeger a été créé chez Uber en 2015, donné à la CNCF en 2017 et y est « graduated » depuis 2019. La version 2 (fin 2024) reconstruit Jaeger sur l'OpenTelemetry Collector : réception OTLP native, configuration au format du Collector, et possibilité d'ajouter n'importe quel processeur OpenTelemetry.

À savoir : Les clients Jaeger historiques (bibliothèques jaeger-client-*) sont abandonnés au profit des SDK OpenTelemetry. La version 1 de Jaeger est elle aussi arrivée en fin de vie : les nouvelles installations doivent partir de la v2.

Architecture #

Architecture de Jaeger v2
Un même binaire peut jouer les rôles de collecteur, de requêteur ou les deux (all-in-one).
RôleFonction
CollectorReçoit les spans (OTLP), les traite et les écrit dans le stockage
QueryAPI et interface web de recherche (port 16686)
IngesterLit les spans depuis Kafka et les écrit dans le stockage (architecture avec tampon)
StockageMémoire, Badger, Elasticsearch, OpenSearch, Cassandra, ou plugin distant (gRPC)

Articles liés

Installer Jaeger v2 : all-in-one, configuration et stockages

Lancer Jaeger v2 en all-in-one, comprendre son fichier de configuration (extensions jaeger_storage et jaeger_…

Instrumenter ses applications pour Jaeger avec OpenTelemetry

Envoyer des traces à Jaeger avec OpenTelemetry : auto-instrumentation (Java, Python, Node.js), SDK et spans m…

Analyser des traces dans l'interface de Jaeger

Rechercher des traces, lire une chronologie, repérer le chemin critique, comparer deux traces, utiliser le gr…

Pour aller plus loin