RousselTMLEARNING

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

Les profils, le quatrième signal

1. Pourquoi un quatrième signal #

Ce que les traces ne disent pas.

Le profilage continu #

Une trace montre qu'un span a duré 2,3 secondes, mais pas quelle ligne de code a consommé ce temps. Le profilage échantillonne régulièrement (par exemple 20 à 100 fois par seconde) les piles d'appels des processus pour mesurer où partent le CPU, la mémoire allouée, les verrous ou les entrées-sorties. Le profilage continu le fait en permanence en production, avec un surcoût de l'ordre de 1 à 2 %.

Type de profilRépond à
CPUquelles fonctions consomment le processeur ?
Allocation mémoirequi alloue le plus (pression sur le ramasse-miettes) ?
Mémoire utilisée (heap)qui retient la mémoire (fuite) ?
Verrous / mutexoù les threads attendent-ils ?
Wall clockoù le temps réel passe-t-il, attentes comprises ?

Lire un flame graph #

Flame graph
Ici, la compilation d'une expression régulière à chaque appel coûte 26 % du CPU.
  • L'axe horizontal n'est pas le temps : c'est la part des échantillons, triée alphabétiquement.
  • Chaque niveau est un appel de fonction ; les enfants sont au-dessus de leur parent (ou en dessous, selon l'outil).
  • Une barre large sans enfants (« plateau ») est une fonction qui consomme elle-même : c'est la cible d'optimisation.

2. Les profils dans OpenTelemetry #

Un signal en cours de standardisation.

Ce qui existe #

BriqueÉtat (à vérifier sur opentelemetry.io)
Modèle de données et OTLPsignal profiles ajouté à OTLP, inspiré de pprof, avec déduplication des piles et lien vers trace_id/span_id ; statut développement/alpha
Profileur eBPFprofileur système donné par Elastic au projet en 2024 : profile tous les processus d'un hôte sans instrumentation (Go, Java, Python, Node.js, .NET, Rust, C/C++…)
Collectorreceivers et exportateurs de profils derrière une option d'activation (feature gate) ; distribution du profileur eBPF sous forme de Collector
SDK de langagepas encore d'API Profiles stable : on utilise des agents ou les SDK des outils (Pyroscope, async-profiler…)
BackendsGrafana Pyroscope, Elastic Universal Profiling, Datadog, Polar Signals… acceptent ou annoncent l'OTLP Profiles
Erreur Courante : Le signal profile n'est pas encore stable : formats et options peuvent changer d'une version à l'autre. En production, utilisez les intégrations éprouvées de votre backend et suivez l'évolution d'OTLP Profiles.

Activer les profils dans un Collector récent #

# feature gate à passer au démarrage du Collector (nom susceptible d'évoluer)
otelcol-contrib --config config.yaml --feature-gates=service.profilesSupport

# config.yaml : un pipeline de profils comme les autres
service:
  pipelines:
    profiles:
      receivers: [otlp]
      exporters: [otlp/pyroscope]

3. Relier profils et traces #

Le vrai gain : la corrélation.

Span profiles #

Du span au profil
Depuis Grafana Tempo, le bouton « Profiles for this span » ouvre le flame graph du span.

Le profileur étiquette chaque échantillon avec le span_id actif. Il devient possible d'afficher le profil d'une requête lente précise plutôt que celui de tout le processus. Avec Pyroscope, un span processor ajoute ce lien :

import pyroscope
from pyroscope.otel import PyroscopeSpanProcessor

pyroscope.configure(application_name="checkout",            # identique à service.name
                    server_address="http://pyroscope:4040",
                    tags={"env": "production"})
provider.add_span_processor(PyroscopeSpanProcessor())       # étiquette les profils avec le span_id

Les cas d'usage #

  • Expliquer une régression de latence entre deux versions (comparaison de flame graphs).
  • Réduire la facture cloud : 10 % de CPU en moins sur 200 instances.
  • Trouver une fuite mémoire avant le redémarrage forcé (OOM).
  • Comprendre un span lent sans ajouter de spans manuels partout.

4. Mettre en place #

Commencer simplement.

Démarche #

  1. Choisir un backend de profils (Pyroscope est intégré à la pile Grafana).
  2. Profiler sans instrumentation avec un agent eBPF (profileur OpenTelemetry, Alloy pyroscope.ebpf) pour obtenir une vue de toute la flotte.
  3. Ajouter les SDK de profilage aux services critiques pour les profils mémoire et la corrélation span-profil.
  4. Utiliser les mêmes service.name et attributs de ressource que les autres signaux.
  5. Suivre la stabilisation d'OTLP Profiles pour unifier la collecte dans le Collector.
À savoir : La formation Grafana Pyroscope détaille l'installation, les SDK et l'analyse des profils.

📄 Les profils, le quatrième signal d'OpenTelemetry : profilage continu et corrélation avec les traces →

Mon suivi

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

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

✉️ Poser une question

Articles recommandés

DQL en pratique : explorer logs et événements, notebooks, tableaux de bord et performance

Utiliser le Dynatrace Query Language au quotidien : explorer logs et événements, enchaîner les co...

La rétention des données dans Dynatrace : Grail, buckets et durées par type de données

Comprendre combien de temps Dynatrace conserve logs, traces, métriques, sessions et événements, g...

Créer des tableaux de bord dans Zabbix : dashboards, widgets et pages

Construire des dashboards Zabbix utiles : pages, widgets (Graph, Problems, Top hosts, Honeycomb, ...

Tableaux de bord Grafana avec la source de données Zabbix

Afficher Zabbix dans Grafana : installer le plugin, créer un utilisateur et un jeton d'API, confi...

Bindplane : gérer ses pipelines de télémétrie OpenTelemetry

Comprendre Bindplane : plan de contrôle des collecteurs OpenTelemetry via OpAMP, BDOT Collector, ...

OpenTelemetry Collector, Grafana Alloy et Bindplane : comparer trois approches des pipelines de télémétrie

Comparatif détaillé de trois façons de gérer des pipelines de télémétrie : l'OpenTelemetry Collec...

Installer Bindplane : serveur, BDOT Collector et connexion OpAMP

Installer le serveur Bindplane (Docker Compose, Linux, Kubernetes), connecter des collecteurs BDO...

Configurations Bindplane : sources, processeurs, destinations et versions

Construire des configurations Bindplane : sources, processeurs et destinations, éditeur de pipeli...

Réduire, masquer et router la télémétrie avec Bindplane

Réduire les coûts d'ingestion avec Bindplane : filtres de sévérité, déduplication, échantillonnag...