Aller au contenu

GUIDE TECHNIQUE · OPENTELEMETRY

Corréler logs et traces avec OpenTelemetry

Corréler journaux et traces avec trace_id et span_id : propager le contexte W3C, l'injecter dans un logger Java compatible, puis rechercher le même identifiant dans le backend. Une trace ne rend pas automatiquement les logs corrélés.

Niveau Avancé5 min de lecture— vuesOpenTelemetry

01 · CADRAGE

Ce que vous allez mettre en place

Corréler journaux et traces avec trace_id et span_id : propager le contexte W3C, l'injecter dans un logger Java compatible, puis rechercher le même identifiant dans le backend. Une trace ne rend pas automatiquement les logs corrélés.

Pour qui : Administrateurs, équipes observabilité et exploitation

Environnement et versions

OpenTelemetry Java agent récent (configuration de l'export OTLP à vérifier selon la version), application Java utilisant Logback ; adaptation nécessaire pour d'autres langages/loggers.

Vérifiez la compatibilité avec votre environnement réel. Les versions ne sont jamais présumées identiques d’un tenant à l’autre.

02 · AVANT DE COMMENCER

Prérequis et points de contrôle

  • Application Java de recette utilisant un logger Logback et javaagent OpenTelemetry compatible.
  • Backend recevant à la fois les traces ET les journaux, ou deux pipelines debug en laboratoire.
  • Propagation W3C tracecontext activée entre services ; requête HTTP de recette reproductible.
  • Données de test non sensibles et droits sur la configuration des logs.

03 · VUE D’ENSEMBLE

Comprendre l’architecture et les flux

ARCHITECTURE TECHNIQUEComprendre la chaîne de bout en bout
01Application instrumentée
02Collecte et configuration
03Traitement du signal
04Console de supervision
05Décision RUN
HTTP traceparent → contexte de spans → MDC Logback → logs avec trace_id/span_id → collecte des journaux et des traces → recherche sur un identifiant partagé. Les deux flux doivent être réellement ingérés.
Visuel ADN Consulting opentelemetry
Aperçu de l’environnement OpenTelemetry

Illustration éditoriale validée ADN Consulting, distincte d’une capture de console.

Source : ADN Consulting

04 · TUTORIEL

Procédure complète, étape par étape

Chaque étape explique l’action, sa raison, le contrôle attendu et les erreurs habituelles. Adaptez les exemples aux paramètres de votre propre environnement.

01

ÉTAPE 1 / 5

Tracer une requête métier

Il faut une transaction unique pour comparer trace et journaux de la même exécution.

  1. Appeler une route de recette qui écrit au moins un log et génère un span.
  2. Relever un trace_id (32 caractères hexadécimaux) et le span_id (16) dans le backend.
  3. Noter la période, le service.name et le périmètre.
Exemple techniqueÀ adapter à votre environnement
# Exemple de traceparent (à ne PAS recopier comme identifiant réel) :
# 00-0123456789abcdef0123456789abcdef-0123456789abcdef-01
Ce qui se passe à cette étape
1Application instrumentée
2Tracer une requête métier
3Un identifiant de trace réel est visible pour la requête choisie.

À vérifier : Un identifiant de trace réel est visible pour la requête choisie.

Point de vigilance ADN : Un identifiant créé manuellement ne prouve aucune corrélation.

02

ÉTAPE 2 / 5

Propager correctement le contexte

Les services doivent partager le même contexte de trace pour représenter un parcours distribué.

  1. Vérifier que les appels sortants propagent l'en-tête W3C traceparent.
  2. Comparer trace_id en amont et en aval ; tracer une rupture sur les bibliothèques non instrumentées.
  3. Activer les propagators adaptés si la propagation n'est pas automatique.
Exemple techniqueÀ adapter à votre environnement
OTEL_PROPAGATORS=tracecontext,baggage
# Le paramètre doit être appliqué au processus Java instrumenté
Ce qui se passe à cette étape
1Collecte et configuration
2Propager correctement le contexte
3Deux services d'une même requête partagent le trace_id et portent des span_id distincts.

À vérifier : Deux services d'une même requête partagent le trace_id et portent des span_id distincts.

Point de vigilance ADN : Ne créez pas un nouvel identifiant de trace pour chaque microservice.

03

ÉTAPE 3 / 5

Ajouter le contexte aux journaux

Un fichier de logs non structuré n'inclut pas nécessairement le contexte MDC.

  1. Avec l'agent Java et Logback supportés, faire apparaître les champs du contexte MDC dans le pattern.
  2. Dans logback.xml, appliquer l'exemple puis redémarrer la seule application de recette.
  3. Déclencher une requête et vérifier les valeurs non vides au sein d'une période tracée.
Exemple techniqueÀ adapter à votre environnement
<pattern>%d{ISO8601} %-5level [%X{trace_id} %X{span_id}] %logger - %msg%n</pattern>
# Extrait XML à intégrer sous un appender Logback de recette ; pas un fichier complet.
Ce qui se passe à cette étape
1Traitement du signal
2Ajouter le contexte aux journaux
3Le log émis pendant un span affiche son trace_id et son span_id.

À vérifier : Le log émis pendant un span affiche son trace_id et son span_id.

Point de vigilance ADN : Les valeurs MDC dépendent de la bibliothèque de logs, de l'agent et de sa version ; sans contexte actif elles peuvent être vides.

04

ÉTAPE 4 / 5

Traiter les flux dans le Collector

L'enrichissement du log n'est pas une preuve qu'il arrive au même backend que les traces.

  1. Vérifier séparément un pipeline traces OTLP et un pipeline logs réellement alimenté (SDK, collecteur de fichier ou agent de logs).
  2. En laboratoire, utiliser debug pour les deux flux ; en production, un exporteur sécurisé.
  3. Contrôler la conservation des identifiants dans le parsing et le schéma du backend.
Exemple techniqueÀ adapter à votre environnement
service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [debug]
    logs:
      receivers: [otlp]
      processors: [batch]
      exporters: [debug]
# Extrait de service.pipelines ; receivers/processors/exporters à déclarer ailleurs.
Ce qui se passe à cette étape
1Console de supervision
2Traiter les flux dans le Collector
3Les deux flux existent et la collecte des logs n'est pas confondue avec celle des traces.

À vérifier : Les deux flux existent et la collecte des logs n'est pas confondue avec celle des traces.

Point de vigilance ADN : Le simple ajout d'un pipeline logs ne collecte PAS les fichiers Logback ; configurer l'émetteur ou un receiver filelog adapté.

05

ÉTAPE 5 / 5

Tester la recherche corrélée

Une corrélation est utilisable seulement si la recherche est bidirectionnelle.

  1. Depuis la trace, copier le trace_id réel, filtrer les logs sur sa valeur exacte et relever le service.
  2. Depuis un journal corrélé, ouvrir la trace et vérifier service.name, période et span_id.
  3. Tester une requête sans contexte et documenter les limites de sampling, rétention et parsing.
Exemple techniqueÀ adapter à votre environnement
# Dans la recherche de logs du backend, filtrer :
# trace_id:<ID_DE_TRACE_OBSERVE>
# Le champ et la syntaxe de filtre dépendent du backend.
Ce qui se passe à cette étape
1Décision RUN
2Tester la recherche corrélée
3La même requête est identifiable depuis la trace et les logs, sur un jeu de test connu.

À vérifier : La même requête est identifiable depuis la trace et les logs, sur un jeu de test connu.

Point de vigilance ADN : Un ID partagé ne garantit pas une rétention identique des journaux et des traces.

05 · RECETTE

Comment vérifier que tout fonctionne ?

Résultat attenduContrôles avant de considérer la procédure terminée
01

traceparent est transmis entre au moins deux services de test.

02

Les logs émis pendant des spans possèdent trace_id et span_id non vides.

03

Les deux flux sont ingérés dans le backend ou vérifiés séparément en debug.

04

Un identifiant pris dans une trace permet de retrouver le journal correspondant.

05

Les données sensibles et la politique d'échantillonnage ont été vérifiées.

06 · DIAGNOSTIC

Problèmes fréquents et résolution

trace_id absent des logs

Cause probable : MDC non injecté ou pattern Logback incomplet

Que faire : Vérifier logger, agent Java, version et %X{trace_id}.

Traces liées à d'autres IDs

Cause probable : Contexte perdu entre services

Que faire : Inspecter l'en-tête W3C traceparent et les propagators.

Logs absents du backend

Cause probable : Pipeline de logs non configuré malgré les traces

Que faire : Vérifier shipper, receiver, exporter et parsing.

Une partie des traces manque

Cause probable : Échantillonnage ou rétention différents

Que faire : Comparer politiques de sampling et fenêtres de conservation.

Le conseil de l’expert ADN

Avant de généraliser cette configuration, validez-la sur un périmètre représentatif, documentez les critères de réussite et conservez une procédure de retour arrière. Une instrumentation utile se juge sur les données effectivement exploitables, pas sur la seule installation de l’outil.

07 · QUESTIONS PRATIQUES

Questions fréquentes

Le Collector relie-t-il automatiquement un fichier Logback à une trace ?

Non. Le contexte doit être présent dans les logs, et le flux journal doit être collecté puis indexé.

Peut-on appliquer ce pattern à Node.js ou Python ?

Non directement : adapter l'instrumentation et le logger à chaque langage.

Pour aller plus loin