FrameworksAgents.com Logo

OpenTelemetry pour agents IA : guide 2026

Guidecalendar_todayPublié le 10 septembre 2026schedule11 min de lecturetracing agents iaopentelemetry llm

OpenTelemetry pour agents IA : quand standardiser traces et spans, et quand un SDK plus simple suffit pour démarrer.

Introduction

OpenTelemetry agents IA devient un vrai sujet dès qu'un agent cesse d'être un prototype isolé pour s'insérer dans un système multi-services. Le standard ouvert promet des traces, métriques et logs portables entre backends, sans coupler l'observabilité à un éditeur précis dès le premier jour. Si vous n'avez qu'un seul script Python qui appelle un LLM, ce n'est probablement pas le bon choix de monter une stack OpenTelemetry pour agents IA tout de suite : restez sur des logs applicatifs et un SDK plus léger. L'objectif de ce guide est de vous aider à trancher : à quel moment le standard devient un vrai levier, et à quel moment il ne fait qu'ajouter de la surface à maintenir.

Résumé rapide

SituationOpenTelemetry (OTel)SDK vertical (Langfuse, Phoenix…)Logs applicatifs seuls
1 agent, 1 service, < 5 outilsSurdimensionnéSurdimensionnéBon choix par défaut
2–4 services autour de l'agentBon choix pour corrélerAcceptable, mais vendor lock-inDifficile à debugger
Workflow multi-agents + workersTrès bon choixBon choix, couplé au vendorInsuffisant
Besoin de router les traces vers 2+ backendsTrès bon choix (OTLP)LimitéNon applicable
Coût d'observabilité déjà élevéMoyen : exporter et échantillonnerÉlevé sur volumeQuasi nul

À retenir vite : OpenTelemetry n'est pas un outil, c'est une couche de portage. Sa valeur apparaît quand vous voulez choisir votre backend, corréler plusieurs services ou migrer sans réécrire l'instrumentation. Pour un seul service, il est presque toujours trop tôt.

Ce que couvre réellement OpenTelemetry pour un agent IA

