RousselTMLEARNING

Observabilité

Instrumenter ses applications pour Jaeger avec OpenTelemetry

Envoyer des traces à Jaeger avec OpenTelemetry : auto-instrumentation (Java, Python, Node.js), SDK et spans manuels, variables d'environnement, attributs, propagation et application de démonstration HotROD.

1. Les variables d'environnement #

La configuration commune à tous les langages.

Variables OTEL #

VariableExemple
OTEL_SERVICE_NAMEcommandes
OTEL_EXPORTER_OTLP_ENDPOINThttp://jaeger:4318
OTEL_EXPORTER_OTLP_PROTOCOLhttp/protobuf ou grpc
OTEL_RESOURCE_ATTRIBUTESdeployment.environment=production,service.version=2.4.1
OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARGparentbased_traceidratio, 0.1
OTEL_PROPAGATORStracecontext,baggage
Bonne Pratique : Jaeger reçoit l'OTLP nativement : aucune bibliothèque spécifique à Jaeger n'est nécessaire. Le même code peut envoyer à Jaeger, Tempo, Elastic ou SigNoz en changeant une variable.

2. Auto-instrumentation #

Des traces sans modifier le code.

Java #

curl -LO https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar
OTEL_SERVICE_NAME=commandes OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318 \
  java -javaagent:opentelemetry-javaagent.jar -jar commandes.jar

Python #

pip install opentelemetry-distro opentelemetry-exporter-otlp
opentelemetry-bootstrap -a install          # installe les instrumentations des bibliothèques présentes
OTEL_SERVICE_NAME=stock OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318 \
  opentelemetry-instrument python app.py

Node.js #

npm install @opentelemetry/auto-instrumentations-node
OTEL_SERVICE_NAME=front OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318 \
  node --require @opentelemetry/auto-instrumentations-node/register server.js

3. Spans manuels #

Ajouter le contexte métier.

Python #

from opentelemetry import trace

tracer = trace.get_tracer("stock")

def reserver(produit_id, quantite):
    with tracer.start_as_current_span("reserver_stock") as span:
        span.set_attribute("produit.id", produit_id)
        span.set_attribute("stock.quantite", quantite)
        try:
            ...
        except RuptureDeStock as e:
            span.record_exception(e)
            span.set_status(trace.Status(trace.StatusCode.ERROR, "rupture"))
            raise
Erreur Courante : N'ajoutez pas de données personnelles (e-mail, nom) dans les attributs : les traces sont souvent conservées et consultées largement.

L'application HotROD #

HotROD (« Rides on Demand ») est l'application de démonstration de Jaeger : quatre microservices simulés, des latences et erreurs réalistes, des problèmes à diagnostiquer. Elle est idéale pour apprendre à lire des traces.

docker run --rm -p 8080:8080 -e OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318 jaegertracing/example-hotrod:latest all

Articles liés

Le tracing distribué avec Jaeger : concepts et architecture

Les concepts du tracing distribué (trace, span, contexte, propagation) et Jaeger : son histoire, son architec…

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_…

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

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !