RousselTMLEARNING

TP · Opentelemetry : de la découverte à l'expertise

TP : Profiler une application et relier profils et traces

Ce que vous allez apprendre dans ce TP
  • Envoyer des profils continus
  • Lire un flame graph
  • Relier spans et profils

Introduction #

Ce que vous allez apprendre dans cette section
  • Envoyer des profils continus
  • Lire un flame graph
  • Relier spans et profils

Contexte. Un service de calcul de remises est lent et coûteux en CPU, mais ses traces montrent seulement un span long. Vous ajoutez le quatrième signal pour trouver la ligne responsable.

Prérequis : Docker et Python 3.10 ou plus ; la pile grafana/otel-lgtm (Collector, Tempo, Loki, Prometheus, Pyroscope et Grafana dans un seul conteneur)  ·  Durée estimée : 45 min

Un goulet d'étranglement identifié dans le code grâce au lien span-profil, puis corrigé et mesuré.

Mise en place #

Étapes guidées, avec leur correction.

  1. 1. Démarrer la pile d'observabilité

    Pourquoi ? Une seule image fournit un Collector OTLP et tous les backends : on se concentre sur le signal.

    Lancez grafana/otel-lgtm, créez un environnement Python et pointez les exportateurs vers le port OTLP/HTTP 4318.
  2. 2. Un service lent

    Pourquoi ? Le code contient un défaut classique : une expression régulière recompilée et une concaténation coûteuse à chaque appel.

    Installez le SDK Pyroscope et son intégration OpenTelemetry, puis écrivez remises.py : traces vers Tempo, profils vers Pyroscope avec le même nom de service, et le PyroscopeSpanProcessor.
  3. 3. Lire le flame graph

    Pourquoi ? Le flame graph montre où le CPU est réellement consommé, sans ajouter un seul span.

    Dans Explore > Pyroscope (ou Drilldown > Profiles), sélectionnez l'application remises et le type CPU. Identifiez les plateaux les plus larges et la part de code_valide et de re.compile.
  4. 4. Du span au profil

    Pourquoi ? Le span processor étiquette les échantillons avec le span_id : on obtient le profil d'une requête précise.

    Dans Tempo, ouvrez une trace calculer remise longue et utilisez Profiles for this span. Si le lien n'apparaît pas, configurez Trace to profiles dans la source de données Tempo (source Pyroscope, type CPU).
  5. 5. Corriger et comparer

    Pourquoi ? Le profil prouve l'effet d'une optimisation, au lieu de le supposer.

    Compilez l'expression une seule fois au niveau du module et remplacez la concaténation par ';'.join(). Relancez, puis comparez les deux périodes avec la vue Diff de Pyroscope et la durée des spans dans Tempo.
  6. 6. Situer les profils OpenTelemetry

    Pourquoi ? Le SDK Pyroscope est une solution éprouvée ; le signal OTLP Profiles vise à unifier la collecte, mais n'est pas encore stable.

    Consultez la page de statut du signal profiles sur opentelemetry.io et la documentation du profileur eBPF OpenTelemetry. Rédigez en trois lignes ce qu'il faudrait pour remplacer le SDK par le profileur eBPF et un Collector, puis arrêtez la pile.

Niveau de difficulté : ●●●○○ (3/5)

Mon suivi

  • ⏱ Durée estimée : ≈ 45 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

✉️ Poser une question

Articles recommandés

Les traces OpenTelemetry en profondeur : spans, statuts, événements, liens et échantillonnage

Maîtriser le signal trace : anatomie d'une trace distribuée, span et SpanKind, attributs, statut ...

APM Datadog et OpenTelemetry : traces, services et corrélation avec les logs

Instrumenter ses applications pour l'APM Datadog (dd-trace, instrumentation en une étape, OpenTel...

Instrumenter ses applications pour Pyroscope : SDK, Alloy et eBPF

Envoyer des profils à Pyroscope depuis Go, Java, Python et Node.js avec les SDK, collecter les po...

Les logs avec OpenTelemetry : modèle de données, appenders, corrélation et collecte

Maîtriser le signal log : modèle de données LogRecord, Logs Bridge API et appenders (Logback, Log...

APM Datadog avancé : échantillonnage, rétention, profiler et Software Catalog

Aller plus loin avec l'APM Datadog : contrôle d'ingestion et échantillonnage, filtres de rétentio...

Envoyer des traces vers Tempo : instrumentation OpenTelemetry et Alloy

Produire et acheminer des traces vers Tempo : auto-instrumentation Python/Java/Node, SDK manuel, ...

Installer Phoenix et tracer sa première application LLM

Installer Arize Phoenix (pip, Docker), envoyer ses premières traces OpenInference depuis une appl...

Du clic à la base de données : traces front-end vers back-end avec Faro

Relier les requêtes du navigateur aux traces du back-end : TracingInstrumentation, propagation de...

OpenTelemetry Collector : les Exporters (envoyer la télémétrie vers les backends)

Configurer les exporters du Collector OpenTelemetry : OTLP gRPC/HTTP, Prometheus, prometheusremot...

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 !