Aller au contenu

Logs et traces

Structured logging, centralisation, traces distribuées et OpenTelemetry.


Structured logging

Le logging structure consiste à produire des logs en format machine-readable (JSON) plutôt que du texte libre.

Texte vs JSON

Critère Texte libre JSON structure
Lisibilite humaine Bonne Moyenne (avec outils)
Requetabilite Regex fragile Filtres précis sur champs
Parsing Regex sur chaque format Schéma cohérent
Agrégation Difficile Native

Champs standards recommandes

Champ Description Exemple
timestamp Date ISO 8601 2024-03-15T10:23:45Z
level Sévérité info, warn, error
service Nom du service émetteur payment-api
trace_id Identifiant de trace abc123def456
request_id Identifiant de requête req-789xyz
message Message lisible Order processed
error Erreur éventuellement timeout after 5s

Correlation ID obligatoire

Sans trace_id ou request_id dans les logs, retrouver tous les logs d'une requête traversant plusieurs services est quasi impossible. Propagez le contexte systematiquement.


Centralisation des logs

graph LR
    A["Application A"] --> AG["Agent\n(Fluentd / Vector)"]
    B["Application B"] --> AG
    C["Systeme / OS"] --> AG
    AG --> AGG["Agregateur\n(Loki / Elasticsearch)"]
    AGG --> ST["Stockage\n(S3 / disque)"]
    AGG --> Q["Requetes\n(Grafana / Kibana)"]
    Q --> OP["Operateurs"]

Stacks de centralisation des logs

Stack Composants Points forts
PLG (Grafana) Promtail + Loki + Grafana Léger, intégré Grafana, pas de full-text search
ELK Filebeat + Elasticsearch + Kibana Full-text search puissant, coûteux en ressources
EFK Fluentd + Elasticsearch + Kibana Fluentd plus flexible que Filebeat
Graylog Sidecar + Graylog + MongoDB Interface opérationnelle, alerting intégré

Traces distribuées

Une trace représenté le chemin complet d'une requête à travers plusieurs services.

Concepts

Concept Définition
Trace Ensemble de spans représentant une requête de bout en bout
Span Unite de travail dans un service (une opération, un appel DB)
Parent span Span qui a initié les spans enfants
Propagation Transmission du contexte de trace entre services (headers HTTP)
Sampling Fraction des traces effectivement collectees

Propagation de contexte

Le contexte de trace se propagé via des headers HTTP standardises (W3C Trace Context) :

  • traceparent : identifiant de trace et span courant
  • tracestate : données vendeur spécifiques

Sans propagation correcte, les spans de différents services ne peuvent pas être assembles en trace cohérente.


OpenTelemetry

OpenTelemetry (OTel) est le standard CNCF unifiant la collecte de logs, métriques et traces.

Architecture

Composant Rôle
API Interface d'instrumentation dans le code applicatif
SDK Implémentation de l'API par langage
Collector Agent/gateway recevant, transformant et exportant les telemetries
OTLP Protocole de transport universel

Avantages

  • Un seul SDK par langage pour les 3 signaux (logs, métriques, traces)
  • Vendor-neutral : exporter vers Jaeger, Zipkin, Prometheus, Datadog...
  • Auto-instrumentation disponible pour les frameworks majeurs
  • Standard CNCF avec adoption massive

OpenTelemetry est le futur

Les SDK propriétaires (Datadog, Jaeger natif) sont en recul face à OTel. Instrumentez avec OTel et choisissez le backend independamment. Cela evite le vendor lock-in sur l'instrumentation.


Correlation logs / métriques / traces

La vraie valeur de l'observabilité vient de la correlation entre les 3 piliers.

Scenario Piliers utilisés
Alerte latence p99 en hausse Métrique → trace (trouver la requête lente)
Erreur 500 mysterieuse Métrique → log (message d'erreur) → trace (appel échoué)
Dégradation après déploiement Métrique (avant/après) + annotation + log (exception)

Correlation pratique

  • Ajouter le trace_id dans les logs permet de passer d'un log à la trace complète en un clic
  • Grafana permet de naviguer entre Loki (logs), Prometheus (métriques) et Tempo (traces) avec un identifiant commun

Outils

Outil Catégorie Notes
OpenTelemetry Collector Agent universel Standard CNCF recommande
Jaeger Traces Open source, CNCF graduated
Zipkin Traces Simple, historique
Grafana Tempo Stockage traces Intégré PLG, bas coût
Loki Logs Léger, labels comme Prometheus
Elasticsearch Logs + recherche Puissant mais lourd
Vector Agent logs/métriques Performant, configuration flexible