Passer au contenu principal

Configurer un collecteur OpenTelemetry personnalisé pour les agents Office

Mis à jour aujourd’hui

Vous pouvez acheminer la télémétrie d'audit complète des agents Office vers votre propre collecteur OpenTelemetry (OTEL). Cela donne à votre organisation un contrôle total sur la rétention, le chiffrement et l'intégration avec votre SIEM ou plateforme d'observabilité.

Ce guide explique comment activer un collecteur personnalisé, les données que vous recevrez et la référence complète du schéma de span.

Les collecteurs OTEL personnalisés sont disponibles pour les organisations Claude Enterprise et pour les déploiements directs (Amazon Bedrock, Google Vertex AI ou une passerelle).

Ce que vous recevrez

Lorsque vous configurez un collecteur personnalisé, les agents Office envoient des données de trace couvrant chaque tour utilisateur. Chaque tour produit un arbre de spans capturant l'invite, les appels de modèle, les exécutions d'outils, les téléchargements de fichiers et les événements de compaction de contexte.

Votre collecteur reçoit tous les attributs de span, y compris ceux contenant du contenu généré par l'utilisateur (texte d'invite, entrées et sorties d'outils, URL de documents et noms de fichiers). Aucun attribut n'est masqué ou filtré. Le texte de réponse de l'assistant n'est pas inclus dans les données de span émises. Votre organisation possède ces données.

Important : Les métriques ne sont pas envoyées aux collecteurs personnalisés. L'espace de noms du compteur office_agent.* est acheminé vers Anthropic uniquement. Cependant, chaque incrément de compteur apparaît également comme un événement de span sur le span actif, de sorte que les mêmes signaux sont disponibles dans vos traces.

La télémétrie est envoyée via OTLP/HTTP à votre point de terminaison à {your_url}/v1/traces. gRPC n'est pas pris en charge car le complément s'exécute dans une WebView Office.


Activer un collecteur personnalisé

La configuration varie selon la façon dont votre organisation s'authentifie auprès de Claude.

Important : Lorsqu'un point de terminaison personnalisé est configuré, la télémétrie est envoyée exclusivement à votre collecteur. Les spans ne sont pas envoyés en double à Anthropic.

Organisations Claude Enterprise (OAuth)

Un administrateur d'organisation définit le point de terminaison du collecteur dans la console d'administration Claude.ai sous Paramètres de l'organisation > Agents Office. Le paramètre s'applique à l'ensemble de l'organisation.

Paramètre

Description

otlp_endpoint

URL de base de votre collecteur OTLP. Le complément ajoute /v1/traces. HTTPS fortement recommandé.

otlp_headers

En-têtes d'authentification optionnels, formatés selon la spécification OpenTelemetry : clé1=valeur1,clé2=valeur2

Le protocole doit être OTLP basé sur HTTP. gRPC est rejeté au moment de la configuration.

Déploiements directs (Amazon Bedrock, Google Vertex AI, passerelle)

Pour les déploiements qui s'authentifient auprès de votre propre fournisseur de modèle plutôt que Claude.ai, le point de terminaison du collecteur est fourni via l'un des trois canaux de configuration. Les trois utilisent les mêmes deux clés.

Recommandé : Utilisez le plugin claude-in-office pour Claude Code. Il vous guide dans la génération du manifeste, l'enregistrement des attributs d'extension Entra et la mise en place d'un point de terminaison d'amorçage avec otlp_endpoint et otlp_headers préconfigurés. Les trois canaux ci-dessous sont documentés à titre de référence et pour la configuration manuelle.

Clé

Format

Description

otlp_endpoint

URL HTTPS

URL de base de votre collecteur OTLP. Le complément supprime les barres obliques finales et ajoute /v1/traces.

otlp_headers

clé1=valeur1,clé2=valeur2

En-têtes d'authentification optionnels. Même format que la variable d'environnement OTEL_EXPORTER_OTLP_HEADERS d'OpenTelemetry.

Si otlp_endpoint n'est pas défini ou est vide, aucun collecteur personnalisé n'est configuré et le complément revient au comportement par défaut.

Remarque : Ces canaux de configuration s'appliquent uniquement aux déploiements Microsoft Office. Les compléments Google Workspace sont configurés séparément.

Canal 1 : Paramètre d'URL du manifeste

Ajoutez les clés en tant que paramètres de chaîne de requête à l'URL du volet des tâches dans votre manifeste de complément personnalisé :

Encodez les valeurs en URL. Cela applique la configuration à chaque utilisateur qui installe le manifeste.

Canal 2 : Extension d'annuaire Azure Entra ID

Pour une configuration par utilisateur, enregistrez les clés en tant qu'attributs d'extension d'annuaire Entra ID et assignez-les via Microsoft Graph. Le complément les lit à partir du jeton d'ID de l'utilisateur en utilisant l'authentification d'application imbriquée (NAA).

Les noms de revendication dans le jeton d'ID émis suivent le format d'extension d'annuaire Azure :

Revendication

Correspond à

extn.otlp_endpoint

otlp_endpoint

extn.otlp_headers

otlp_headers

Définissez-les par utilisateur avec une opération PATCH Graph sur l'objet utilisateur. Azure encode les valeurs d'extension d'annuaire sous forme de tableaux à un seul élément dans le jeton d'ID ; le complément les déverrouille automatiquement. Ce canal nécessite entra_sso=1 dans les paramètres d'URL du manifeste pour activer l'acquisition de jeton NAA.

Canal 3 : Réponse du point de terminaison d'amorçage

Si votre déploiement utilise un point de terminaison d'amorçage (un point de terminaison JSON que votre organisation héberge et que le complément appelle au démarrage), incluez les clés dans le corps de la réponse :

{
"otlp_endpoint": "https://otel-collector.your-domain.com",
"otlp_headers": "Authorization=Bearer <token>"
}

L'URL du point de terminaison d'amorçage elle-même est configurée via bootstrap_url dans les paramètres d'URL du manifeste ou une revendication Entra extn.bootstrap_url. Si un jeton d'ID Entra a été acquis, il est transmis au point de terminaison d'amorçage en tant qu'en-tête d'autorisation Bearer afin que votre point de terminaison puisse authentifier l'utilisateur avant de retourner la configuration par utilisateur.

Priorité

Lorsque plusieurs canaux fournissent une valeur, les canaux ultérieurs remplacent les canaux antérieurs : les paramètres du manifeste sont lus en premier, puis les revendications Entra, puis la réponse d'amorçage. La réponse d'amorçage l'emporte.

Si vous ne l'avez pas déjà fait, le chemin le plus rapide est le plugin claude-in-office.


Modes de déploiement

L'export du collecteur personnalisé est disponible sur les deux modes de déploiement :

  • Claude.ai Enterprise (OAuth) : piste d'audit complète incluant l'identité de l'utilisateur (user.email, user.account_uuid, organization.id), les métadonnées du serveur MCP et les enregistrements de téléchargement de fichiers.

  • Fournisseur direct (Bedrock, Vertex AI, passerelle) : piste d'audit principale (invites, entrées et sorties d'outils, URL de documents) mais pas d'identité utilisateur, pas de métadonnées MCP et pas d'intervalles de téléchargement de fichiers. L'attribution des utilisateurs nécessite de corréler session.id par rapport aux journaux de votre fournisseur d'identité.

La charge utile d'audit principale est identique dans les deux modes. Les déploiements de fournisseur direct manquent du contexte du compte Claude.ai, donc les attributs dérivés du profil utilisateur ou organisationnel Claude.ai sont absents. Consultez les balises [claude.ai-only] dans le schéma d'intervalle ci-dessous pour la liste complète.

Étiquettes de surface et de fournisseur

Chaque intervalle inclut deux étiquettes identifiant l'application Office et la plateforme qui l'ont généré. Utilisez-les comme vos dimensions principales pour le filtrage et les tableaux de bord.

Étiquette

Valeurs

agent.surface

sheet (Excel/Google Sheets), doc (Word), slide (PowerPoint)

agent.vendor

m (Microsoft)


Référence d'intervalle

Chaque tour d'utilisateur produit un arbre parent/enfant de jusqu'à cinq types d'intervalles. Les attributs marqués [content] contiennent des données générées par l'utilisateur ; ceux-ci forment votre charge utile d'audit. Les attributs marqués [claude.ai-only] sont remplis uniquement lorsque l'utilisateur se connecte avec un compte Claude ; ils sont absents sur les déploiements Bedrock, Vertex AI et passerelle. Les attributs absents sont omis de l'intervalle entièrement (pas de clé avec une valeur nulle).

L'intervalle file.upload et tous les attributs mcp.* sont également [claude.ai-only], car le téléchargement de fichiers et les connexions du serveur MCP sont des fonctionnalités de la plateforme Claude.

Pour les déploiements de fournisseur direct, l'identité de l'utilisateur doit être corrélée via session.id et document.url, jointe aux journaux de session de votre fournisseur d'identité.

Attributs de ressource

Ces attributs apparaissent sur chaque intervalle :

Attribut

Description

service.name

Valeur fixe : office-agent

service.version

Valeur fixe : 1.0.0

git.sha

Identifiant de commit de build

agent.query (intervalle racine)

Un intervalle par tour d'utilisateur. C'est la racine de l'arbre d'intervalles et porte l'identité de session, le contexte du document et l'état du serveur MCP. SpanKind : INTERNAL.

Attribut

Description

agent.surface

sheet | doc | slide

agent.vendor

m

user.message [content]

L'invite de l'utilisateur (premiers 4000 caractères)

session.id

Identifiant de session opaque

user.email [claude.ai-only]

Adresse e-mail de l'utilisateur

user.bucket [claude.ai-only]

Compartiment de hachage déterministe (SHA-256 de l'e-mail, mod 30)

user.account_uuid [claude.ai-only]

UUID du compte Claude

document.url [content]

URL du document Office ouvert

organization.id [claude.ai-only]

UUID de l'organisation Claude

org.rate_limit_tier [claude.ai-only]

Niveau d'abonnement Claude

org.type [claude.ai-only]

Type d'organisation Claude

agent.selected_model

Modèle sélectionné par l'utilisateur pour cette session

office.platform

PC | Mac | OfficeOnline | iOS | Android | Universal

office.version

Numéro de build Office

mcp.configured_count [claude.ai-only]

Nombre de serveurs MCP configurés

mcp.connected_count [claude.ai-only]

Nombre de serveurs MCP connectés avec succès

mcp.failed_count [claude.ai-only]

Nombre de serveurs MCP dont la connexion a échoué

mcp.fetch_status [claude.ai-only]

success | error | timeout | no_auth | not_attempted

mcp.fetch_duration_ms [claude.ai-only]

Durée de récupération du registre MCP

mcp.fetch_http_status [claude.ai-only]

Code de statut HTTP de récupération du registre MCP

mcp.servers [content] [claude.ai-only]

Détails sérialisés du serveur MCP (noms, nombre d'outils, messages d'erreur)

file.upload.count [claude.ai-only]

Nombre de fichiers joints à ce tour

file.upload.total_bytes [claude.ai-only]

Nombre total d'octets téléchargés

file.upload.image_count [claude.ai-only]

Nombre de pièces jointes image

file.upload.document_count [claude.ai-only]

Nombre de pièces jointes document

file.upload.other_count [claude.ai-only]

Nombre d'autres pièces jointes

error.name

Nom de la classe d'exception (présent en cas d'échec)

agent.query_phase