OpenTelemetry (OTel) est un projet CNCF qui standardise la production et l'export de traces, métriques et logs vers un backend d'observabilité. Pour un agent, cela se traduit concrètement par :

  • une span par appel LLM, avec le modèle, le nombre de tokens, la latence et le coût estimé ;
  • une span par appel d'outil (recherche web, RAG, API métier), rattachée à la span parente ;
  • un trace_id partagé entre l'agent, le worker qui l'exécute, l'API qui l'a déclenché et le front qui l'appelle ;
  • des métriques agrégées (taux d'erreur, tokens/s, coût par requête) exportables vers Prometheus, Grafana, Datadog, Honeycomb, etc.

L'API OTel est neutre. Le SDK s'instrumente dans le code de l'agent, puis l'OTLP exporter envoie les données vers le backend de votre choix. C'est cette neutralité qui rend le standard utile : vous pouvez commencer avec un backend gratuit, puis basculer sans réécrire l'instrumentation. Pour comprendre comment cet arbitrage s'inscrit dans une vision plus large, la lecture de Observabilité agents IA en production pose le décor complet de la stack d'observabilité agentique, et Evals vs observabilité agents IA clarifie ce que OTel couvre — et ce qu'il ne couvre pas.

Concrètement, OTel ne réinvente pas la roue pour les agents : il réutilise les conventions de tracing classiques (HTTP, gRPC, bases de données) et y ajoute progressivement des conventions GenAI. Ces conventions définissent des attributs stables pour les spans LLM (gen_ai.system, gen_ai.request.model, gen_ai.usage.input_tokens, etc.), ce qui permet à un backend compatible d'afficher automatiquement des vues LLM sans avoir à interpréter un schéma propriétaire. Si vous instrumentez votre agent en respectant ces conventions, vous gagnez à la fois la portabilité d'OTel et la lisibilité LLM qu'apporte un outil vertical — sans dépendre d'un éditeur en particulier.

Quand adopter OpenTelemetry et quand rester sur un SDK simple

Trois configurations où le standard apporte un vrai levier

1. Vous opérez plusieurs services autour de l'agent. Un agent moderne n'est jamais seul : il y a l'API qui reçoit la requête, le service de mémoire, le vector store, le worker asynchrone, parfois un orchestrateur de workflows. Sans standard, vous recollez les logs à la main. Avec OTel, chaque service émet ses spans, et le backend reconstruit la timeline complète à partir d'un trace_id propagé par headers HTTP ou contexte asynchrone.

2. Vous voulez éviter le couplage à un éditeur. Les SDK verticaux comme Langfuse ou Arize Phoenix sont excellents sur leur périmètre, mais leurs propres schémas d'événements restent attachés à leur plateforme. Si vous changez de backend ou si vous devez en combiner plusieurs, vous réécrivez l'instrumentation. OTel vous laisse cette porte ouverte.

3. Vous voulez corréler l'agent avec l'observabilité classique. Les équipes plateforme ont déjà Prometheus, Grafana, Datadog ou Honeycomb. En adoptant OTel, l'agent devient une brique comme une autre : mêmes dashboards, mêmes alerting, même culture d'observabilité. C'est le levier le plus sous-estimé : la réduction du coût cognitif pour les SRE qui doivent débugger un incident impliquant l'agent.

Trois cas où il vaut mieux rester sur un SDK vertical ou plus simple

Vous n'avez qu'un seul service et peu de volume. Le coût d'instrumentation OTel (dépendances, configuration, sampling, OTLP exporter) ne se justifie pas. Un SDK vertical qui capture automatiquement les appels LLM vous apporte 80 % de la valeur en 10 % du temps.

Vous avez besoin d'analyses spécifiques aux LLM. Les SDK verticaux exposent des vues préconstruites : qualité des prompts, drift des réponses, evals, comparaison de modèles. Reproduire cela dans Grafana avec OTel brut demande du travail. Sur ce périmètre, l'outil vertical gagne.

Vous êtes en phase d'exploration. Avant de figer une stack, vous voulez comparer rapidement plusieurs approches. Brancher OTel ajoute du bruit de configuration. Mieux vaut des logs JSON structurés et un SDK léger, puis migrer vers OTel quand l'architecture se stabilise.

Dans ces trois cas, le piège classique consiste à instrumenter trop tôt, à subir la dette de configuration pendant trois sprints, puis à abandonner OTel en gardant un hybride bancal. Mieux vaut décider explicitement : ou bien le standard dès le premier service qui prend de l'ampleur, ou bien un SDK léger jusqu'à la stabilité de l'architecture. Une fois la stack stabilisée, la migration vers OTel reste progressive et peu coûteuse.

Tableau de décision rapide selon maturité observabilité

Maturité de votre stackChoix recommandéPourquoi
Prototype, 1 service, < 100 requêtes/jourLogs JSON + SDK légerOTel est surdimensionné
MVP, 1 service, volume en croissanceSDK vertical (Langfuse, Phoenix)Démarrage rapide, vues LLM natives
Production, 2–4 services, besoin de corrélationOTel + backend existantCorrélation native, portage entre backends
Production, multi-agents, SLOs strictsOTel + SDK vertical sur les spans LLMLe meilleur des deux mondes
Multi-cloud, audit, contraintes réglementairesOTel + collecteur + backend open sourceSouveraineté des données, format ouvert

Exemple concret : instrumenter un agent multi-services avec OTel

Prenons un cas réel : un agent support qui répond à des tickets. Trois services coopèrent — une API FastAPI qui reçoit le ticket, un worker qui exécute l'agent, et un service RAG qui interroge un vector store. L'objectif : voir en un coup d'œil quel service a ralenti lors d'un incident.

Étape 1 — Installer le SDK et l'auto-instrumentation.

pip install opentelemetry-sdk \
            opentelemetry-exporter-otlp \
            opentelemetry-instrumentation-fastapi \
            opentelemetry-instrumentation-httpx

Étape 2 — Configurer le tracer une fois pour toutes.

from opentelemetry import trace
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter

provider = TracerProvider(
    resource=Resource.create({"service.name": "support-agent-api"})
)
provider.add_span_processor(
    BatchSpanProcessor(OTLPSpanExporter(endpoint="http://otel-collector:4317"))
)
trace.set_tracer_provider(provider)

Étape 3 — Instrumenter l'agent avec des spans explicites.

from opentelemetry import trace

tracer = trace.get_tracer("support-agent")

def handle_ticket(ticket_id: str):
    with tracer.start_as_current_span("agent.run") as span:
        span.set_attribute("ticket.id", ticket_id)

        with tracer.start_as_current_span("rag.retrieve"):
            context = rag.search(ticket_id)

        with tracer.start_as_current_span("llm.generate") as llm_span:
            response = llm.complete(context, ticket_id)
            llm_span.set_attribute("llm.model", "gpt-4o")
            llm_span.set_attribute("llm.tokens", response.usage.total_tokens)

Étape 4 — Propager le contexte entre services. Avec l'auto-instrumentation opentelemetry-instrumentation-httpx, chaque appel HTTP propage automatiquement les headers traceparent et tracestate. Le backend reconstruit la timeline complète : ticket reçu → RAG → LLM → réponse, sur un seul diagramme.

Étape 5 — Configurer le collecteur OTel. En production, on ne laisse jamais les services écrire directement dans le backend : on passe par un OpenTelemetry Collector qui reçoit l'OTLP, déduplique, échantillonne et route vers le bon backend (Grafana Tempo, Datadog, Honeycomb). Le collector permet aussi d'enrichir les spans avec des métadonnées d'environnement (deployment.environment, k8s.pod.name) avant export.

Étape 6 — Définir les conventions GenAI sur les spans explicites. Pour que les spans LLM soient interprétables par n'importe quel backend, fixez les attributs recommandés par les conventions OpenTelemetry GenAI : gen_ai.system (ex. openai), gen_ai.request.model, gen_ai.usage.input_tokens et gen_ai.usage.output_tokens. Cela évite d'avoir à interpréter un schéma maison et prépare la migration vers un autre backend sans réécrire l'instrumentation.

Résultat attendu : en cas de pic de latence, vous identifiez en quelques secondes si le goulot d'étranglement vient du RAG, du LLM ou du réseau — sans avoir à corréler des logs de trois services différents.

Bonnes pratiques

Trois règles terrain pour ne pas se planter avec OTel sur des agents.

Échantillonnez dès que le volume dépasse quelques centaines de requêtes par minute. L'export OTLP coûte cher en egress et en stockage. Un sampling head-based à 10 % suffit en général pour les requêtes saines, et conservez 100 % sur les erreurs. Le pattern inverse (100 % par défaut, sampling à la baisse) est plus simple mais brûle le budget.

Propagez systématiquement le contexte via HTTP et files de messages. Sans propagation, chaque service émet ses propres traces orphelines. La valeur d'OTel est dans la corrélation. Configurez l'auto-instrumentation sur les clients HTTP, gRPC et les workers asynchrones dès le départ, même si vous ne l'exploitez pas tout de suite.

Séparez les attributs techniques des attributs métier. Sur la span llm.generate, gardez llm.model, llm.tokens, llm.latency. Les attributs métier (score de satisfaction, intent détecté, présence d'un tool call) vont dans des events ou dans une plateforme d'evals. Mélanger les deux pollue les dashboards.

Limite connue : OTel ne sait pas juger la qualité d'une réponse. Il vous dit que l'agent a répondu en 1,2 s avec 800 tokens, pas si la réponse est correcte. Pour cela, gardez un SDK vertical ou une plateforme d'evals en complément — par exemple, le guide Queues pour agents IA : quand passer à l'asynchrone montre comment instrumenter ces workers avec OTel sans perdre la propagation du contexte.

Versionnez votre instrumentation comme du code applicatif. Les changements d'attributs ou de sampling sont des décisions techniques : documentez-les dans le repo, associez-les à un changeset, et prévenez l'équipe plateforme avant de modifier la config du collecteur. Une instrumentation OTel qui change silencieusement casse souvent les dashboards et les alertes qui en dépendent, et le diagnostic prend plus de temps que l'incident initial.

Questions fréquentes

Qu'est-ce qu'OpenTelemetry apporte de plus qu'un SDK vertical ?

OpenTelemetry est une couche de portage neutre vis-à-vis du backend. Un SDK vertical comme Langfuse ou Phoenix est couplé à son propre backend et à ses propres schémas d'événements. OTel vous laisse exporter vers plusieurs backends, migrer sans réécrire l'instrumentation, et réutiliser votre stack d'observabilité existante.

OpenTelemetry est-il gratuit ?

La spécification, les SDK et les protocoles (OTLP) sont open source et gratuits. Le coût vient du backend vers lequel vous exportez les données (Datadog, Honeycomb) et du volume ingéré. Pour démarrer sans frais, un collecteur OTel auto-hébergé vers Grafana Tempo ou Jaeger suffit.

Faut-il adopter OpenTelemetry dès le premier agent ?

Non. Pour un prototype ou un MVP mono-service, un SDK léger ou un outil vertical est plus rapide à mettre en place. Adoptez OTel quand vous avez au moins deux services à corréler, ou quand vous voulez éviter le couplage à un éditeur précis. Plus tôt, c'est du travail qui ne paie pas encore.

OpenTelemetry remplace-t-il Langfuse ou Phoenix ?

Pas nécessairement. OTel gère les traces et métriques ; Langfuse et Phoenix gèrent aussi les analyses spécifiques aux LLM (qualité des prompts, evals, comparaison de runs). En production, beaucoup d'équipes combinent OTel pour la corrélation multi-services et un outil vertical pour les vues LLM natives.

Quels sont les pièges fréquents avec OTel sur des agents ?

Trois pièges classiques : oublier la propagation du contexte entre services, surdimensionner l'instrumentation sur un prototype mono-service, et confondre observabilité technique (traces) et observabilité produit (qualité des réponses). Le premier se corrige avec l'auto-instrumentation HTTP, le second en démarrant avec un SDK léger, le troisième en gardant un outil d'evals en complément.

Articles liés

OpenTelemetry pour agents IA n'est pertinent qu'à partir du moment où l'agent s'insère dans une stack multi-services. Pour cadrer d'abord la vision d'ensemble de l'observabilité agentique et comprendre où se place OTel, commencez par Observabilité agents IA en production. Pour comparer l'approche standard aux outils verticaux les plus utilisés, lisez Langfuse et Arize Phoenix. Pour bien distinguer ce qu'OTel voit de ce qu'une plateforme d'evals juge, le guide Evals vs observabilité agents IA est le complément direct. Enfin, si vous opérez déjà des workers asynchrones, Queues pour agents IA : quand passer à l'asynchrone montre comment propager le contexte OTel à travers une file sans casser la corrélation.

Restez informé sur les agents IA

Nouveaux tutoriels, comparatifs et guides pratiques directement dans votre boîte mail.

homeAccueilcodeFrameworkssmart_toyAgentsmenu_bookTutorielsTwitter