Aller au contenu principal

Traces

Objectifs

  • Estimer son travail
  • Explorer les traces avec Jaeger
  • Instrumenter une application Python (FastAPI) avec OpenTelemetry
  • Configurer un Collector pour exporter les traces vers Jaeger
  • Instrumenter une base de données PostgreSQL avec OpenTelemetry

Rendu

Tâches

Estimer son travail

  • Estimez le temps nécessaire pour réaliser ce laboratoire
    • Découpez le travail en tâches pour faciliter l'estimation
  • Lorsque vous aurez terminé le laboratoire, comparez le temps estimé avec le temps réellement passé
TâcheTemps estiméTemps réelCommentaire
Estimation10m15m...
............
Total2h1h30...

Démonstration sur Docker Compose

Déployer la démonstration suivante sur votre machine : https://opentelemetry.io/docs/demo/docker-deployment/

Suivre le scénario suivant : https://opentelemetry.io/docs/demo/scenarios/recommendation-cache/

Instrumenter FastAPI (+ PostgreSQL)

Reprendre le projet HEIG-VD DevOps et instrumenter le backend avec OpenTelemetry

from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor

...

tracerProvider = TracerProvider()
tracerProvider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter()))
trace.set_tracer_provider(tracerProvider)
FastAPIInstrumentor.instrument_app(app)
  • Pour afficher les spans dans la console (debug), vous pouvez ajouter le ConsoleSpanExporter :
from opentelemetry.sdk.trace.export import ConsoleSpanExporter

...

trace.get_tracer_provider().add_span_processor(ConsoleSpanExporter())
  • Ajouter les variables d'environnement suivantes :
    • OTEL_RESOURCE_ATTRIBUTES: service.name=backend-service pour le nom de notre service dans les traces
    • OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger:4317 pour la destination des traces (Jaeger ou OpenTelemetry Collector)

Ajouter Jaeger au Docker Compose

  • On a besoin d'activer OpenTelemetry en ajoutant la variable d'environnement COLLECTOR_OTLP_ENABLED=true
  • Jaeger UI: http://localhost:16686

Ajouter un Collector au Docker Compose

receivers:
otlp:
protocols:
grpc:
http:

processors:
batch:

exporters:
otlp/jaeger:
endpoint: jaeger:4317
tls:
insecure: true

service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp/jaeger]
  • Le Collector est un adaptateur qui permet de recevoir des traces de différents formats et de les exporter vers différents formats. Dirigez les traces du backend vers le Collector pour vérifier que Jaeger les reçoit bien aussi.

En bonus, instrumenter la database PostgreSQL avec le Collector

  • Configurer l'exportation des metrics vers Prometheus
  • Vous pourrez observer les metrics postgresql_* dans Prometheus (et Grafana), par exemple postgresql_commits_total ou postgresql_rows
Question

Dans quels cas le collector est en mode pull ou push ?

Références