Phase à laquelle la requête a échoué (présente en cas d'échec)

agent.stream

Un span par appel API à Claude, en tant qu'enfant du span de requête. SpanKind : CLIENT.

Attribut

Description

model

ID du modèle utilisé pour cet appel

max_tokens

Nombre maximum de jetons de sortie demandés

agent.message_count

Nombre de messages dans la conversation au démarrage du flux

input_tokens

Jetons d'entrée facturés (réponse API)

output_tokens

Jetons de sortie facturés (réponse API)

cache_read_tokens

Jetons servis à partir du cache de prompt

cache_creation_tokens

Jetons écrits dans le cache de prompt

stop_reason

end_turn | tool_use | max_tokens | etc.

request_id

En-tête request-id de l'API Anthropic, utilisable pour la corrélation du support

Remarque sur la mise en cache des prompts : Le complément demande la mise en cache des prompts sans condition. Les attributs cache_read_tokens et cache_creation_tokens sont définis à partir de la réponse API du fournisseur et sont omis lorsque la réponse ne les inclut pas. La mise en cache des prompts est disponible pour la plateforme Claude Developer ; à ce jour, Amazon Bedrock et Google Vertex AI ne retournent pas encore ces champs via le client utilisé par le complément. Lorsque le support sera disponible sur votre fournisseur, ces attributs commenceront à apparaître automatiquement.

agent.tool_execution

Une portée par appel d'outil, en tant qu'enfant de la portée de flux. SpanKind : INTERNAL. C'est l'enregistrement principal des actions que le modèle a entreprises sur le document.

Attribut

Description

tool_name

Identifiant d'outil (par exemple get_cell_ranges, execute_office_js, edit_slide_xml)

tool.id

ID unique de cet appel d'outil

tool.caller

serveur | client

tool.owner

first_party | mcp | serveur

tool.read_write

lecture | écriture | lecture_écriture

tool.accept_decision

manuel | auto_accept | différé

tool.input [content]

Entrée d'outil sérialisée (premiers 4000 caractères)

tool.success

Booléen

tool.output [content]

Sortie d'outil sérialisée (premiers 4000 caractères)

tool.output_chars

Longueur complète de la sortie en caractères (utilisez pour détecter la troncature)

tool.error_type

Classification d'erreur (présente en cas d'échec)

sheet.cells_read

Cellules lues (surface de feuille uniquement)

sheet.cells_written

Cellules écrites (surface de feuille uniquement)

sheet.cells_copied

Cellules copiées (surface de feuille uniquement)

Remarque : L'attribut tool.accept_decision enregistre comment la décision d'autorisation a été prise : manuel (l'utilisateur a approuvé cette action spécifique), auto_accept (l'utilisateur avait précédemment accordé une approbation permanente), ou différé (l'action a été mise en file d'attente pour examen ultérieur). Utilisez ceci pour auditer les modèles d'approbation dans votre organisation.

agent.compaction

Un span par conversation pour l'auto-résumé, déclenché lorsque le contexte approche de la limite de fenêtre. SpanKind : CLIENT.

Attribut

Description

compaction.pre_tokens

Nombre de jetons avant le résumé

compaction.post_tokens

Nombre de jetons après le résumé

compaction.tokens_saved

Delta

compaction.success

Booléen

compaction.trigger

Actuellement toujours réactif

Ce span porte également agent.surface, agent.vendor, session.id, user.email [claude.ai-only], user.bucket [claude.ai-only], office.platform et office.version, dupliqués à partir du span racine pour que vous puissiez interroger les événements de compaction indépendamment.

file.upload [claude.ai-only]

Un span par téléchargement de fichier individuel, en tant qu'enfant du span de requête. SpanKind : CLIENT. Ce type de span n'apparaît que lorsque les utilisateurs se connectent avec un compte Claude.ai. Le téléchargement de fichiers n'est pas disponible sur les déploiements de fournisseurs directs.

