Démarrage rapide
Configurez OpenTelemetry à l’aide de variables d’environnement :claude_code.session.count, que Claude Code émet au démarrage d’une session. Pour vérifier une configuration réservée aux journaux, soumettez une invite et vérifiez l’événement claude_code.user_prompt.
Si rien n’arrive, démarrez Claude Code avec claude --debug-file <path> et vérifiez le journal qu’il écrit dans ce chemin. Claude Code signale les défaillances des exportateurs que vous configurez en tant qu’erreurs [3P telemetry], où 3P signifie tiers. Les lignes préfixées par [Anthropic telemetry] décrivent la télémétrie opérationnelle distincte d’Anthropic et n’indiquent pas un problème avec votre configuration.
Pour les options de configuration complètes, consultez la spécification OpenTelemetry.
Configuration de l’administrateur
Les administrateurs peuvent configurer les paramètres OpenTelemetry pour tous les utilisateurs via le fichier de paramètres gérés. Consultez la précédence des paramètres pour plus d’informations sur la façon dont les paramètres sont appliqués. Exemple de configuration des paramètres gérés :.claude/settings.json et .claude/settings.local.json d’un référentiel, donc un référentiel ne peut pas les utiliser pour activer la télémétrie, choisir où elle va ou capturer du contenu. Définissez-les dans les paramètres gérés, ou laissez chaque développeur les définir dans son shell ou ~/.claude/settings.json. Un référentiel peut toujours désactiver un signal en définissant son sélecteur d’exportateur, tel que OTEL_LOGS_EXPORTER, sur none, sauf si les paramètres gérés, un fichier --settings ou l’environnement à partir duquel vous lancez Claude Code définit cette variable.
Claude Code ne transmet pas les variables d’environnement OTEL_* aux sous-processus qu’il génère, y compris l’outil Bash, les hooks, les serveurs MCP et les serveurs de langage. Une application instrumentée par OpenTelemetry que vous exécutez via l’outil Bash n’hérite pas du point de terminaison de l’exportateur ou des en-têtes de Claude Code, donc définissez ces variables directement dans la commande si cette application doit exporter sa propre télémétrie.
Comment les paramètres gérés verrouillent la destination OTLP
Lorsque vous définissez une variableOTEL_EXPORTER_OTLP_* dans les paramètres gérés, Claude Code supprime les variables conflictuelles définies par les développeurs au démarrage et enregistre un avertissement dans le journal de débogage. Ce qu’il supprime dépend de la variable que vous définissez :
-
Points de terminaison : lorsque vous définissez
OTEL_EXPORTER_OTLP_ENDPOINT, Claude Code supprime tous les points de terminaison par signal définis par les développeurs. Les développeurs ne peuvent pas pointer un signal vers un collecteur différent, donc vous n’avez pas besoin de définir également les variables de point de terminaison par signal dans les paramètres gérés. -
Protocoles : lorsque vous définissez
OTEL_EXPORTER_OTLP_PROTOCOL, Claude Code supprime tous les protocoles par signal définis par les développeurs. -
Identifiants : lorsque vous définissez
OTEL_EXPORTER_OTLP_HEADERS,OTEL_EXPORTER_OTLP_CLIENT_KEYouOTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE, Claude Code supprime les versions par signal de cette variable définies par les développeurs, plus toutes les variables de point de terminaison définies par les développeurs, génériques ou par signal, car ces identifiants atteindraient autrement un collecteur que les paramètres gérés n’ont pas choisi. -
Sélecteurs d’exportateur :
OTEL_METRICS_EXPORTER,OTEL_LOGS_EXPORTERet leOTEL_TRACES_EXPORTERbêta suivent la précédence normale par clé. Un paramètre de développeur peut toujours désactiver un signal ou le basculer vers l’exportateur de console, donc définissez également les sélecteurs dans les paramètres gérés si vous avez besoin qu’ils soient verrouillés. Parmi les sources d’administrateur,OTEL_LOGS_EXPORTERsuit l’unité de télémétrie tandis que les deux autres sélecteurs fusionnent par clé. Nécessite Claude Code v2.1.223 ou version ultérieure. -
Points de terminaison de traçage bêta : avec le traçage bêta détaillé actif, Claude Code exporte les journaux et les traces vers
BETA_TRACING_ENDPOINTau lieu de passer par les exportateurs de journaux et de traces. Claude Code supprime donc unBETA_TRACING_ENDPOINTdéfini par le développeur chaque fois que l’un de ces paramètres gérés décide de la destination de l’un ou l’autre signal :- Un point de terminaison ou un identifiant générique ou de journaux/traces
- Un
otelHeadersHelper - Un sélecteur d’exportateur de journaux ou de traces défini sur
none,consoleou vide, des valeurs qui maintiennent le signal hors d’un collecteur CLAUDE_CODE_ENABLE_TELEMETRYdésactivé
BETA_TRACING_ENDPOINTdéfini par le développeur redirigait les journaux et les traces que le traçage bêta détaillé exporte même lorsque les paramètres gérés épinglaient le collecteur.
Détails de configuration
Variables de configuration communes
Ces variables configurent les exportateurs, les points de terminaison et le comportement d’export pour tous les déploiements. Si vous définissez une variable de point de terminaison ou de protocole par signal, commeOTEL_EXPORTER_OTLP_METRICS_ENDPOINT, Claude Code l’utilise à la place de la variable générique pour ce signal. Si vous définissez une variable d’en-têtes par signal, comme OTEL_EXPORTER_OTLP_METRICS_HEADERS, Claude Code la fusionne avec l’en-tête générique OTEL_EXPORTER_OTLP_HEADERS pour ce signal.
Sur les machines avec des paramètres gérés, consultez Comment les paramètres gérés verrouillent la destination OTLP pour voir ce que Claude Code supprime.
Pour les protocoles
http/protobuf et http/json, Claude Code envoie chaque demande d’export avec un en-tête Content-Length. Avant v2.1.212, les versions de Claude Code à partir de v2.1.191 envoyaient ces demandes avec un codage de transfert fragmenté ; Azure Monitor et d’autres points de terminaison qui nécessitent une longueur déclarée les rejetaient avec des erreurs 411 Length Required ou 400.
Authentification mTLS
La façon dont vous configurez les certificats clients pour l’exportateur OTLP dépend du protocole OTLP utilisé pour ce signal, défini viaOTEL_EXPORTER_OTLP_PROTOCOL ou le remplacement spécifique au signal. La même configuration s’applique aux métriques, journaux et traces.
Pour
grpc, le SDK OpenTelemetry lit les variables OTLP standard directement, donc les configurations existantes qui définissent les variables de métriques spécifiques au signal continuent de fonctionner. Sur les machines avec des paramètres gérés, Claude Code peut supprimer les identifiants et points de terminaison spécifiques au signal définis par le développeur au démarrage.
Contrôle de la cardinalité des métriques
Les variables d’environnement suivantes contrôlent les attributs inclus dans les métriques pour gérer la cardinalité :
Une cardinalité plus basse signifie généralement de meilleures performances et des coûts de stockage plus bas, mais des données moins granulaires pour l’analyse.
Traces (bêta)
Le traçage distribué exporte des spans qui lient chaque invite utilisateur aux demandes API et exécutions d’outils qu’elle déclenche, afin que vous puissiez afficher une demande complète sous forme d’une seule trace dans votre backend de traçage. Le traçage est désactivé par défaut. Pour l’activer, définissez à la foisCLAUDE_CODE_ENABLE_TELEMETRY=1 et CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1, puis définissez OTEL_TRACES_EXPORTER pour choisir où les spans sont envoyés. Les traces réutilisent la configuration OTLP commune pour le point de terminaison, le protocole, les en-têtes et mTLS. Sur les machines avec des paramètres gérés, Claude Code peut supprimer les identifiants et points de terminaison spécifiques au signal définis par le développeur au démarrage.
Les spans masquent le texte de l’invite utilisateur, les détails d’entrée des outils et le contenu des outils par défaut. Définissez
OTEL_LOG_USER_PROMPTS=1, OTEL_LOG_TOOL_DETAILS=1 et OTEL_LOG_TOOL_CONTENT=1 pour les inclure.
Lorsque le traçage est actif, les sous-processus Bash et PowerShell héritent automatiquement d’une variable d’environnement TRACEPARENT contenant le contexte de trace W3C du span d’exécution d’outil actif. Cela permet à tout sous-processus qui lit TRACEPARENT de placer ses propres spans sous la même trace, permettant le traçage distribué de bout en bout à travers les scripts et commandes que Claude exécute.
Lorsque le traçage est actif et que Claude Code est connecté directement à l’API Anthropic, chaque demande de modèle porte un en-tête W3C traceparent défini sur le contexte du span claude_code.llm_request, et l’en-tête traceresponse de l’API est enregistré comme un lien de span. Ensemble, ceux-ci connectent les spans côté client de Claude Code à la trace côté serveur via tout intermédiaire conforme. Les demandes HTTP MCP sortantes portent traceparent de la même manière. L’en-tête n’est pas envoyé aux fournisseurs tiers.
Par défaut, l’en-tête traceparent sur les demandes de modèle et MCP HTTP n’est envoyé que lorsque ANTHROPIC_BASE_URL n’est pas défini ou pointe vers l’API Anthropic, car certains proxies rejettent les en-têtes non reconnus. La variable TRACEPARENT du sous-processus est contrôlée par le même commutateur pour la cohérence. Si vous exécutez Claude Code via un proxy ANTHROPIC_BASE_URL personnalisé et souhaitez que le contexte de trace soit propagé, définissez CLAUDE_CODE_PROPAGATE_TRACEPARENT=1.
Dans le SDK Agent et les sessions non interactives démarrées avec -p, Claude Code lit également TRACEPARENT et TRACESTATE de son propre environnement au démarrage de chaque span d’interaction. Cela permet à un processus d’intégration de transmettre son contexte de trace W3C actif au sous-processus afin que les spans de Claude Code apparaissent comme des enfants de la trace distribuée de l’appelant. Les sessions interactives ignorent TRACEPARENT entrant pour éviter d’hériter accidentellement de valeurs ambiantes de CI ou d’environnements de conteneur.
Le contexte de trace entrant s’applique également aux événements. Dans les sessions SDK Agent et -p avec TRACEPARENT défini, chaque enregistrement de journal d’événement OTLP porte les valeurs trace_id et span_id qui le joignent à la trace de votre application, même lorsque l’exportateur de traces n’est pas configuré, afin que votre backend de journalisation puisse corréler les événements avec le reste de la trace.
Un enregistrement émis pendant qu’une interaction est active porte les ID du span d’interaction, même lorsque Claude Code l’émet en dehors du contexte asynchrone du span, comme dans un rappel d’invite de permission ou pour un enregistrement mis en mémoire tampon au démarrage et exporté ultérieurement. Un enregistrement émis sans span d’interaction actif porte directement les ID TRACEPARENT entrants. Avant v2.1.214, les enregistrements émis en dehors du contexte asynchrone du span portaient les ID TRACEPARENT entrants à la place des ID du span. Avant v2.1.212, les enregistrements d’événements émis en dehors d’un span actif ne portaient pas trace_id ou span_id.
Hiérarchie des spans
Chaque invite utilisateur démarre un span racineclaude_code.interaction. Les appels API, les appels d’outils et les exécutions de hooks sont enregistrés comme ses enfants. Les spans d’outils ont deux spans enfants : un pour le temps passé à attendre une décision de permission et un pour l’exécution elle-même. Lorsque l’outil Agent ou l’outil Task hérité génère un sous-agent, les spans API et d’outils du sous-agent s’imbriquent sous le span claude_code.tool du parent.
claude -p, claude_code.interaction lui-même devient un enfant du span de l’appelant lorsque TRACEPARENT est défini dans l’environnement.
Lorsqu’un hook PreToolUse reporte un appel d’outil, Claude Code enregistre le contexte de trace du tour qui l’a reporté. Lorsque vous reprenez la session et que l’outil s’exécute à nouveau, les spans de l’outil rejoignent la trace du tour antérieur en tant qu’enfants du span claude_code.interaction du tour.
Attributs des spans
Chaque span porte les attributs standard plus un attributspan.type correspondant à son nom. Les tableaux ci-dessous énumèrent les attributs supplémentaires définis sur chaque span. Les spans llm_request, tool.execution et hook définissent le statut OpenTelemetry ERROR lorsqu’ils enregistrent un échec ; les autres spans se terminent toujours avec le statut UNSET.
claude_code.interaction
claude_code.llm_request
Chaque tentative de nouvelle tentative est également enregistrée en tant qu’événement de span
gen_ai.request.attempt avec les attributs attempt et client_request_id.
claude_code.tool
Événement de span
tool.output sur claude_code.tool
Si vous définissez OTEL_LOG_TOOL_CONTENT=1, les appels Read et Bash peuvent enregistrer un événement de span tool.output sur le span claude_code.tool. Les appels Edit et Write en enregistrent un uniquement lorsque vous définissez également OTEL_LOG_TOOL_DETAILS=1. Cette variable n’est pas limitée à ces deux outils, donc vérifiez sa ligne dans le tableau de configuration pour les arguments qu’elle ajoute ailleurs.
Les outils MCP, WebFetch et WebSearch enregistrent également cet événement, sur Claude Code v2.1.283 ou ultérieur.
Claude Code écrit cet événement à partir du retour réussi d’un appel d’outil, donc un appel qui lève une erreur n’enregistre rien, quel que soit l’outil. Parmi les appels qui retournent, il n’enregistre aucun événement tool.output pour :
- Un appel à tout outil autre que Read, Edit, Write, Bash, WebFetch, WebSearch et les outils MCP
- Un Read qui retourne autre chose que du texte de fichier, comme une image, un PDF ou une relecture d’un fichier dont le contenu n’a pas changé
- Un appel Edit ou Write, sauf si vous définissez également
OTEL_LOG_TOOL_DETAILS=1 - Un appel WebFetch ou WebSearch que Claude Code a déplacé en arrière-plan parce que vous avez interrompu le tour pour envoyer vos messages en attente immédiatement pendant que l’appel s’exécutait. Claude reçoit ce résultat plus tard, après la fin du span d’outil
Contrôlé par nomme la variable dont un attribut a besoin en plus de OTEL_LOG_TOOL_CONTENT=1, et pour Edit et Write cette variable contrôle l’événement lui-même plutôt que l’attribut.
L’attribut
tool_name du span parent vous indique quel outil un événement provient. Un attribut coupé à la limite de contenu est accompagné de <attribute>_truncated et <attribute>_original_length.
claude_code.tool.blocked_on_user
claude_code.tool.execution
claude_code.hook
Ce span n’apparaît que lorsque le traçage bêta détaillé est actif, ce qui nécessite ENABLE_BETA_TRACING_DETAILED=1 et BETA_TRACING_ENDPOINT, une paire qui change également où vos journaux et traces vont. Définissez la paire dans votre shell, vos paramètres utilisateur ou vos paramètres gérés ; les deux variables sont ignorées dans les paramètres de projet et locaux. CLAUDE_CODE_ENHANCED_TELEMETRY_BETA seul ne le produit pas.
Dans les sessions CLI interactives, le traçage bêta détaillé nécessite également que votre organisation soit sur la liste blanche pour la fonctionnalité. Les sessions SDK Agent et non interactives -p ne nécessitent pas de liste blanche.
Les attributs supplémentaires porteurs de contenu tels que
new_context, system_prompt_preview, user_system_prompt, tool_input et response.model_output ne sont émis que lorsque le traçage bêta détaillé est actif. Ils ne font pas partie du schéma de span stable.La porte sur new_context dépend du span qui le porte, et chaque copie est tronquée à la limite de contenu (60 Ko par défaut). Sur le span claude_code.tool, il porte le résultat de cet appel d’outil, quel que soit l’outil, et nécessite OTEL_LOG_TOOL_CONTENT=1. Sur le span claude_code.interaction, il porte l’invite utilisateur, et sur le span claude_code.llm_request, les nouveaux messages utilisateur et résultats d’outils de cette demande. Les deux nécessitent OTEL_LOG_USER_PROMPTS=1.user_system_prompt nécessite en outre OTEL_LOG_USER_PROMPTS=1. Il porte uniquement le texte d’invite système que vous fournissez via l’option SDK systemPrompt ou les drapeaux --system-prompt et --append-system-prompt, tronqué à la limite de contenu (60 Ko par défaut), et est émis une fois par session plutôt que par demande.En-têtes dynamiques
Pour les environnements d’entreprise qui nécessitent une authentification dynamique, vous pouvez configurer un script pour générer des en-têtes dynamiquement. Les en-têtes dynamiques s’appliquent uniquement aux protocoleshttp/protobuf et http/json. Avec le protocole grpc, Claude Code utilise uniquement les variables d’en-têtes statiques, OTEL_EXPORTER_OTLP_HEADERS et ses variantes spécifiques au signal.
Configuration des paramètres
Ajoutez à votre.claude/settings.json, en remplaçant le chemin par votre propre script :
Exigences du script
Le script doit produire un JSON valide avec des paires clé-valeur de chaîne représentant les en-têtes HTTP :- Une notification d’avertissement dans les sessions interactives,
otelHeadersHelper failed; telemetry is not being exported, affichée une fois par session lorsque l’assistant échoue pour la première fois - Sortie
/status - Le journal de débogage, lors de l’exécution avec
--debugou après l’exécution de/debugdans la session - stderr, dans les sessions non interactives démarrées avec
-p
Comportement d’actualisation
Le script d’assistant d’en-têtes s’exécute au démarrage et périodiquement par la suite pour prendre en charge l’actualisation des jetons. Par défaut, le script s’exécute toutes les 29 minutes. Personnalisez l’intervalle avec la variable d’environnementCLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS.
Support des organisations multi-équipes
Les organisations avec plusieurs équipes ou départements peuvent ajouter des attributs personnalisés pour distinguer les différents groupes en utilisant la variable d’environnementOTEL_RESOURCE_ATTRIBUTES :
- Filtrer les métriques par équipe ou département
- Suivre les coûts par centre de coûts
- Créer des tableaux de bord spécifiques à l’équipe
- Configurer des alertes pour des équipes spécifiques
vcs.*, les clés personnalisées ne remplacent jamais les attributs standard tels que user.id ou session.id : lorsqu’une clé entre en collision, Claude Code conserve la valeur intégrée.
Chaque clé personnalisée devient une étiquette sur chaque série de métriques, donc les valeurs de cardinalité élevée augmentent le coût de stockage dans votre backend de métriques. Pour envoyer des attributs personnalisés dans le bloc de ressource uniquement et les omettre des étiquettes de point de données, définissez OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false. Voir Contrôle de la cardinalité des métriques.
Exemples de configurations
Définissez ces variables d’environnement avant d’exécuterclaude. Chaque scénario ci-dessous montre une configuration complète, et chaque variable est décrite sous Variables de configuration communes. Pour confirmer qu’une configuration a pris effet, vérifiez votre backend pour la métrique claude_code.session.count après le démarrage d’une session ; le Démarrage rapide couvre la vérification en logs uniquement et ce qu’il faut vérifier lorsque rien n’arrive.
Pour le débogage de console avec un intervalle d’export d’une seconde :
http://localhost:9464/metrics :
/metrics à la place.
Pour envoyer des métriques à plusieurs exportateurs :
Télémétrie des sessions cloud et Claude Tag
Les sessions cloud, y compris les sessions du canal Claude Tag, s’exécutent dans des environnements cloud plutôt que sur les appareils de vos utilisateurs, donc un fichier de paramètres gérés ou un profil shell sur ces appareils ne configure pas leur télémétrie. Pour les sessions dans les environnements hébergés par Anthropic, cette section couvre l’endroit où définir les variables de télémétrie, comment rendre votre collecteur accessible à partir de l’environnement, et comment distinguer les sessions cloud et Claude Tag dans les données exportées. Pour exporter la télémétrie de ces sessions, définissezCLAUDE_CODE_ENABLE_TELEMETRY et les variables OTEL_*, en utilisant les mêmes clés que l’exemple de configuration administrateur, dans l’un des deux endroits suivants :
- Paramètres gérés par le serveur : ajoutez-les au bloc
envdes paramètres gérés par le serveur de votre organisation. Claude Code récupère ces paramètres au démarrage partout où les paramètres gérés par le serveur s’appliquent, ce qui inclut les machines de vos utilisateurs et les sessions cloud autres que les sessions du canal Claude Tag. Les sessions Claude Tag ne reçoivent pas vos paramètres gérés par le serveur, donc cette route ne les configure pas. - Les variables de l’environnement : ajoutez-les aux variables d’environnement d’un environnement cloud pour configurer uniquement les sessions qui s’exécutent dans cet environnement. C’est la route qui atteint les sessions Claude Tag.
OTEL_EXPORTER_OTLP_HEADERS. Une credential API sur l’environnement n’aide pas non plus, car l’export de télémétrie propre de Claude Code est l’une des requêtes qui ne reçoivent jamais la credential. Si votre collecteur nécessite une credential, configurez l’export entier via les paramètres gérés par le serveur à la place, car lorsque vous définissez une credential là, Claude Code supprime les variables de point de terminaison définies en dehors des paramètres gérés.
Gardez ces contraintes à l’esprit lorsque vous configurez la télémétrie pour les sessions cloud :
- Laissez les sessions atteindre le collecteur : Claude Code envoie l’export via le réseau de la session, donc si elle atteint l’hôte dans votre
OTEL_EXPORTER_OTLP_ENDPOINTdépend du niveau d’accès réseau de l’environnement. Si les sessions ne peuvent pas atteindre le domaine du collecteur au niveau que vous avez choisi, ajoutez le domaine à la liste d’autorisation de l’environnement, car aucun paramètre géré par le serveur n’ajoute de domaines à la liste d’autorisation réseau d’un environnement. - Les canaux Claude Tag utilisent des environnements au niveau de l’organisation : les sessions de canal s’exécutent dans des environnements au niveau de l’organisation plutôt que dans les environnements personnels des membres, donc effectuez les modifications de la liste d’autorisation et des variables d’environnement sur l’environnement partagé défini comme défaut de votre organisation ou épinglé au canal.
- Cowork est configuré séparément : les sessions Cowork ne reçoivent pas les paramètres gérés par le serveur, comme le montre le tableau de couverture de surface, donc le bloc
envgéré par le serveur ne configure pas leur télémétrie.
Attribuer la télémétrie aux sessions cloud
Par défaut, les métriques et les événements d’une session cloud portent les attributs standard, y comprissession.id, ccr.session.id, et organization.id, afin que vous puissiez filtrer par session ou organisation sans configuration supplémentaire. La valeur ccr.session.id est le CLAUDE_CODE_REMOTE_SESSION_ID de la session. Pour le transformer en URL de transcription de la session, voir Lier la sortie à la session.
Pour attribuer la télémétrie plus en détail, utilisez ces options :
- Identifier les sessions Claude Tag : définissez
OTEL_METRICS_INCLUDE_ENTRYPOINT=true, comme décrit sous Contrôle de la cardinalité des métriques. Les métriques portent alorsapp.entrypoint, dont la valeur estclaude-in-slackpour les sessions Claude Tag. - Ajouter des attributs personnalisés : définissez
OTEL_RESOURCE_ATTRIBUTESau même endroit où vous définissez les autres variablesOTEL_*pour ces sessions. Si vous l’exportdans le script de configuration de l’environnement à la place, la valeur n’atteint pas Claude Code : le script de configuration est un script Bash séparé qui s’exécute avant le lancement de Claude Code, et les variables qu’il exporte se terminent avec lui.
user.* pour identifier qui a tagué Claude.
Métriques et événements disponibles
Attributs standard
Toutes les métriques et tous les événements partagent ces attributs standard :
Lorsque Claude Code est connecté à une passerelle d’applications Claude, la CLI marque les exportations avec l’identité authentifiée de la session de la passerelle :
user.id est le sujet IdP plutôt qu’un identifiant d’installation anonyme, user.email est l’e-mail connecté, et user.groups porte l’appartenance au groupe IdP sous forme de chaîne séparée par des virgules. Chaque exportation porte également identity.source: gateway-oidc. L’identité de la passerelle est appliquée en dernier, donc les clés user.* et identity.* définies via OTEL_RESOURCE_ATTRIBUTES sont ignorées sur les sessions de passerelle.
Les événements incluent en outre les attributs suivants. Ceux-ci ne sont jamais attachés aux métriques car ils causeraient une cardinalité illimitée :
prompt.id: UUID corrélant une invite utilisateur avec tous les événements suivants jusqu’à l’invite suivante. Voir Attributs de corrélation d’événements.workspace.host_paths: répertoires d’espace de travail hôte sélectionnés dans l’application de bureau, sous forme de tableau de chaînesworkflow.run_id: identifiant d’exécution, préfixéwf_, sur les événements API et d’outils émis par les agents qui appartiennent à une exécution d’outil Workflow. Le filtrage des événements par unworkflow.run_idreconstruit les demandes API et les résultats d’outils de cette exécution. L’identifiant couvre les agents que le script de flux de travail génère et tous les agents que ceux-ci génèrent à leur tour, par exemple les invocations de compétences. Il correspond à l’identifiant d’exécution signalé dans le résultat de l’outil Workflow. Absent sur tous les autres événements. Nécessite Claude Code v2.1.202 ou ultérieurworkflow.name: nom du flux de travail, lemeta.namede son script, émis aux côtés deworkflow.run_id. Les noms de flux de travail intégrés apparaissent textuellement lorsque l’exécution exécute le script intégré non modifié. Les noms créés par l’utilisateur, y compris les copies modifiées de scripts intégrés, sont remplacés parcustomsauf siOTEL_LOG_TOOL_DETAILS=1est défini. Nécessite Claude Code v2.1.202 ou ultérieur
Attributs du référentiel
DéfinissezOTEL_METRICS_INCLUDE_REPOSITORY=true pour baliser les métriques et les événements avec l’identité du référentiel de la session, afin qu’un collecteur partagé puisse attribuer l’utilisation par référentiel. Nécessite Claude Code v2.1.269 ou ultérieur.
Claude Code dérive ces attributs une fois par session à partir de la télécommande origin du référentiel. Lorsque les télécommandes HTTPS et SSH d’un référentiel nomment le même hôte et le même chemin, comme c’est le cas sur GitHub, GitLab et Bitbucket Cloud, les deux produisent des valeurs identiques :
Les valeurs sont en minuscules, et les identifiants, les chaînes de requête et les fragments de l’URL distante n’y apparaissent jamais. Les attributs sont omis lorsque la session n’a pas de télécommande
origin, lorsque la télécommande n’a pas la forme d’une URL, ou lorsque le seul référentiel englobant est votre répertoire personnel.
Pour obtenir ces attributs à partir d’une session cloud, définissez les variables de télémétrie, y compris OTEL_METRICS_INCLUDE_REPOSITORY, sur son environnement cloud. Autorisez également le domaine de votre collecteur dans l’accès réseau de l’environnement.
Une clé vcs.* que vous déclarez dans OTEL_RESOURCE_ATTRIBUTES remplace la valeur dérivée pour cette clé. Si vous déclarez vcs.repository.url.full, Claude Code ne lit jamais la télécommande et signale uniquement les clés que vous déclarez.
Si les clones HTTPS et SSH d’un référentiel signalent des valeurs différentes, par exemple sur une installation auto-hébergée dont l’URL de clone HTTPS porte un préfixe de chemin que l’URL SSH n’a pas, déclarez vcs.repository.url.full dans OTEL_RESOURCE_ATTRIBUTES ainsi que toute autre clé vcs.* que vous souhaitez signaler. Chaque clone signale alors l’identité que vous déclarez.
Les attributs ne circulent que vers vos propres exportateurs ; la télémétrie d’Anthropic supprime chaque clé vcs.*.
Métriques
Claude Code exporte les métriques suivantes. La colonne Unité affiche la chaîne d’unité OpenTelemetry attachée à chaque métrique ; les métriques de comptage n’en ont aucune.
Lorsque
prometheus est le seul exportateur listé dans OTEL_METRICS_EXPORTER, Claude Code omet les unités USD, tokens et s des métriques exportées afin que le scrape reste au format texte Prometheus valide. Les noms de métriques ne changent pas, et les configurations qui combinent des exportateurs, par exemple otlp,prometheus, conservent les unités. Avant v2.1.216, le scrape Prometheus incluait des lignes # UNIT OpenMetrics uniquement que certains scrapers rejetaient.
Détails des métriques
Chaque métrique inclut les attributs standard listés ci-dessus. Les métriques avec des attributs supplémentaires spécifiques au contexte sont notées ci-dessous.Compteur de sessions
Incrémenté au début de chaque session. Attributs :- Tous les attributs standard
start_type: Comment la session a été démarrée. L’une de"fresh","resume","continue", ou"agents_view". La valeur"agents_view"identifie le processus du tableau de bordclaude agents, une interface utilisateur locale lancée par l’utilisateur plutôt qu’une session conversationnelle. Filtrez sur cette valeur pour séparer les lancements de processus UI des sessions conversationnelles dans vos tableaux de bord.
Compteur de lignes de code
Incrémenté lorsque du code est ajouté ou supprimé. Attributs :- Tous les attributs standard
type: ("added","removed")model: Identifiant du modèle pour le modèle qui a effectué la modification (par exemple, « claude-sonnet-5 »)
Compteur de demandes de tirage
Incrémenté lorsque Claude Code crée une demande de tirage ou de fusion via une commande shell ou un outil MCP. Attributs :- Tous les attributs standard
Compteur de commits
Incrémenté lors de la création de commits git via Claude Code. Attributs :- Tous les attributs standard
Compteur de coûts
Incrémenté après chaque demande API. Les attributsagent.name, skill.name, plugin.name, mcp_server.name et mcp_tool.name rédactent chacun certains noms à un espace réservé "custom" ou "third-party" par défaut. Si vous définissez OTEL_LOG_TOOL_DETAILS=1, ils portent les noms réels à la place. Avant v2.1.273, les compteurs de coûts et de jetons et les événements api_request, api_error et api_refusal portaient les valeurs rédactées même avec OTEL_LOG_TOOL_DETAILS=1 défini.
Attributs :
- Tous les attributs standard
model: Identifiant du modèle (par exemple, « claude-sonnet-5 »)query_source: Catégorie du sous-système qui a émis la demande. L’une de"main","subagent", ou"auxiliary"speed:"fast"lorsque la demande a utilisé le mode rapide. Absent sinoneffort: Niveau d’effort appliqué à la demande :"low","medium","high","xhigh", ou"max". Absent lorsque Claude Code n’envoie aucun niveau d’effort, par exemple sur un modèle qui ne supporte pas l’effort.agent.name: Type de sous-agent qui a émis la demande. Les noms d’agents intégrés et les agents des plugins de la place de marché officielle apparaissent textuellement. Les autres noms d’agents définis par l’utilisateur sont remplacés par"custom". Absent lorsque la demande n’a pas été émise par un type de sous-agent nommé.skill.name: Compétence active pour la demande, définie par l’outil Skill ou une commande/, ou héritée par un sous-agent généré. Les noms de compétences intégrés, groupés, définis par l’utilisateur et de la place de marché officielle des plugins apparaissent textuellement. Les noms de compétences des plugins tiers sont remplacés par"third-party". Absent lorsqu’aucune compétence n’est active.plugin.name: Plugin propriétaire lorsque la compétence active ou le sous-agent est fourni par un plugin. Les noms des plugins de la place de marché officielle apparaissent textuellement. Les noms des plugins tiers sont remplacés par"third-party". Absent lorsque ni la compétence ni le sous-agent n’a de plugin propriétaire.marketplace.name: Place de marché à partir de laquelle le plugin propriétaire a été installé. Émis uniquement pour les plugins de la place de marché officielle, même avecOTEL_LOG_TOOL_DETAILS=1défini. Absent sinon.mcp_server.name: Serveur MCP dont le résultat d’outil cette demande a consommé. Les noms des serveurs intégrés, proxifiés par claude.ai et du registre officiel apparaissent textuellement. Les noms des serveurs configurés par l’utilisateur sont remplacés par"custom". Absent lorsque la demande n’a consommé aucun résultat d’outil MCP. Avant v2.1.222, Claude Code définissait cet attribut sur chaque demande après un appel d’outil MCP, pas seulement sur les demandes qui ont consommé un résultat d’outil, donc les tableaux de bord qui l’agrègent montrent une baisse après la mise à niveau.mcp_tool.name: Outil MCP dont le résultat cette demande a consommé, avec le même comportement de rédaction et de version quemcp_server.name. Absent lorsque la demande n’a consommé aucun résultat d’outil MCP.
Compteur de jetons
Incrémenté après chaque demande API. Attributs :- Tous les attributs standard
type: ("input","output","cacheRead","cacheCreation")model: Identifiant du modèle (par exemple, « claude-sonnet-5 »)query_source: Catégorie du sous-système qui a émis la demande. L’une de"main","subagent", ou"auxiliary"speed:"fast"lorsque la demande a utilisé le mode rapide. Absent sinoneffort: Niveau d’effort appliqué à la demande. Voir Compteur de coûts pour les détails.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Attribution de compétence, plugin, agent et MCP pour la demande. Voir Compteur de coûts pour les définitions et le comportement de rédaction.
Compteur de décisions de l’outil d’édition de code
Incrémenté lorsque l’utilisateur accepte ou rejette l’utilisation de l’outil Edit, Write ou NotebookEdit. Attributs :- Tous les attributs standard
tool_name: Nom de l’outil ("Edit","Write","NotebookEdit")decision: Décision de l’utilisateur ("accept","reject")source: D’où provient la décision. L’une de"config","hook","user_permanent","user_temporary","user_abort", ou"user_reject". Voir l’événement de décision d’outil pour ce que signifie chaque valeur.language: Langage de programmation du fichier édité, par exemple"TypeScript","Python","JavaScript", ou"Markdown". Retourne"unknown"pour les extensions de fichier non reconnues.
Compteur de temps actif
Suit le temps réel passé à utiliser activement Claude Code, excluant le temps d’inactivité. Cette métrique est incrémentée lors des interactions utilisateur, telles que la saisie et la lecture des réponses, et lors du traitement CLI, tel que l’exécution d’outils et la génération de réponses IA. Attributs :- Tous les attributs standard
type:"user"pour les interactions au clavier,"cli"pour l’exécution d’outils et les réponses IA
Événements
Claude Code exporte les événements suivants via les journaux/événements OpenTelemetry (lorsqueOTEL_LOGS_EXPORTER est configuré) :
Attributs de corrélation d’événements
Lorsqu’un utilisateur soumet une invite, Claude Code peut effectuer plusieurs appels API et exécuter plusieurs outils. L’attributprompt.id vous permet de lier tous ces événements à l’invite unique qui les a déclenchés.
Pour tracer toute l’activité déclenchée par une seule invite, filtrez vos événements par une valeur
prompt.id spécifique. Cela retourne l’événement user_prompt, tous les événements api_request, et tous les événements tool_result qui se sont produits lors du traitement de cette invite.
event.sequence commence à 0 chaque fois qu’un processus Claude Code démarre et compte jusqu’à la fin de ce processus. Il continue de compter à travers /clear, qui assigne un nouveau session.id. Si vous reprenez une session sans la forker, la session conserve son session.id mais prend ses valeurs event.sequence du processus qui l’a reprise, donc au sein d’une session un événement ultérieur peut porter une valeur inférieure à celle d’un événement antérieur, ou en répéter une. Pour ordonner les événements d’une session, triez par event.timestamp et utilisez event.sequence pour ordonner les événements qui partagent un timestamp.
Pour la reconstruction au niveau du message, chaque classe d’événement porte une clé qui correspond à un champ dans la transcription de session. Le format d’entrée de transcription est interne à Claude Code et change entre les versions, donc un pipeline qui se joint sur ces champs peut se casser à chaque version ; traitez les jointures comme spécifiques à la version plutôt que comme un contrat stable :
message.uuidsuruser_prompt,assistant_response, etapi_response_bodyrequest_idsur les événements API, persisté commerequestIdsur les entrées d’assistant de la transcriptiontool_use_idsur les événementstool_resultettool_decision
Événement d’invite utilisateur
Enregistré lorsqu’un utilisateur soumet une invite. Nom de l’événement :claude_code.user_prompt
Attributs :
- Tous les attributs standard
event.name:"user_prompt"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsprompt_length: Longueur de l’inviteprompt: Contenu de l’invite. Rédacté par défaut. DéfinissezOTEL_LOG_USER_PROMPTS=1pour l’incluremessage.uuid: UUID du message utilisateur résultant, correspondant à l’entrée de transcription persistée. Absent sur les dispatches de commandes, qui peuvent produire zéro ou plusieurs messages. Nécessite Claude Code v2.1.214 ou ultérieurcommand_name: Nom de la commande lorsque l’invite en invoque une. Les noms de commandes intégrés et groupés tels quecompactoudebugsont émis tels quels ; les alias tels queresetémettent tels que tapés plutôt que le nom canonique. Les noms de commandes personnalisés, de plugins et MCP s’effondrent àcustomoumcpsauf siOTEL_LOG_TOOL_DETAILS=1est définicommand_source: Origine de la commande lorsqu’elle est présente :builtin,custom, oumcp. Les commandes fournies par les plugins signalent commecustom
Événement de réponse d’assistant
Enregistré après chaque demande API qui retourne du contenu textuel du modèle. Seuls les blocs de texte de la réponse sont inclus ; les blocs de réflexion et les blocs d’utilisation d’outils sont exclus. Nécessite Claude Code v2.1.193 ou ultérieur. Nom de l’événement :claude_code.assistant_response
Attributs :
- Tous les attributs standard
event.name:"assistant_response"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsresponse_length: Longueur du texte de réponse en caractèresresponse: Texte de réponse, tronqué à la limite de contenu (60 KB par défaut). Rédacté à<REDACTED>par défaut. DéfinissezOTEL_LOG_ASSISTANT_RESPONSES=1pour l’inclure. LorsqueOTEL_LOG_ASSISTANT_RESPONSESn’est pas défini,OTEL_LOG_USER_PROMPTSle contrôle à la place, donc définissezOTEL_LOG_ASSISTANT_RESPONSES=0pour garder les réponses rédactées tandis que la journalisation des invites est activéemodel: Identifiant du modèle (par exemple, « claude-sonnet-5 »)request_id: ID de demande API, décrit sous Attributs de corrélation d’événementsmessage.uuid: UUID de l’entrée de transcription finale de la réponse. Une réponse API est persistée comme une entrée de transcription par bloc de contenu ; c’est la dernière, à partir de laquelle leparentUuiddu tour suivant s’enchaîne. Nécessite Claude Code v2.1.214 ou ultérieurquery_source: Sous-système qui a émis la demande, par exemple"repl_main_thread","compact", ou un nom de sous-agent
Événement de résultat d’outil
Enregistré lorsqu’un outil termine son exécution. Non émis si l’appel d’outil a été rejeté ; voir l’événement de décision d’outil pour les rejets. Nom de l’événement :claude_code.tool_result
Attributs :
- Tous les attributs standard
event.name:"tool_result"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementstool_name: Nom de l’outiltool_use_id: Identifiant unique pour cette invocation d’outil. Correspond autool_use_idpassé aux hooks, permettant la corrélation entre les événements OTel et les données capturées par les hooks.success:"true"ou"false"duration_ms: Temps d’exécution en millisecondeserror_type: Chaîne de catégorie d’erreur lorsque l’outil a échoué, par exemple"Error:ENOENT"ou"ShellError"error(lorsqueOTEL_LOG_TOOL_DETAILS=1) : Message d’erreur complet lorsque l’outil a échouédecision_type: Toujours"accept", puisque cet événement n’est émis qu’après l’exécution de l’outil. Les appels rejetés ne produisent pas de résultat d’outildecision_source: D’où provient la décision de permission. L’une de"config","hook","user_permanent", ou"user_temporary". Voir l’événement de décision d’outil pour ce que signifie chaque valeur. Les sources réservées au rejet"user_abort"et"user_reject"n’apparaissent jamais sur cet événement.tool_input_size_bytes: Taille de l’entrée d’outil sérialisée en JSON en octetstool_result_size_bytes: Taille du résultat d’outil en octetsmcp_server_scope: Identifiant de portée du serveur MCP (pour les outils MCP)vcs.ref.head.revision,vcs.ref.head.name,vcs.ref.head.type(lorsqueOTEL_LOG_TOOL_DETAILS=1) : l’identité de commit d’une exécutiongit commitréussie par l’outil Bash ou PowerShell.vcs.ref.head.revisionest le SHA du commit,vcs.ref.head.nameest la branche sur laquelle il a été commité, etvcs.ref.head.typeestbranch. Le nom et le type sont omis lorsque le commit a été effectué sur un HEAD détaché. Nécessite Claude Code v2.1.269 ou ultérieurtool_parameters(lorsqueOTEL_LOG_TOOL_DETAILS=1) : Chaîne JSON contenant les paramètres spécifiques à l’outil. Pour les serveurs intégrés du Claude Desktop, dans les sessions que Claude Desktop possède, la pairemcp_server_name/mcp_tool_nameest incluse même avec le drapeau désactivé, la même exception créée par l’hôte que l’événement de décision d’outil, nécessitant Claude Code v2.1.214 ou ultérieur. Les paramètres varient selon l’outil :- Pour l’outil Bash : inclut
bash_command,full_command,timeout,description, etdangerouslyDisableSandbox, plusgit_commit_idetgit_branchlorsqu’une commandegit commitréussit.git_commit_idest le SHA complet du commit lorsque le commit est le HEAD du répertoire de travail de la session, et le SHA abrégé de git sinon.git_branchest la branche sur laquelle il a été commité, omis sur un HEAD détaché - Pour l’outil Bash d’espace de travail de l’application de bureau, qui signale également
tool_namecommeBash: inclut uniquementbash_command,full_command, ettimeout - Pour les outils MCP : inclut
mcp_server_name,mcp_tool_name - Pour l’outil Skill : inclut
skill_name - Pour l’outil Agent ou l’outil Task hérité : inclut
subagent_type
- Pour l’outil Bash : inclut
tool_input(lorsqueOTEL_LOG_TOOL_DETAILS=1) : Arguments d’outil sérialisés en JSON. Les valeurs individuelles supérieures à 512 caractères sont tronquées, et la charge utile complète est limitée à environ 4 K caractères. S’applique à tous les outils, y compris les outils MCP.
Événement de demande API
Enregistré pour chaque demande API à Claude. Nom de l’événement :claude_code.api_request
Attributs :
- Tous les attributs standard
event.name:"api_request"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsmodel: Modèle utilisé (par exemple, « claude-sonnet-5 »)cost_usd: Coût estimé en USDcost_usd_micros: Coût estimé en millionièmes de dollar américain, émis sous forme d’entierduration_ms: Durée de la demande en millisecondesinput_tokens: Nombre de jetons d’entréeoutput_tokens: Nombre de jetons de sortiecache_read_tokens: Nombre de jetons lus du cachecache_creation_tokens: Nombre de jetons utilisés pour la création du cacherequest_id: ID de demande API, par exemple"req_011...", décrit sous Attributs de corrélation d’événements.client_request_id: UUID généré par le client envoyé comme en-tête de demandex-client-request-id; voir le tableau attributs de corrélation d’événements pour savoir quand il est présent. Nécessite Claude Code v2.1.214 ou ultérieurspeed:"fast"ou"normal", indiquant si le mode rapide était actifquery_source: Sous-système qui a émis la demande, par exemple"repl_main_thread","compact", ou un nom de sous-agenteffort: Niveau d’effort appliqué à la demande :"low","medium","high","xhigh", ou"max". Absent lorsque Claude Code n’envoie aucun niveau d’effort, par exemple sur un modèle qui ne supporte pas l’effort.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Attribution de compétence, plugin, agent et MCP pour la demande. Voir Compteur de coûts pour les définitions et le comportement de rédaction.
Événement d’erreur API
Enregistré lorsqu’une demande API à Claude échoue. Nom de l’événement :claude_code.api_error
Attributs :
- Tous les attributs standard
event.name:"api_error"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsmodel: Modèle utilisé (par exemple, « claude-sonnet-5 »)error: Message d’erreurstatus_code: Code de statut HTTP sous forme de nombre. Absent pour les erreurs non-HTTP telles que les défaillances de connexion.duration_ms: Durée de la demande en millisecondesattempt: Nombre total de tentatives effectuées, y compris la demande initiale (1signifie qu’aucune nouvelle tentative n’a eu lieu)request_id: ID de demande API, par exemple"req_011...", décrit sous Attributs de corrélation d’événements.client_request_id: UUID généré par le client envoyé comme en-tête de demandex-client-request-id. Disponible même lorsqu’une défaillance telle qu’un délai d’expiration ou une erreur de connexion n’a jamais produit derequest_idserveur ; voir le tableau attributs de corrélation d’événements pour savoir quand il est présent. Nécessite Claude Code v2.1.214 ou ultérieurspeed:"fast"ou"normal", indiquant si le mode rapide était actifquery_source: Sous-système qui a émis la demande, par exemple"repl_main_thread","compact", ou un nom de sous-agenteffort: Niveau d’effort appliqué à la demande. Absent lorsque Claude Code n’envoie aucun niveau d’effort, par exemple sur un modèle qui ne supporte pas l’effort.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Attribution de compétence, plugin, agent et MCP pour la demande. Voir Compteur de coûts pour les définitions et le comportement de rédaction.
Événement de refus API
Enregistré lorsqu’une demande API retournestop_reason: "refusal". Les refus arrivent sur un flux de réponse réussi plutôt que comme une erreur HTTP, donc l’événement api_error ne se déclenche pas pour eux. Cet événement vous permet de suivre la fréquence des refus et de regrouper les refus par les mêmes attributs que api_request et api_error.
Nom de l’événement : claude_code.api_refusal
Attributs :
- Tous les attributs standard
event.name:"api_refusal"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsmodel: Identifiant du modèle de la demanderequest_id: ID de demande API, par exemple"req_011...", décrit sous Attributs de corrélation d’événements.query_source: Sous-système qui a émis la demande, par exemple"repl_main_thread","compact", ou un nom de sous-agent. Voirapi_requestpour les définitions.speed: Soit"fast"lorsque le Mode rapide est actif, soit"normal"attempt: Numéro de tentative de nouvelle tentative. La première tentative est1.effort: Niveau d’effort appliqué à la demande. Absent lorsque Claude Code n’envoie aucun niveau d’effort, par exemple sur un modèle qui ne supporte pas l’effort.server_fallback_hop:truelorsque le secours du modèle côté serveur de l’API a déjà retesté ce refus sur un modèle différent, donc l’utilisateur n’a pas vu ce refus particulier.falselorsque la demande s’est terminée par un refus. Un seul tour peut émettre à la fois un événementtruehop et un événementfalsefinal ultérieur lorsque le modèle de secours refuse également.has_category:truelorsque la réponse API portait unestop_details.categoryde"cyber","bio","frontier_llm", ou"reasoning_extraction".falselorsque la réponse ne portait aucune catégorie ou une valeur en dehors de cet ensemble. Absent lorsqueserver_fallback_hopesttrue, car les blocs hop ne portent passtop_details.has_explanation:truelorsque la réponse API portait unestop_details.explanation, sinonfalse. Absent lorsqueserver_fallback_hopesttrue.category: La valeurstop_details.categoryde la réponse API. L’une de"cyber","bio","frontier_llm", ou"reasoning_extraction". Présent uniquement lorsqueOTEL_LOG_TOOL_DETAILS=1est défini ethas_categoryesttrue.agent.name,skill.name,plugin.name,marketplace.name,mcp_server.name,mcp_tool.name: Attribution de compétence, plugin, agent et MCP pour la demande. Voir Compteur de coûts pour les définitions et le comportement de rédaction.
Événement de corps de demande API
Enregistré pour chaque tentative de demande API lorsqueOTEL_LOG_RAW_API_BODIES est défini. Un événement est émis par tentative, donc les nouvelles tentatives avec des paramètres ajustés produisent chacune leur propre événement.
Nom de l’événement : claude_code.api_request_body
Attributs :
- Tous les attributs standard
event.name:"api_request_body"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsbody: Paramètres de demande API Messages sérialisés en JSON, tels que l’invite système, les messages et les outils, tronqués à la limite de contenu (60 KB par défaut). Le contenu de réflexion étendue dans les tours d’assistant antérieurs est rédacté. Émis uniquement en mode en ligne (OTEL_LOG_RAW_API_BODIES=1).body_ref: Chemin absolu vers un fichier<dir>/<uuid>.request.jsoncontenant le corps non tronqué. Émis uniquement en mode fichier (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Longueur du corps non tronqué. Octets UTF-8 lorsqueOTEL_LOG_RAW_API_BODIES=file:<dir>, ou unités de code UTF-16 lorsque=1body_truncated:"true"lorsque la troncature en ligne s’est produite. Absent en mode fichier et lorsqu’aucune troncature ne s’est produite.model: Identifiant du modèle à partir des paramètres de demandequery_source: Sous-système qui a émis la demande (par exemple,"compact")request_body_id: UUID qui identifie le corps de demande de cette tentative. L’événementapi_response_bodypour la tentative qui réussit porte la même valeur, afin que vous puissiez appairer une réponse avec la demande exacte qui l’a produite. Nécessite Claude Code v2.1.274 ou ultérieur
Événement de corps de réponse API
Enregistré pour chaque réponse API réussie lorsqueOTEL_LOG_RAW_API_BODIES est défini.
En mode fichier (OTEL_LOG_RAW_API_BODIES=file:<dir>), Claude Code ajoute également une ligne JSON à <dir>/index.jsonl pour chaque réponse réussie, avec les champs timestamp, session_id, query_source, model, request_id, message_id, message_uuid, request_file, et response_file. Lisez-le pour trouver les fichiers de demande et de réponse derrière un message de transcription donné sans interroger votre backend de télémétrie. Le fichier d’index nécessite Claude Code v2.1.274 ou ultérieur.
Nom de l’événement : claude_code.api_response_body
Attributs :
- Tous les attributs standard
event.name:"api_response_body"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsbody: Réponse API Messages sérialisée en JSON, y compris l’id, les blocs de contenu, l’utilisation et la raison d’arrêt, tronquée à la limite de contenu (60 KB par défaut). Le contenu de réflexion étendue est rédacté. Émis uniquement en mode en ligne (OTEL_LOG_RAW_API_BODIES=1).body_ref: Chemin absolu vers un fichier<dir>/<request_id>.response.jsoncontenant le corps non tronqué. Émis uniquement en mode fichier (OTEL_LOG_RAW_API_BODIES=file:<dir>).body_length: Longueur du corps non tronqué. Octets UTF-8 lorsqueOTEL_LOG_RAW_API_BODIES=file:<dir>, ou unités de code UTF-16 lorsque=1body_truncated:"true"lorsque la troncature en ligne s’est produite. Absent en mode fichier et lorsqu’aucune troncature ne s’est produite.model: Identifiant du modèlequery_source: Sous-système qui a émis la demanderequest_id: ID de demande API, par exemple"req_011...", décrit sous Attributs de corrélation d’événements.request_body_id: Lerequest_body_idde l’événementapi_request_bodyauquel cette réponse répond. Nécessite Claude Code v2.1.274 ou ultérieurmessage.id: ID de message que l’API a assigné à la réponse, le champiddu corps de réponse. Nécessite Claude Code v2.1.274 ou ultérieurmessage.uuid: UUID de l’entrée de transcription finale de la réponse. Avecrequest_body_id, il lie un message de transcription aux corps de demande et de réponse derrière lui. Nécessite Claude Code v2.1.274 ou ultérieur
Événement de décision d’outil
Enregistré lorsqu’une décision de permission d’outil est prise (accepter/rejeter). Nom de l’événement :claude_code.tool_decision
Attributs :
- Tous les attributs standard
event.name:"tool_decision"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementstool_name: Nom de l’outil (par exemple, « Read », « Edit », « Write », « NotebookEdit »)tool_use_id: Identifiant unique pour cette invocation d’outil. Correspond autool_use_idpassé aux hooks, permettant la corrélation entre les événements OTel et les données capturées par les hooks.decision: Soit"accept"soit"reject"tool_source: Toujours présent. La provenance de l’outil, comme un ensemble fermé de valeurs créées par la CLI. Nécessite Claude Code v2.1.214 ou ultérieur"builtin": les outils propres de la CLI"mcp": serveurs MCP en général"sdk_host_builtin_mcp": un serveur en processus intégré à Claude Desktop lui-même, dans une session que Claude Desktop possède. Claude Desktop possède une session qu’il a lancée à partir de l’un de ses propres points d’entrée,claude-desktop,claude-desktop-3p, oulocal-agent, lorsque cette session n’est pas un enfant imbriqué ; les sessions imbriquées, y compris les sessions que Claude Code lui-même génère, signalent ces serveurs comme"mcp"
source: D’où provient la décision :"config": Décidé automatiquement sans invite, basé sur les paramètres du projet, les règles d’autorisation ou de refus dans les paramètres personnels de l’utilisateur, la politique gérée par l’entreprise, les drapeaux--allowedToolsou--disallowedTools, le mode de permission actif, une subvention à portée de session d’une invite antérieure dans la même session CLI interactive, ou parce que l’outil est intrinsèquement sûr. L’événement n’indique pas laquelle de ces sources a correspondu. Claude Code signale également"config"lorsque la demande d’invite de permission elle-même échoue, par exemple lorsque le rappelcanUseTooldu SDK Agent ou l’outil--permission-prompt-toolretourne un résultat invalide, ou lorsque le flux d’entrée se ferme pendant que la demande est en attente. Avant v2.1.216, Claude Code signalait ces défaillances comme"user_reject"."hook": Un hookPreToolUseouPermissionRequesta retourné la décision."user_permanent": Émis lorsque l’utilisateur a choisi « Oui, et ne me demande plus pour … » à une invite de permission, ce qui enregistre une règle d’autorisation dans ses paramètres personnels. Dans la CLI interactive, ceci n’est émis que pour ce choix lui-même ; les appels ultérieurs qui correspondent à la règle enregistrée émettent"config"à la place. Dans les sessions SDK Agent ou non-interactive-p, à la fois le choix initial et les correspondances de règles ultérieures émettent"user_permanent". Traité comme une acceptation."user_temporary": Émis lorsque l’utilisateur a choisi « Oui » à une invite de permission pour une approbation unique, ou a choisi une option qui accorde l’accès pour le reste de la session sur une invite d’édition ou de lecture de fichier. Dans la CLI interactive, ceci n’est émis que pour le choix lui-même ; les appels ultérieurs autorisés par cette subvention à portée de session émettent"config"à la place. Dans les sessions SDK Agent ou non-interactive-p, à la fois le choix et les correspondances ultérieures émettent"user_temporary". Traité comme une acceptation."user_abort": Émis lorsque l’utilisateur a fermé l’invite de permission sans répondre. Dans les sessions SDK Agent et non-interactive-p, cela inclut l’interruption du tour pendant qu’une demande de permissioncanUseToolou--permission-prompt-toolest en attente ; avant v2.1.216, Claude Code signalait cette interruption comme"user_reject". Traité comme un rejet."user_reject": Émis lorsque l’utilisateur a choisi « Non » lorsqu’on lui a demandé. Dans la CLI interactive, ceci n’est émis que pour ce choix lui-même ; les appels qui correspondent à une règle de refus dans les paramètres personnels de l’utilisateur émettent"config"à la place. Dans les sessions SDK Agent ou non-interactive-p, les appels qui correspondent à une règle de refus dans les paramètres personnels émettent"user_reject". Traité comme un rejet.
tool_parameters(lorsqueOTEL_LOG_TOOL_DETAILS=1) : Chaîne JSON contenant les paramètres spécifiques à l’outil. Même forme que l’événement de résultat d’outil, moins les champs post-exécution tels quegit_commit_id. Les valeurs peuvent différer detool_resultpour un appel accepté si la décision de permission réécrit l’entrée d’outil viaupdatedInput. Utilisez cet attribut pour voir quelle commande a été rejetée lorsquedecisionest"reject".- Pour les outils
"sdk_host_builtin_mcp":mcp_server_nameetmcp_tool_namesont inclus même lorsqueOTEL_LOG_TOOL_DETAILSest désactivé, car l’application hôte définit ces noms ; sans eux, un appel rejeté à l’un de ces serveurs intégrés serait non attribuable sur le flux par défaut. Pour les serveurs MCP configurés par l’utilisateur, letool_namede l’événement est toujours le littéral"mcp_tool", et les noms du serveur et de l’outil apparaissent uniquement danstool_parametersavec le drapeau activé ; le contenu des arguments nécessite le drapeau partout. Nécessite Claude Code v2.1.214 ou ultérieur - Pour l’outil Bash : inclut
bash_command,full_command,timeout,description,dangerouslyDisableSandbox. L’outil bash d’espace de travail de l’application de bureau signale égalementtool_namecommeBash, mais inclut uniquementbash_command,full_command, ettimeout - Pour les outils MCP : inclut
mcp_server_name,mcp_tool_name - Pour l’outil Skill : inclut
skill_name - Pour l’outil Agent ou l’outil Task hérité : inclut
subagent_type
- Pour les outils
Événement de changement de mode de permission
Enregistré lorsque le mode de permission change, par exemple à partir du cyclageShift+Tab, de la sortie du mode plan, ou d’une vérification de porte en mode automatique.
Nom de l’événement : claude_code.permission_mode_changed
Attributs :
- Tous les attributs standard
event.name:"permission_mode_changed"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsfrom_mode: Le mode de permission précédent, par exemple"default","plan","acceptEdits","auto", ou"bypassPermissions"to_mode: Le nouveau mode de permissiontrigger: Ce qui a causé le changement. L’une de"shift_tab","exit_plan_mode","auto_gate_denied", ou"auto_opt_in". Absent lorsque la transition provient du SDK ou du pont
Événement d’authentification
Enregistré lorsque/login ou /logout se termine.
Nom de l’événement : claude_code.auth
Attributs :
- Tous les attributs standard
event.name:"auth"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsaction:"login"ou"logout"success:"true"ou"false"auth_method: Méthode d’authentification, par exemple"oauth"error_category: Type d’erreur catégorique lorsque l’action a échoué. Le message d’erreur brut n’est jamais inclusstatus_code: Code de statut HTTP sous forme de chaîne lorsque l’action a échoué avec une erreur HTTP
Événement de connexion du serveur MCP
Enregistré lorsqu’un serveur MCP se connecte, se déconnecte ou échoue à se connecter. Nom de l’événement :claude_code.mcp_server_connection
Attributs :
- Tous les attributs standard
event.name:"mcp_server_connection"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsstatus:"connected","failed", ou"disconnected"transport_type: Transport du serveur, par exemple"stdio","sse", ou"http"server_scope: Portée à laquelle le serveur est configuré, par exemple"user","project", ou"local"duration_ms: Durée de la tentative de connexion en millisecondeserror_code: Code d’erreur lorsque la connexion a échouéis_plugin:truelorsque le serveur est fourni par un plugin,falsesinonplugin_id_hash(lorsqueis_pluginesttrue) : Hash stable du nom du plugin et de la place de marché, pour regrouper les événements par plugin sans exposer le nom. Claude Code le calcule comme décrit sous l’événement de plugin chargéplugin.name(lorsqueis_pluginesttrue) : Nom du plugin qui fournit le serveur. Pour les plugins tiers, c’est la chaîne littérale"third-party"sauf siOTEL_LOG_TOOL_DETAILS=1; cela protège les noms des plugins tiers d’apparaître dans les journaux par défaut. Les plugins provenant de sources Anthropic officielles sont toujours identifiés par nom. Les attributsplugin_id_hashetplugin.namecirculent vers votre propre backend de surveillance et ne sont pas envoyés à Anthropicserver_name(lorsqueOTEL_LOG_TOOL_DETAILS=1) : Nom du serveur configuréerror(lorsqueOTEL_LOG_TOOL_DETAILS=1) : Message d’erreur complet lorsque la connexion a échoué
Événement d’erreur interne
Enregistré lorsque Claude Code détecte une erreur interne inattendue. Seul le nom de la classe d’erreur et un code de style errno sont enregistrés. Le message d’erreur et la trace de pile ne sont jamais inclus. Cet événement n’est pas émis lors de l’exécution sur Amazon Bedrock, Google Cloud’s Agent Platform, ou Microsoft Foundry, ou lorsqueDISABLE_ERROR_REPORTING est défini.
Nom de l’événement : claude_code.internal_error
Attributs :
- Tous les attributs standard
event.name:"internal_error"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementserror_name: Nom de la classe d’erreur, par exemple"TypeError"ou"SyntaxError"error_code: Code errno Node.js tel que"ENOENT"lorsqu’il est présent sur l’erreur
Événement de plugin installé
Enregistré lorsqu’un plugin termine son installation, à partir à la fois de la commande CLIclaude plugin install et de l’interface utilisateur interactive /plugin.
Nom de l’événement : claude_code.plugin_installed
Attributs :
- Tous les attributs standard
event.name:"plugin_installed"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsmarketplace.is_official:"true"si la place de marché est une place de marché Anthropic officielle,"false"sinoninstall.trigger:"cli"ou"ui"plugin.name: Nom du plugin installé. Pour les places de marché tiers, ceci n’est inclus que lorsqueOTEL_LOG_TOOL_DETAILS=1plugin.version: Version du plugin lorsqu’elle est déclarée dans l’entrée de la place de marché. Pour les places de marché tiers, ceci n’est inclus que lorsqueOTEL_LOG_TOOL_DETAILS=1marketplace.name: Place de marché à partir de laquelle le plugin a été installé. Pour les places de marché tiers, ceci n’est inclus que lorsqueOTEL_LOG_TOOL_DETAILS=1
Événement de plugin chargé
Enregistré une fois par plugin activé au démarrage de la session. Utilisez cet événement pour inventorier les plugins actifs dans votre flotte, en complément deplugin_installed qui enregistre l’action d’installation elle-même.
Nom de l’événement : claude_code.plugin_loaded
Attributs :
- Tous les attributs standard
event.name:"plugin_loaded"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsplugin.name: nom du plugin. Pour les plugins en dehors de la place de marché officielle et du bundle intégré, la valeur est"third-party"sauf siOTEL_LOG_TOOL_DETAILS=1marketplace.name: place de marché à partir de laquelle le plugin a été installé, lorsqu’elle est connue. Rédactée à"third-party"sous la même condition queplugin.nameplugin.version: version du manifeste du plugin. Inclus uniquement lorsque le nom n’est pas rédacté et que le manifeste déclare une versionplugin.scope: catégorie de provenance du plugin :"official","community","org","user-local", ou"default-bundle"enabled_via: comment le plugin en est venu à être activé :"default-enable","org-policy","admin-install","seed-mount", ou"user-install". La valeur"admin-install"signifie que le plugin est défini comme obligatoire ou auto-installation pour votre organisation dans Paramètres d’organisation > Plugins et compétences. Avant v2.1.246, Claude Code signalait ces plugins comme"user-install"ou"seed-mount"plugin_id_hash: hash déterministe du nom du plugin et de la place de marché, envoyé uniquement à votre exportateur configuré. Vous permet de compter les plugins tiers distincts chargés dans votre flotte sans enregistrer leurs noms. Pour les plugins synchronisés à partir de claude.ai, Claude Code hache le nom du plugin avec le nom de la place de marché que claude.ai signale pour le plugin, ou avecsyncedsinon. Avant v2.1.246, Claude Code n’utilisait pas le nom de la place de marché que claude.ai signale dans le hashhas_hooks: si le plugin contribue des hookshas_mcp: si le plugin contribue des serveurs MCPhost_owned_mcp:truelorsque l’hôte SDK gère les connexions MCP de ce plugin et Claude Code a ignoré la lecture de la configuration du serveur MCP du plugin,falsesinon. Nécessite Claude Code v2.1.172 ou ultérieurskill_path_count: nombre de répertoires de compétences que le plugin déclarecommand_path_count: nombre de répertoires de commandes que le plugin déclareagent_path_count: nombre de répertoires d’agents que le plugin déclaresafe_mode:"true"lorsque la session a été démarrée avec--safe-mode,"false"sinon. En mode sûr, cet événement signale uniquement l’inventaire configuré ; les commandes, compétences, hooks et serveurs MCP du plugin ne se chargent pas. Nécessite Claude Code v2.1.169 ou ultérieur
Événement de compétence activée
Enregistré lorsqu’une compétence est invoquée, que Claude l’appelle via l’outil Skill ou que vous l’exécutiez en tant que commande/.
Nom de l’événement : claude_code.skill_activated
Attributs :
- Tous les attributs standard
event.name:"skill_activated"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsskill.name: Nom de la compétence. Pour les compétences définies par l’utilisateur et les plugins tiers, la valeur est l’espace réservé"custom_skill"sauf siOTEL_LOG_TOOL_DETAILS=1invocation_trigger: Comment la compétence a été déclenchée ("user-slash","claude-proactive", ou"nested-skill")skill.source: D’où la compétence a été chargée (par exemple,"bundled","userSettings","projectSettings","plugin")skill.kind:"workflow"lorsque la compétence est une compétence de flux de travail. Absent sinonplugin.name(lorsqueOTEL_LOG_TOOL_DETAILS=1ou le plugin provient d’une place de marché officielle) : Nom du plugin propriétaire lorsque la compétence est fournie par un pluginmarketplace.name(lorsqueOTEL_LOG_TOOL_DETAILS=1ou le plugin provient d’une place de marché officielle) : Place de marché à partir de laquelle le plugin propriétaire a été installé, lorsque la compétence est fournie par un plugin
Événement de mention @
Enregistré lorsque Claude Code résout une mention@ dans une invite. Pas chaque mention n’émet un événement : les chemins de sortie anticipée tels que les refus de permission, les fichiers surdimensionnés, les pièces jointes de référence PDF et les défaillances de listage de répertoires retournent sans journalisation.
Nom de l’événement : claude_code.at_mention
Attributs :
- Tous les attributs standard
event.name:"at_mention"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsmention_type: Type de mention ("file","directory","agent","mcp_resource","peer"). La valeur"peer"signifie que vous avez mentionné l’une de vos autres sessions Claude Code. Nécessite Claude Code v2.1.232 ou ultérieursuccess: Si la mention a été résolue avec succès ("true"ou"false")
Événement de tentatives API épuisées
Enregistré une fois lorsqu’une demande API échoue après plus d’une tentative. Émis aux côtés de l’événementapi_error final.
Nom de l’événement : claude_code.api_retries_exhausted
Attributs :
- Tous les attributs standard
event.name:"api_retries_exhausted"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsmodel: Modèle utiliséerror: Message d’erreur finalstatus_code: Code de statut HTTP sous forme de nombre. Absent pour les erreurs non-HTTP.total_attempts: Nombre total de tentatives effectuéestotal_retry_duration_ms: Temps mural total sur toutes les tentativesspeed:"fast"ou"normal"
Événement de hook enregistré
Enregistré une fois par hook configuré au démarrage de la session. Utilisez cet événement pour inventorier les hooks actifs dans votre flotte, en complément des événements par exécutionhook_execution_start et hook_execution_complete.
Nom de l’événement : claude_code.hook_registered
Attributs :
- Tous les attributs standard
event.name:"hook_registered"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementshook_event: type d’événement hook, par exemple"PreToolUse"ou"PostToolUse"hook_type: type d’implémentation du hook :"command","prompt","mcp_tool","http", ou"agent"hook_source: où le hook est défini :"userSettings","projectSettings","localSettings","flagSettings","policySettings", ou"pluginHook"safe_mode:"true"lorsque la session a été démarrée avec--safe-mode,"false"sinon. Nécessite Claude Code v2.1.169 ou ultérieurhook_matcher(lorsqueOTEL_LOG_TOOL_DETAILS=1) : la chaîne de correspondance de la configuration du hook, lorsqu’une est définieplugin.name(lorsquehook_sourceest"pluginHook") : nom du plugin contributeur. Pour les plugins en dehors de la place de marché officielle et du bundle intégré, la valeur est"third-party"sauf siOTEL_LOG_TOOL_DETAILS=1plugin_id_hash(lorsquehook_sourceest"pluginHook") : hash déterministe du nom du plugin et de la place de marché, envoyé uniquement à votre exportateur configuré. Vous permet de compter les plugins contributeurs distincts sans enregistrer leurs noms. Claude Code le calcule comme décrit sous l’événement de plugin chargé
Événement de début d’exécution de hook
Enregistré lorsqu’un ou plusieurs hooks commencent à s’exécuter pour un événement hook. Nom de l’événement :claude_code.hook_execution_start
Attributs :
- Tous les attributs standard
event.name:"hook_execution_start"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementshook_event: Type d’événement hook, par exemple"PreToolUse"ou"PostToolUse"hook_name: Nom complet du hook incluant le correspondant, par exemple"PreToolUse:Write"num_hooks: Nombre de commandes hook correspondantesmanaged_only:"true"lorsque seuls les hooks de politique gérée sont autoriséshook_source:"policySettings"ou"merged"safe_mode:"true"lorsque la session a été démarrée avec--safe-mode,"false"sinon. Nécessite Claude Code v2.1.169 ou ultérieurhook_definitions: Configuration du hook sérialisée en JSON. Inclus uniquement lorsque le traçage bêta détaillé etOTEL_LOG_TOOL_DETAILS=1sont tous deux activés
Événement de fin d’exécution de hook
Enregistré lorsque tous les hooks pour un événement hook ont terminé. Nom de l’événement :claude_code.hook_execution_complete
Attributs :
- Tous les attributs standard
event.name:"hook_execution_complete"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementshook_event: Type d’événement hookhook_name: Nom complet du hook incluant le correspondantnum_hooks: Nombre de commandes hook correspondantesnum_success: Nombre qui ont réussinum_blocking: Nombre qui ont retourné une décision de blocagenum_non_blocking_error: Nombre qui ont échoué sans bloquernum_cancelled: Nombre annulé avant la fintotal_duration_ms: Durée mural de tous les hooks correspondantsstdout_chars: Nombre total de caractères de stdout sur les hooks correspondants qui ont réussi. Nécessite Claude Code v2.1.280 ou ultérieuradditional_context_chars: Nombre total de caractères deadditionalContextretournés par les hooks correspondants. Nécessite Claude Code v2.1.280 ou ultérieursystem_message_chars: Nombre total de caractères desystemMessageretournés par les hooks correspondants. Nécessite Claude Code v2.1.280 ou ultérieurinitial_user_message_chars: Nombre total de caractères deinitialUserMessageretournés par les hooks correspondants. Nécessite Claude Code v2.1.280 ou ultérieurnum_outputs_persisted: Nombre de sorties de hook au-delà de la limite de 10 000 caractères que Claude Code a enregistrées dans un fichier. Nécessite Claude Code v2.1.280 ou ultérieurmanaged_only:"true"lorsque seuls les hooks de politique gérée sont autoriséshook_source:"policySettings"ou"merged"safe_mode:"true"lorsque la session a été démarrée avec--safe-mode,"false"sinon. Nécessite Claude Code v2.1.169 ou ultérieurhook_definitions: Configuration du hook sérialisée en JSON. Inclus uniquement lorsque le traçage bêta détaillé etOTEL_LOG_TOOL_DETAILS=1sont tous deux activés
Événement de métriques de plugin de hook
Enregistré lorsqu’un hook de plugin de place de marché officielle émet des métriques par invocation. Seuls les plugins installés à partir d’une place de marché Anthropic officielle peuvent émettre ceci. Les plugins de place de marché tiers et les hooks configurés par l’utilisateur n’émettent pas vers cet événement. Utilisez cet événement pour surveiller le comportement du plugin, par exemple les taux de découverte, les coûts et les durées à partir de votre propre pile d’observabilité. Nom de l’événement :claude_code.hook_plugin_metrics
Attributs :
- Tous les attributs standard
event.name:"hook_plugin_metrics"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsplugin_id: identifiant du plugin sous la forme<name>@<marketplace>hook_event: type d’événement hook qui a émis les métriques- Jusqu’à 20 clés de métriques émises par le plugin. Les noms correspondent à
^[a-z][a-z0-9_]{0,39}$. Les valeurs sont booléennes ou numériques.
Événement de compaction
Enregistré lorsque la compaction de conversation se termine. Nom de l’événement :claude_code.compaction
Attributs :
- Tous les attributs standard
event.name:"compaction"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementstrigger:"auto"ou"manual"success:"true"ou"false"duration_ms: Durée de compactionpre_tokens: Nombre approximatif de jetons avant compactionpost_tokens: Nombre approximatif de jetons après compactionerror: Message d’erreur lorsque la compaction a échouéprecompute_reuse: Défini uniquement lorsquetriggerest"manual". La compaction automatique peut préparer un résumé en arrière-plan avant que la fenêtre de contexte ne se remplisse, et cet attribut enregistre si/compacta réutilisé ce résumé préparé."hit"signifie qu’il a été réutilisé ;"miss_custom_instructions","miss_hook", et"miss_not_ready"donnent la raison pour laquelle un résumé frais a été calculé à la place. Nécessite Claude Code v2.1.153 ou ultérieur
Événement de fin de sous-agent
Enregistré lorsqu’un sous-agent se termine et retourne son résultat à la conversation qui l’a démarré. Utilisez-le pour regrouper l’utilisation d’outils et le temps d’exécution par type de sous-agent ; pour les regroupements de jetons ou de coûts, utilisez le compteur de jetons et le compteur de coûts filtrés surquery_source "subagent", puisque le total_tokens de cet événement couvre uniquement la demande finale. La catégorie "subagent" compte également les demandes des hooks basés sur des agents, qui n’émettent aucun événement de sous-agent.
Nom de l’événement : claude_code.subagent_completed
Attributs :
- Tous les attributs standard
event.name:"subagent_completed"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsagent_type: Le type de sous-agent. Les noms d’agents intégrés et les agents des plugins de la place de marché officielle apparaissent textuellement ; les autres noms d’agents sont remplacés par"custom"sauf siOTEL_LOG_TOOL_DETAILS=1est définiagent.source: D’où la définition d’agent provient :built-in,plugin, ou la source de paramètres qui a défini un agent personnalisé, par exempleuserSettingsouprojectSettingsis_built_in: Si le sous-agent est un type d’agent intégréis_async: Si le sous-agent s’exécutait en arrière-plantotal_tokens: L’empreinte de jetons de la demande API finale du sous-agent : les jetons d’entrée, de création de cache, de lecture de cache et de sortie de cette seule demande, à peu près la taille du contexte du sous-agent à la fin. Pas une somme sur l’exécutiontotal_tool_uses: Nombre d’appels d’outils que le sous-agent a effectués sur toute l’exécutionduration_ms: Temps d’exécution en millisecondesmodel: Le modèle auquel le sous-agent a été résolu pour s’exécuterfinal_model: Le modèle qui a produit la réponse finale du sous-agent, qui diffère demodelaprès un changement en cours d’exécution tel qu’un secours. Nécessite Claude Code v2.1.212 ou ultérieurmodel_swapped: Si plus d’un modèle a servi les demandes du sous-agent. Nécessite Claude Code v2.1.212 ou ultérieurplugin_id_hash,plugin.name: Présent pour les agents fournis par les plugins. Les noms des plugins de la place de marché officielle apparaissent textuellement ; les autres noms de plugins sont remplacés par"third-party"sauf siOTEL_LOG_TOOL_DETAILS=1est défini
Événement d’enquête de rétroaction
Enregistré lorsqu’une enquête de qualité de session est affichée ou répondue. Voir Enquêtes de qualité de session pour ce que les enquêtes collectent et comment les contrôler. Nom de l’événement :claude_code.feedback_survey
Attributs :
- Tous les attributs standard
event.name:"feedback_survey"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsevent_type: Événement du cycle de vie de l’enquête, par exemple"appeared","responded", ou"transcript_prompt_appeared"appearance_id: ID unique reliant les événements émis pour une instance d’enquêtesurvey_type: Quelle enquête a produit l’événement."session"est l’invite d’évaluation « Comment Claude se débrouille-t-il ? »response: La sélection de l’utilisateur sur les événementsrespondedenabled_via_override:truelorsqueCLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTELest défini. Émis sous forme de booléen, pas de chaîne. Présent sur les événements d’enquêtesession. Filtrez sur cet attribut pour confirmer que le remplacement est appliqué dans une flotte
Événement de balayage de rétention
Enregistré une fois par exécution du balayage de nettoyage de rétention, qui supprime les transcriptions de session et autres données d’application plus anciennes que le paramètrecleanupPeriodDays. Claude Code exécute le balayage en arrière-plan au maximum une fois par session, et une exécution qui ne supprime rien émet quand même l’événement. Si Claude Code a exécuté le balayage dans n’importe quelle session sur la même machine au cours des 24 dernières heures, il retarde le balayage de cette session d’au moins 10 minutes, donc une session qui se termine plus tôt n’émet rien. Lorsque vous exécutez claude -p avec --bare, Claude Code n’exécute pas le balayage et n’émet rien.
Comme chaque événement OTel sur cette page, il va uniquement au backend de télémétrie que vous configurez. Nécessite Claude Code v2.1.227 ou ultérieur.
Lorsque Claude Code ne peut pas déterminer avec certitude la période de rétention, il met en pause le balayage et émet l’événement avec result défini à "skipped" et une skip_reason. Lorsque les paramètres gérés définissent cleanupPeriodDays, la valeur gérée épingle la période de rétention et le balayage s’exécute même lorsqu’un fichier de paramètres dans une portée de priorité inférieure est cassé ou invalide. Lorsque managed-settings.json lui-même ne peut pas être lu, Claude Code met quand même en pause le balayage sauf si le niveau géré fournit cleanupPeriodDays d’ailleurs, par exemple à partir des paramètres gérés par le serveur ou d’une suppression managed-settings.d/ à côté du fichier cassé. Les attributs du compteur de suppression sont présents uniquement lorsque result est "complete".
Nom de l’événement : claude_code.retention_sweep
Attributs :
- Tous les attributs standard
event.name:"retention_sweep"event.timestamp: Timestamp ISO 8601event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événementsresult:"complete"lorsque le balayage s’est exécuté,"skipped"lorsque Claude Code l’a mis en pauseperiod_days: La valeurcleanupPeriodDaysà partir des paramètres fusionnés, en jours, ou30lorsqu’aucune source ne la définit. Sur les événements ignorés, la valeur que le balayage aurait utilisée, calculée à partir des sources de paramètres que Claude Code pouvait lireused_default:"true"lorsqu’aucune source de paramètres lisible ne définitcleanupPeriodDays,"false"sinon. Sur les événements complets,"true"signifie que la valeur par défaut de 30 jours s’appliquaitskip_reason: Pourquoi Claude Code a mis en pause le balayage. Présent uniquement lorsqueresultest"skipped":"user_source_disabled": Les paramètres utilisateur sont exclus, par exemple par le drapeau--setting-sourcesou l’optionsettingSourcesdu SDK, et aucune source activée ne fournitcleanupPeriodDays"settings_unknowable": Un fichier de paramètres n’a pas pu être lu ou analysé, donccleanupPeriodDaysoudesktopSessionCleanupPeriodDayspeut être défini à une valeur que Claude Code ne peut pas voir"settings_invalid_key_set": Les paramètres ont des erreurs de validation etcleanupPeriodDaysoudesktopSessionCleanupPeriodDaysest explicitement défini, donc revenir à la valeur par défaut pourrait supprimer ou conserver des fichiers contre ce paramètre
transcripts_deleted: Nombre de transcriptions de session, les fichiers~/.claude/projects/*/*.jsonlde niveau supérieur, que le balayage a suppriméstranscripts_exempted_desktop: Nombre de transcriptions au-delà de la période de rétention que le balayage a conservées selon la règle Claude Desktop et Cowork. Celles-ci ne comptent pas versfiles_past_cutoff. Nécessite Claude Code v2.1.248 ou ultérieursession_files_deleted: Nombre d’artefacts que le balayage des fichiers de session a supprimés : transcriptions plus fichiers compagnons par session tels que les barres latérales, les enregistrements et les résultats d’outilsartifacts_deleted: Nombre total d’éléments que le balayage a supprimés dans les répertoires de données qu’il couvre, y compris les fichiers de session. Certains balayages comptent un arbre de répertoires supprimé entier comme un élément et quelques passes de nettoyage ne contribuent pas au compteur, donc traitez la valeur comme un plancher plutôt qu’un nombre exact de fichiersfiles_retained_fresh: Fichiers inspectés et laissés en place car ils sont toujours dans la période de rétention. Seuls les balayages par fichier comptent ceux-ci, donc la valeur est un plancher ; une valeur non nulle est l’état stable normalfiles_past_cutoff: Fichiers plus anciens que la période de rétention que le balayage n’a pas pu supprimer, par exemple en raison d’une erreur de permission ou d’un fichier maintenu ouvert. Une valeur supérieure à zéro signifie que les fichiers ont dépassé la période de rétention configurée ; zéro n’est pas la preuve qu’aucun ne l’a fait, car une suppression échouée d’un répertoire entier compte verserror_countà la placeerror_count: Nombre d’erreurs que le balayage a rencontrées lors de la liste ou de la suppression de fichiers
Événement de paramètres gérés résolus
Enregistré avec les paramètres gérés qu’une session a résolus : une fois au démarrage de la session, à nouveau lorsque soit les paramètres gérés soit l’état de l’assistant de politique change pendant la session, et lorsque Claude Code refuse de démarrer ou termine la session pour l’une des raisons que l’attributerror.type énumère.
Utilisez cet événement pour trouver les machines exécutées sur une source gérée inattendue, les machines dont l’assistant de politique échoue, et la raison pour laquelle une machine a refusé de démarrer.
Nécessite Claude Code v2.1.274 ou ultérieur.
Par défaut, l’événement porte les sources gérées et l’état de l’assistant de politique mais pas les paramètres eux-mêmes. Pour ajouter l’attribut managed_settings.settings rédacté et le digest managed_settings.resolved_sha256, définissez OTEL_LOG_MANAGED_SETTINGS=1 :
- Définissez-le dans le bloc
envdes paramètres gérés, des paramètres utilisateur, ou--settings, ou dans l’environnement avec lequel vous lancez Claude Code. Une valeur dans les paramètres du projet ou locaux ne l’active pas, car un référentiel cloné peut les écrire. - Les paramètres gérés par le serveur peuvent le définir sans afficher la boîte de dialogue d’approbation de sécurité, car la variable ajoute uniquement votre propre politique rédactée de l’organisation à un événement que votre organisation reçoit déjà.
claude_code.managed_settings_resolved
Attributs :
- Tous les attributs standard
-
event.name:"managed_settings_resolved" -
event.timestamp: Timestamp ISO 8601 -
event.sequence: compteur par processus pour ordonner les événements, décrit sous Attributs de corrélation d’événements -
managed_settings.trigger:"startup"pour l’événement de démarrage de session,"change"lorsque les paramètres gérés ou l’état de l’assistant de politique ont changé plus tard dans la session, ou"refused"lorsqu’une politique de paramètres gérés a arrêté la session. Claude Code envoie un événementchangeuniquement lorsqu’un attribut diffère du dernier événement qu’il a envoyé, et une valeur de paramètre modifiée compte même lorsqueOTEL_LOG_MANAGED_SETTINGSest désactivé -
error.type: pourquoi Claude Code a arrêté la session. Présent uniquement sur les événementsrefused:"helper_failed": une exécution d’assistant de politique a échoué"policy_invalid": les paramètres gérés contiennent une erreur qui arrête Claude Code de démarrer, ou une source d’administration n’a pas pu se charger, donc Claude Code ne peut pas vérifier l’application de la connexion à l’organisation"consent_rejected": l’utilisateur a rejeté la boîte de dialogue d’approbation de sécurité pour les paramètres gérés par le serveur"force_refresh_failed": la récupération de paramètres queforceRemoteSettingsRefreshnécessite a échoué"gateway_rejected": une passerelle d’applications Claude a répondu au chargement des paramètres gérés avec HTTP 403"version_below_minimum": cette version de Claude Code est inférieure àrequiredMinimumVersionou supérieure àrequiredMaximumVersion"_OTHER": le chargement des paramètres gérés de la passerelle d’applications Claude a échoué pour une autre raison
-
managed_settings.sources: chaque source gérée qui fournit au moins une clé de politique, priorité la plus élevée en premier, y compris les sources dont les clés ne prennent pas effet sousfirst-wins. Les valeurs sont"remote","plist"ou"hklm"pour la politique MDM ou au niveau du système d’exploitation,"file"pour les fichiers de paramètres gérés et les suppressions,"parent"lorsqu’un hôte d’intégration fournit des paramètres, et"hkcu"pour la valeur du registre Windows HKCU lorsque Claude Code la lit. Une source qui porte uniquement des clés de contrôle, ou que Claude Code n’a pas pu lire, n’est pas listée. Émis sous forme de tableau de chaînes, vide lorsqu’aucune source gérée ne fournit une clé de politique -
managed_settings.source_behavior: la valeurmanagedSourcesBehaviorque Claude Code a lue,"first-wins"ou"merge"."first-wins"lorsqu’aucune source ne définit la clé -
managed_settings.helper.state: état de l’assistant de politique que la source MDM ou fichier sélectionnée configure :"ok": la sortie de l’assistant sert de paramètres gérés"bad_path","not_a_file","exit_nonzero","timed_out","oversize","parse_failed","envelope_invalid", ou"schema_rejected": la dernière exécution de l’assistant a échoué. Les défaillances d’assistant décrivent les cas"none": aucun assistant n’est configuré, ou la source qui le configure n’est pas une politique MDM ou un fichier de paramètres gérés
-
managed_settings.helper.applied:"output"tandis que la sortie propre de l’assistant sert de paramètres gérés,"none"lorsqu’elle ne le fait pas -
managed_settings.helper.entry:"policyHelper"lorsque Claude Code a sélectionné unpolicyHelper. Absent lorsqu’il n’a sélectionné aucun assistant -
managed_settings.helper.path: lepathconfiguré de l’assistant. Présent chaque fois que Claude Code a sélectionné un assistant, qu’il ait réussi ou non -
managed_settings.resolved_sha256(lorsqueOTEL_LOG_MANAGED_SETTINGS=1) : SHA-256 des paramètres gérés résolus avant rédaction, sérialisés en JSON avec les clés triées récursivement et sans espace blanc. Les machines avec le même digest exécutent la même politique. Claude Code envoie le digest uniquement avec l’opt-in car une politique courte peut être récupérée en hachant des suppositions. Absent lorsqu’aucun paramètre géré n’a été résolu, et sur les événementsrefused -
managed_settings.settings(lorsqueOTEL_LOG_MANAGED_SETTINGS=1) : les noms et la forme des paramètres gérés résolus sous forme de chaîne JSON, avec les valeurs rédactées. Absent sur les événementsrefused. Claude Code le construit à partir de son schéma de paramètres :- Un nom de paramètre que le schéma déclare est exporté, et une clé qu’il ne déclare pas est laissée de côté
- Les booléens, les nombres et les valeurs de chaîne que le schéma restreint à un ensemble fixe d’options, par exemple
permissions.defaultMode, sont exportés tels quels.sandbox.network.httpProxyPortetsandbox.network.socksProxyPortsont exportés comme"[REDACTED]" - Chaque autre chaîne, par exemple
model,apiKeyHelper, chaque valeurenv, chaque URL et chaque commande, est exportée comme"[REDACTED]" - Les noms d’entrée des cartes, par exemple les noms de variables
envet les ID de plugins, sont exportés tels quels. Un paramètre dont les entrées le schéma ne tape pas, par exemplevimInsertModeRemaps, est exporté comme un seul"[REDACTED]", etsandbox.ignoreViolationsest exporté comme une liste de ses listes de chemins sans les modèles de commande - Une liste conserve sa longueur, avec chaque entrée rédactée par les mêmes règles
- Une règle
permissions.allow,permissions.deny, oupermissions.askest exportée comme son nom d’outil avec le contenu rédacté, par exempleRead([REDACTED]), lorsque l’outil est intégré à cette version de Claude Code ou est une référencemcp__telle quemcp__jira__create_issue. Toute autre règle est exportée comme"[REDACTED]" - Les hooks suivent les mêmes règles, donc les champs à option fixe et numériques tels que
typeettimeouts’affichent, tandis que chaque commande, URL,matcheret conditionifest exportée comme"[REDACTED]"
apiKeyHelper, deux variablesenvet une règle de refus sont exportés comme{"apiKeyHelper":"[REDACTED]","env":{"HTTPS_PROXY":"[REDACTED]","CLAUDE_CODE_ENABLE_TELEMETRY":"[REDACTED]"},"permissions":{"deny":["Read([REDACTED])"]}}. Claude Code coupe la valeur à 8 KB d’UTF-8, et la valeur coupée n’est pas un JSON valide -
managed_settings.settings_truncated(lorsquemanaged_settings.settingsest présent) :truelorsque Claude Code a coupémanaged_settings.settingsà 8 KB,falsesinon. Émis sous forme de booléen, pas de chaîne
Interpréter les données de métriques et d’événements
Les métriques et événements exportés prennent en charge une gamme d’analyses :Surveillance de l’utilisation
Surveillance des coûts
La métriqueclaude_code.cost.usage aide à :
- Suivre les tendances d’utilisation entre les équipes ou les individus
- Identifier les sessions à utilisation élevée pour l’optimisation
- Attribuer les dépenses à des compétences, des plugins ou des types de sous-agents spécifiques via les attributs
skill.name,plugin.name, etagent.name
Les métriques de coûts sont des approximations. Pour les données de facturation officielles, consultez votre fournisseur d’API (Claude Console, Amazon Bedrock ou Google Cloud’s Agent Platform).
ANTHROPIC_BASE_URL diffuse l’utilisation progressivement sur plusieurs images. Avant la v2.1.214, les flux qui contenaient l’utilisation dans plus d’une image gonflaient claude_code.cost.usage et claude_code.token.usage d’environ une demande complète supplémentaire par image supplémentaire.
Alertes et segmentation
Les alertes courantes à considérer :- Pics de coûts
- Consommation de jetons inhabituelle
- Volume de session élevé d’utilisateurs spécifiques
model est disponible sur claude_code.token.usage, claude_code.cost.usage, et à partir de la v2.1.172, claude_code.lines_of_code.count.
Les ventilations par modèle des commits ne peuvent être approximées que en joignant les métriques de jetons ou de coûts sur session.id, puisqu’une session peut s’étendre sur plusieurs modèles. Filtrez le côté jetons ou coûts pour les lignes où query_source est "main" afin que les demandes auxiliaires et de sous-agents n’attribuent pas les commits de la session à un modèle qui ne les a pas effectués.
Détecter l’épuisement des tentatives
Claude Code réessaie les demandes d’API échouées en interne et n’émet un seul événementclaude_code.api_error qu’après avoir abandonné, donc l’événement lui-même est le signal terminal pour cette demande. Les tentatives de nouvelle tentative intermédiaires ne sont pas enregistrées comme des événements séparés.
L’attribut attempt sur l’événement enregistre le nombre total de tentatives effectuées. CLAUDE_CODE_MAX_RETRIES est par défaut 10 et plafonné à 15. À partir de la v2.1.199, vous pouvez définir CLAUDE_CODE_RETRY_WATCHDOG pour augmenter la valeur par défaut et supprimer le plafond.
Lorsque la demande épuise toutes les tentatives sur une erreur transitoire, attempt est égal à un de plus que cette limite effective : 11 par défaut, et jamais plus de 16 sauf si le watchdog est défini. Une valeur inférieure indique une erreur non réessayable telle qu’une réponse 400, ou une cause avec son propre budget de tentatives plus petit. Par exemple, Claude Code réessaie un échec de chargement des identifiants AWS ou Google Cloud au maximum deux fois.
Pour distinguer une session qui s’est rétablie d’une qui s’est bloquée, groupez les événements par session.id et vérifiez si un événement api_request ultérieur existe après l’erreur.
Analyse des événements
Les données d’événements fournissent des informations détaillées sur les interactions de Claude Code : Modèles d’utilisation des outils : analyser les événements de résultat d’outil pour identifier :- Les outils les plus fréquemment utilisés
- Les taux de réussite des outils
- Les temps d’exécution moyens des outils
- Les modèles d’erreur par type d’outil
Audit des événements de sécurité
Les événements OpenTelemetry sont la source de données d’audit pour l’activité de Claude Code. Chaque événement porte des attributs d’identité qui lient les appels d’outils, l’activité MCP et les décisions de permission à l’utilisateur qui les a déclenchés. L’exportateur de journaux OTLP peut livrer ces événements à n’importe quelle plateforme SIEM (Security Information and Event Management) avec un récepteur OTLP, ou à un collecteur OpenTelemetry qui transfère vers votre SIEM.Attribuer les actions aux utilisateurs
Les attributs standard sur chaque événement incluent l’identité de l’utilisateur authentifié :user.email, user.account_uuid, user.account_id, et organization.id lorsqu’il est connecté avec un compte Claude ou, dans une session cloud, lorsque les propres identifiants de la session les portent, plus user.id et le per-session session.id. user.id est un identifiant limité à l’installation, sauf sur les sessions de passerelle d’applications Claude, où il s’agit du sujet IdP du jeton émis par la passerelle.
Dans une session qu’un développeur démarre, les appels d’outils MCP, les commandes Bash et les éditions de fichiers sont donc attribués à ce développeur. Claude Code n’agit pas sous un compte de service distinct ; l’identité enregistrée sur chaque événement est le propre compte Claude du développeur, ou l’identité IdP du développeur sur une session de passerelle d’applications Claude. Dans les sessions de canal Claude Tag, Claude fonctionne plutôt comme l’identité partagée de votre organisation.
Lorsque Claude Code s’authentifie avec une clé API directe, ou contre Amazon Bedrock, Google Cloud’s Agent Platform ou Microsoft Foundry, il n’y a pas de compte Claude dans la session et seuls user.id et session.id sont remplis. Dans ces déploiements, attachez l’identité utilisateur vous-même avec OTEL_RESOURCE_ATTRIBUTES, défini par utilisateur via le fichier paramètres gérés ou un wrapper de lancement. Les sessions de passerelle d’applications Claude n’ont besoin d’aucune de ces opérations : le CLI horodate l’identité IdP automatiquement, comme décrit dans Attributs standard.
Audit de l’activité MCP
Pour capturer l’activité du serveur MCP avec tous les détails d’appel, activez l’exportateur de journaux et définissezOTEL_LOG_TOOL_DETAILS=1. Chaque opération MCP produit alors des événements structurés qui portent le nom du serveur, le nom de l’outil et les arguments d’appel aux côtés des attributs d’identité standard :
Sans
OTEL_LOG_TOOL_DETAILS, ces événements suppriment le détail d’identification :
tool_result: conservemcp_server_scopeet untool_nameredacté au littéral"mcp_tool"pour les serveurs configurés par l’utilisateur, omet le contenu des arguments. Pour les serveurs intégrés de Claude Desktop, dans les sessions que Claude Desktop possède, il conserve également la pairemcp_server_name/mcp_tool_nameà l’intérieur detool_parameters, la même exception créée par l’hôte quetool_decision, nécessitant Claude Code v2.1.214 ou ultérieurtool_decision: conservetool_sourceet untool_nameredacté au littéral"mcp_tool"pour les serveurs configurés par l’utilisateur, omet le contenu des arguments. Pour les serveurs intégrés de Claude Desktop, dans les sessions que Claude Desktop possède, il conserve également la pairemcp_server_name/mcp_tool_nameà l’intérieur detool_parameters;tool_sourceet la paire de noms nécessitent tous deux Claude Code v2.1.214 ou ultérieurmcp_server_connection: ometserver_nameet le message d’erreur, mais conserveis_plugin,plugin_id_hash, etplugin.name, avec les noms de plugins non-Anthropic redactés au littéral"third-party", de sorte que les serveurs fournis par les plugins restent distinguables sans journalisation détaillée
Mapper les questions de sécurité aux événements
Lors de la création de règles de détection, recherchez le signal que vous souhaitez surveiller et interrogez votre backend pour l’événement correspondant et les attributs :
Claude Code émet uniquement le flux d’événements brut. La détection d’anomalies, l’établissement de lignes de base, la corrélation entre les sessions et les alertes sont la responsabilité de votre SIEM ou backend d’observabilité.
Envoyer les événements à un SIEM
PointezOTEL_EXPORTER_OTLP_LOGS_ENDPOINT vers le récepteur OTLP de votre SIEM, ou vers un collecteur OpenTelemetry qui transfère vers l’API d’ingestion native de votre SIEM. L’exemple de paramètres gérés suivant exporte uniquement les événements, avec tous les détails d’outil activés pour l’audit MCP et Bash :
claude_code.user_prompt. Si rien n’arrive, démarrez Claude Code avec claude --debug-file <path> et vérifiez ce journal pour les erreurs d’exportation [3P telemetry].
Considérations relatives aux backends
Votre choix de backends de métriques, de journaux et de traces détermine les types d’analyses que vous pouvez effectuer :Pour les métriques
- Bases de données de séries chronologiques : Calculs de taux, métriques agrégées
- Magasins colonnaires : Requêtes complexes, analyse d’utilisateurs uniques
- Plates-formes d’observabilité complètes : Requêtes avancées, visualisation, alertes
Pour les événements/journaux
- Systèmes d’agrégation de journaux : Recherche en texte intégral, analyse de journaux
- Magasins colonnaires : Analyse d’événements structurés
- Plates-formes d’observabilité complètes : Corrélation entre les métriques et les événements
Pour les traces
Choisissez un backend qui prend en charge le stockage de traces distribuées et la corrélation d’intervalles :- Systèmes de traçage distribué : Visualisation d’intervalles, cascades de demandes, analyse de latence
- Plates-formes d’observabilité complètes : Recherche de traces et corrélation avec les métriques et les journaux
Informations sur le service
Toutes les métriques et tous les événements sont exportés avec les attributs de ressource suivants :service.name:claude-codepour les sessions de terminal,claude-code-desktoppour les sessions démarrées à partir de l’onglet Code dans l’application Claude Desktopservice.version: Version actuelle de Claude Code, ou la version de l’application Desktop pour les sessions de l’onglet Codeos.type: Type de système d’exploitation (par exemple,linux,darwin,windows)os.version: Chaîne de version du système d’exploitationhost.arch: Architecture de l’hôte (par exemple,amd64,arm64)wsl.version: Numéro de version WSL (présent uniquement lors de l’exécution sur Windows Subsystem for Linux)- Nom du compteur :
com.anthropic.claude_code
service.name = claude-code, ajoutez claude-code-desktop au filtre pour capturer également la télémétrie des sessions de l’onglet Code.
Ressources de mesure du ROI
Pour un guide complet sur la mesure du retour sur investissement pour Claude Code, y compris la configuration de la télémétrie, l’analyse des coûts, les métriques de productivité et les rapports automatisés, consultez le Guide de mesure du ROI de Claude Code. Ce référentiel fournit des configurations Docker Compose prêtes à l’emploi, des configurations Prometheus et OpenTelemetry, et des modèles pour générer des rapports de productivité intégrés à des outils comme Linear.Sécurité et confidentialité
- L’export OpenTelemetry vers votre backend est opt-in et nécessite une configuration explicite. Pour la télémétrie opérationnelle distincte d’Anthropic et comment la désactiver, consultez Utilisation des données
- Les contenus de fichiers bruts et les extraits de code ne sont pas inclus dans les métriques ou les événements. Les intervalles de trace constituent un chemin de données distinct : voir la puce
OTEL_LOG_TOOL_CONTENTci-dessous - Lorsqu’authentifié via OAuth,
user.emailest inclus dans les attributs de télémétrie, envoyé uniquement au point de terminaison OTel que vous configurez, jamais à Anthropic. Si cela pose un problème pour votre organisation, travaillez avec votre backend de télémétrie pour filtrer ou masquer ce champ - Le contenu des invites utilisateur n’est pas collecté par défaut. Seule la longueur de l’invite est enregistrée. Pour inclure le contenu de l’invite, définissez
OTEL_LOG_USER_PROMPTS=1. Sous le traçage bêta détaillé, cette variable s’étend au-delà du texte d’invite : elle contrôle également l’attribut d’intervallenew_context, qui porte les résultats d’outil sur l’intervalleclaude_code.llm_request - Le texte de réponse de l’assistant n’est pas collecté par défaut. Seule la longueur de la réponse est enregistrée. Pour inclure le texte de réponse, définissez
OTEL_LOG_ASSISTANT_RESPONSES=1. Comme toutes les données OpenTelemetry de Claude Code, le texte de réponse est envoyé uniquement au point de terminaison OTel que vous configurez, jamais à Anthropic. Lorsque cette variable n’est pas définie,OTEL_LOG_USER_PROMPTSest utilisé comme solution de secours, donc définissezOTEL_LOG_ASSISTANT_RESPONSES=0si vous souhaitez le contenu de l’invite sans contenu de réponse - Les arguments d’entrée d’outil et les paramètres ne sont pas enregistrés par défaut. Pour les inclure, définissez
OTEL_LOG_TOOL_DETAILS=1. Pour les serveurs intégrés de Claude Desktop, dans les sessions que Claude Desktop possède,tool_decisionettool_resultportent la pairemcp_server_name/mcp_tool_name, des noms créés par l’hôte plutôt que du contenu d’argument, même avec le drapeau désactivé. L’exception nécessite Claude Code v2.1.214 ou version ultérieure. Ces données sont envoyées uniquement au point de terminaison OTEL que vous configurez, jamais à Anthropic. Les arguments peuvent toujours contenir des valeurs sensibles, donc configurez votre backend de télémétrie pour filtrer ou masquer ces attributs selon les besoins. Lorsqu’activé :- Les événements
tool_resultettool_decisionincluent un attributtool_parametersavec les commandes Bash, les noms de serveur MCP et d’outil, et les noms de compétences. Les champs tels quefull_commandsont émis sans troncature - Les événements
tool_resultincluent également un attributtool_inputavec les chemins de fichiers, les URL, les modèles de recherche et d’autres arguments. Les valeurs individuelles dépassant 512 caractères sont tronquées et le total est limité à environ 4 K caractères - Les événements
user_promptincluent lecommand_nameverbatim pour les commandes personnalisées, de plugin et MCP - Les compteurs de coût et de jeton et les événements
api_request,api_erroretapi_refusalportent les noms réels d’agent, de compétence, de plugin et de serveur MCP et d’outil dans leurs attributs d’attribution - Les intervalles de trace incluent le même attribut
tool_inputet les attributs dérivés de l’entrée tels quefile_path, avec la même troncature quetool_input
- Les événements
- Le contenu d’outil n’est pas enregistré dans les intervalles de trace par défaut. Pour l’inclure, définissez
OTEL_LOG_TOOL_CONTENT=1. L’intervalleclaude_code.toolporte alors un événement d’intervalletool.outputavec les contenus de fichiers bruts, la sortie de commande Bash, et ce que les outils MCP, WebFetch et WebSearch retournent, tronqués à la limite de contenu (60 Ko par défaut) par attribut. Les résultats des outils MCP, WebFetch et WebSearch nécessitent Claude Code v2.1.283 ou version ultérieure. Le contenu d’outil atteint également les intervalles vianew_context, dont la porte diffère par intervalle. Configurez votre backend de télémétrie pour filtrer ou masquer ces attributs selon les besoins - Les corps bruts de la demande et de la réponse de l’API Messages d’Anthropic ne sont pas enregistrés par défaut. Pour les inclure, définissez
OTEL_LOG_RAW_API_BODIESdans votre shell, vos paramètres utilisateur ou vos paramètres gérés. Il est ignoré dans les paramètres de projet et locaux. Les corps contiennent l’historique complet de la conversation, y compris l’invite système, chaque tour d’utilisateur et d’assistant antérieur, et les résultats d’outils, donc l’activation de cette option implique le consentement à tout ce que les autres drapeaux de contenuOTEL_LOG_*révèleraient. Claude Code masque toujours le contenu de réflexion étendue de Claude de ces corps, indépendamment des autres paramètres. La valeur que vous définissez détermine comment Claude Code livre les corps :-
Avec
=1, Claude Code émet des événements de journauxapi_request_bodyetapi_response_bodypour chaque appel d’API. L’attributbodydes événements porte la charge utile sérialisée en JSON, tronquée à la limite de contenu (60 Ko par défaut) -
Avec
=file:<dir>, Claude Code écrit les corps non tronqués dans les fichiers.request.jsonet.response.jsonsous ce répertoire, et les événements portent un cheminbody_refà la place du corps en ligne. Livrez le répertoire avec un collecteur de journaux ou un sidecar plutôt que via le flux de télémétrie. Pour chaque réponse réussie, Claude Code ajoute également une ligne àindex.jsonldans ce répertoire, reliant le fichier de réponse au fichier de demande qui l’a produit et au message de transcription qu’il est devenu. Chaque ligne ne contient aucun contenu de message, et la section événement du corps de réponse API énumère ses champs. Le fichier d’index nécessite Claude Code v2.1.274 ou version ultérieure
-
Avec