Attribut

Description

file.upload.filename [content]

Nom de fichier original

file.upload.size_bytes

Taille du fichier

file.upload.mime_type

Type MIME

file.upload.file_id

Identifiant de l'API Anthropic Files

file.upload.success

Booléen


Événements de span

Les événements de span sont des marqueurs horodatés attachés aux spans ci-dessus. Ils capturent les transitions de cycle de vie et les signaux équivalents aux compteurs.

  • agent.query : exception {exception.type}; file_upload {file_id, mime_type, content_category}

  • agent.stream : first_token; stream_complete; stream_error {exception.type}

  • agent.tool_execution : tool_init; tool_run; tool_result; tool_error {error_type}

  • agent.compaction : compaction_start; compaction_complete; compaction_error {exception.type}

  • file.upload : exception {exception.type}

Chaque compteur de produit interne enregistre également un événement de span portant le même nom sur le span actuellement actif, fournissant l'équivalent du flux de métriques dans vos données de trace. L'événement office_agent.token.usage est émis sur chaque span agent.stream, une fois par type de jeton non nul, avec les attributs {token_usage.type: input | output | cacheRead | cacheCreation, token_usage.model, token_usage.token_count}. Cela reflète la forme du compteur *.token.usage émise par d'autres produits Anthropic, de sorte qu'un collecteur unique peut agréger le coût des jetons entre les produits en regroupant sur service.name.


Comportement spécifique à la surface

Le schéma de télémétrie est cohérent sur toutes les surfaces. Voici les différences :

  • Feuilles (Excel) : les spans agent.tool_execution incluent les attributs sheet.cells_read, sheet.cells_written et sheet.cells_copied. Les événements de span office_agent.cell_edit_collision_total apparaissent lorsqu'un utilisateur est en train de modifier une cellule tandis qu'un outil tente d'écrire.

  • Documents (Word) : les événements d'entonnoir d'édition de document suivent le cycle de vie de l'édition : office_agent.doc_edit_received_total, office_agent.doc_edit_parsed_total, office_agent.doc_edit_applied_total, office_agent.doc_proposed_edit_reviewed_total. Pas d'attributs sheet.cells_*.

  • Diapositives (PowerPoint) : aucun attribut ou événement spécifique à la surface au-delà du schéma commun.


Reconstruction d'une session utilisateur

Déploiements Claude.ai

  • Filtrez les spans par user.email (ou user.account_uuid) et session.id.

  • Triez les spans agent.query par horodatage de début ; chacun est un tour utilisateur.

  • Pour chaque tour, user.message est l'invite et document.url est le fichier en cours de traitement.

  • Les spans enfants agent.tool_execution, triés par horodatage, sont les actions entreprises : tool.input est ce qui a été tenté, tool.output est le résultat, tool.accept_decision enregistre si l'utilisateur a explicitement approuvé.

Déploiements de fournisseurs directs

Le complément n'a pas d'identité utilisateur Claude.ai dans ce mode, donc les spans ne portent pas user.email ou user.account_uuid. Pour attribuer l'activité à un utilisateur :

  • Filtrez les spans par session.id pour isoler une session de complément continue.

  • Utilisez document.url pour identifier le fichier en cours de traitement.

  • Corrélez la session par rapport aux journaux de votre fournisseur d'identité : événements de connexion Entra, journaux d'accès de la passerelle ou journal des requêtes de votre point de terminaison d'amorçage (qui reçoit le jeton Entra ID de l'utilisateur en tant qu'en-tête Bearer).

  • Une fois qu'une session est attribuée à un utilisateur, la reconstruction par tour est identique : agent.query trié par horodatage, avec user.message, tool.input, tool.output et tool.accept_decision fournissant la piste d'audit.

Cela produit une transcription complète et ordonnée de l'interaction dans les deux modes de déploiement.

Avez-vous trouvé la réponse à votre question ?