Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Microsoft Distribution OpenTelemetry est une distribution d’observabilité unifiée qui offre une expérience d’intégration unique pour collecter des traces, des métriques et des journaux d’activité à partir d’applications agentiques et non-agentiques. Il prend en charge l’observabilité pour Microsoft Agent 365, Microsoft Foundry, Azure Monitor et tout back-end compatible avec OpenTelemetry Protocol (OTLP). La distribution prend en charge .NET, Node.js, et Python, et remplace la configuration fragmentée sur plusieurs systèmes d’observabilité par un appel d'importation et un appel de configuration.
Principaux avantages
La distribution OpenTelemetry Microsoft offre les avantages suivants :
- Un package, une API : remplacez plusieurs packages d’exportation et d’instrumentation par une seule dépendance.
- Prise en charge de plusieurs backends : envoyez des données de télémétrie à Azure Monitor, à tout point de terminaison compatible avec le protocole OTLP (OpenTelemetry Protocol), tel que Datadog, Grafana ou New Relic, ainsi qu'à Microsoft Agent 365 en même temps.
- Instrumentations intégrées : utilisez l’instrumentation automatique pour HTTP, bases de données, Kit de développement logiciel (SDK) Azure, Azure Functions, etc. sans configuration supplémentaire.
- Basé sur des normes : Reposez sur OpenTelemetry, le framework d’observabilité standard du secteur.
- Configuration minimale : ajoutez un import et un appel de fonction au point d’entrée de votre application.
Installation et configuration
Ce guide explique comment ajouter l’observabilité à votre application avec Microsoft OpenTelemetry Distro. La distribution collecte automatiquement les traces, les métriques et les journaux avec des instrumentations intégrées et exporte les données de télémétrie vers Azure Monitor, tout point de terminaison OTLP (OpenTelemetry Protocol) ou Microsoft Agent 365.
Installer la bibliothèque
Pour commencer à utiliser la distribution OpenTelemetry Microsoft, installez la bibliothèque appropriée pour votre plateforme de développement à l'aide du gestionnaire de package de votre langage.
Prerequisites : Python 3.10 ou version ultérieure.
pip install microsoft-opentelemetry
Paramétrage
L'exportateur Agent 365 n'utilise pas de chaîne de connexion. Il découvre automatiquement son point de terminaison en fonction du locataire. Pour activer l’exportation vers l’agent 365, définissez la cible de l’exportateur et fournissez un programme de résolution de jeton qui retourne un jeton d’accès pour un ID d’agent et un ID de locataire donnés.
Appel use_microsoft_opentelemetry() pour activer l’observabilité.
from microsoft.opentelemetry import use_microsoft_opentelemetry
from microsoft.opentelemetry.a365.hosting.token_cache_helpers import AgenticTokenCache
token_cache = AgenticTokenCache()
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=lambda agent_id, tenant_id: (
(t := asyncio.run(token_cache.get_observability_token(agent_id, tenant_id)))
and t.token or None
),
)
Pour la résolution de jetons personnalisée (au lieu du programme de résolution de jeton par défaut), consultez programme de résolution de jeton manuel.
Propager le contexte
Pour maintenir l'observabilité dans les opérations distribuées de l'Agent 365, vous devez propager le contexte. Lorsque vous propagez le contexte par le biais de vos agents et services, vous vous assurez que les traces, les journaux et les métriques sont correctement corrélés dans l’ensemble du cycle de vie d'une requête. Cette corrélation est requise pour une expérience de surveillance complète et efficace Microsoft Agent 365.
Attributs des bagages
Utilisez BaggageBuilder pour définir des informations contextuelles qui transitent par toutes les portées d’une requête.
Le SDK implémente un SpanProcessor qui copie toutes les entrées de bagages non vides dans les spans nouvellement lancés sans écraser les attributs existants.
from microsoft.opentelemetry.a365.core import BaggageBuilder
with (
BaggageBuilder()
.tenant_id("tenant-123")
.agent_id("agent-456")
.conversation_id("conv-789")
.build()
):
# Any spans started in this context will receive these as attributes
pass
Pour remplir automatiquement le BaggageBuilder à partir du TurnContext, utilisez l’outil populate dans le package microsoft-opentelemetry. Cette assistance extrait automatiquement l’appelant, l’agent, le client, le canal et les détails de conversation de l’activité.
from microsoft.opentelemetry.a365.core import BaggageBuilder
from microsoft.opentelemetry.a365.hosting.scope_helpers.populate_baggage import populate
builder = BaggageBuilder()
populate(builder, turn_context)
with builder.build():
# Baggage is auto-populated from the TurnContext activity
pass
Intergiciels de bagages
Si votre agent utilise le package d’intégration d’hébergement, inscrivez l’intergiciel des bagages pour remplir automatiquement les bagages pour chaque demande entrante. Cette étape supprime la nécessité d’appeler BaggageBuilder manuellement dans chaque gestionnaire d’activités.
Dans Python, inscrivez l’intergiciel des bagages via ObservabilityHostingManager.configure() plutôt que directement sur l’adaptateur.
from microsoft.opentelemetry.a365.hosting import ObservabilityHostingManager, ObservabilityHostingOptions
options = ObservabilityHostingOptions(enable_baggage=True)
ObservabilityHostingManager.configure(adapter.middleware_set, options)
L’intergiciel ignore la configuration des bagages pour les réponses asynchrones (ContinueConversation événements) afin d’éviter de remplacer les bagages que la demande d’origine a déjà définie.
Valider que les données circulent dans le produit
Pour afficher les données de télémétrie de l’agent dans Microsoft Purview ou Microsoft Defender, vérifiez que les conditions suivantes sont remplies :
- Microsoft Purview : l’audit doit être activé pour votre organisation. Pour obtenir des instructions, consultez Activer ou désactiver l’audit.
-
Microsoft Defender : la recherche avancée doit être configurée pour permettre l'accès à la table
CloudAppEvents. Pour plus d’informations, consultez la table CloudAppEvents dans le schéma de repérage avancé.
Instrumentation automatique
La distribution OpenTelemetry Microsoft combine les pipelines OpenTelemetry standard avec l'instrumentation sélectionnée par Microsoft. La distribution peut collecter la télémétrie d'application, la télémétrie de l'infrastructure et la télémétrie de l'agent ou d'IA générative en fonction du langage et de la configuration.
| Catégorie | Ce qu’il couvre |
|---|---|
| Pipelines de signal | Traces, métriques et journaux de bord. |
| Détection des ressources | Service, hôte, cloud et contexte d'exécution Azure pris en charge. |
| Instrumentation de l’infrastructure | HTTP, ASP.NET Core, Kit de développement logiciel (SDK) Azure, clients de base de données et frameworks de journalisation pris en charge. |
| Instrumentation de l’IA générative | OpenAI, Azure OpenAI, Noyau sémantique, LangChain, Kit de développement logiciel des agents OpenAI (SDK) et Agent Framework, là où c'est pris en charge. |
| Étendues de l’agent manuel | Appel de l’agent, exécution d’outils, inférence et données de télémétrie de sortie prises en charge. |
| Exportateurs et transformateurs | Azure Monitor, Microsoft Agent 365, OTLP, sortie de console, processeurs d’étendue, processeurs de journaux et lecteurs de métriques. |
Couverture de l’instrumentation
| Language | Instrumentation des applications courantes | Instrumentation courante des agents et de l'IA générative |
|---|---|---|
| Python | Ressources OpenTelemetry, processeurs, lecteurs, journalisation, métriques et traces. | Noyau sémantique, Kit de développement logiciel (SDK) des agents OpenAI, Agent Framework, LangChain, bagages Microsoft Agent 365 et étendues Microsoft Agent 365. |
| Node.js | HTTP, Kit de développement logiciel (SDK) Azure, Azure Functions, MongoDB, MySQL, PostgreSQL, Redis, Bunyan et Winston. | Kit SDK d’agents OpenAI, LangChain, données Microsoft Agent 365 et périmètres Microsoft Agent 365. |
| .NET | ASP.NET Core, HttpClient, SQL Client, Kit de développement logiciel (SDK) Azure, détection des ressources, métriques et journaux. | Noyau sémantique, OpenAI et Azure OpenAI, Agent Framework, Microsoft Agent 365 baggage et périmètres Microsoft Agent 365. |
L’instrumentation automatique écoute les signaux de télémétrie émis par les bibliothèques et infrastructures prises en charge. L’instrumentation manuelle est utilisée lorsqu’une application doit décrire des opérations spécifiques à l’agent, telles que l’appel, l’exécution d’outils, l’inférence ou la sortie asynchrone.
Ajoutez des sources, des compteurs, des processeurs ou des lecteurs OpenTelemetry personnalisés lorsque votre application émet des données de télémétrie qui ne sont pas couvertes par les instrumentations intégrées.
Bibliothèques d’instrumentation intégrées
L’instrumentation automatique écoute les données de télémétrie émises par les frameworks pris en charge et les transfère via le pipeline OpenTelemetry de la distribution. Pour les scénarios d’agent, définissez les bagages tels que l’ID de locataire et l’ID d’agent avant que l’infrastructure instrumentée crée des étendues.
| Cadre | Python | Node.js | .NET |
|---|---|---|---|
| Noyau sémantique | Soutenu | Non pris en charge | Soutenu |
| OpenAI et SDK d'agents OpenAI | Soutenu | Soutenu | Soutenu |
| Infrastructure de l’agent | Soutenu | Non pris en charge | Soutenu |
| LangChain | Soutenu | Soutenu | Non répertorié |
Noyau sémantique
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"semantic_kernel": {"enabled": True},
},
)
OpenAI
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"openai_agents": {"enabled": True},
},
)
Infrastructure de l’agent
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"agent_framework": {"enabled": True},
},
)
LangChain
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "your-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
instrumentation_options={
"langchain": {"enabled": True},
},
)
Instrumentation manuelle
Utilisez l’instrumentation manuelle lorsque l’instrumentation automatique ne décrit pas l’opération de l’agent avec suffisamment de détails. Les étendues manuelles permettent à une application de décrire les activités d’agent courantes de manière cohérente entre les langages.
| Étendue | Utiliser pour |
|---|---|
InvokeAgentScope |
Le début et l’achèvement d’un appel d’agent. |
ExecuteToolScope |
Un appel de fonctionnalité effectué par un agent. |
InferenceScope |
Opération d’inférence de modèle IA. |
OutputScope |
Sortie qui doit être enregistrée après que l’étendue d’origine a déjà été terminée. |
Réutilisez les mêmes valeurs d’identité de requête et d’agent entre les étendues d’une requête afin que les données de télémétrie associées puissent être corrélées.
Invocation de l’agent
from microsoft.opentelemetry.a365.core import (
AgentDetails,
Channel,
InvokeAgentScope,
InvokeAgentScopeDetails,
Request,
ServiceEndpoint,
)
agent_details = AgentDetails(
agent_id="agent-456",
agent_name="Email Assistant",
agent_description="An AI agent powered by Azure OpenAI",
agentic_user_id="auid-123",
agentic_user_email="agent@contoso.com",
agent_blueprint_id="blueprint-789",
tenant_id="tenant-123",
)
request = Request(
content="Please help me organize my emails",
session_id="session-42",
conversation_id="conv-xyz",
channel=Channel(name="msteams"),
)
scope_details = InvokeAgentScopeDetails(
endpoint=ServiceEndpoint(hostname="myagent.contoso.com", port=443),
)
with InvokeAgentScope.start(
request=request,
scope_details=scope_details,
agent_details=agent_details,
) as scope:
scope.record_input_messages(["Please help me organize my emails"])
# Run the agent invocation.
invoke_scope.record_output_messages(["I found 15 urgent emails."])
Exécution de l’outil
from microsoft.opentelemetry.a365.core import (
ExecuteToolScope,
ServiceEndpoint,
ToolCallDetails,
ToolType,
)
tool_details = ToolCallDetails(
tool_name="email-search",
arguments={"query": "from:manager@contoso.com"},
tool_call_id="tool-call-456",
description="Search emails by criteria",
tool_type=ToolType.FUNCTION.value,
endpoint=ServiceEndpoint(
hostname="tools.contoso.com",
port=8080,
protocol="https",
),
)
with ExecuteToolScope.start(
request=request,
details=tool_details,
agent_details=agent_details,
) as scope:
result = search_emails(tool_details.arguments)
scope.record_response(result)
Inférence
from microsoft.opentelemetry.a365.core import (
InferenceCallDetails,
InferenceOperationType,
InferenceScope,
)
inference_details = InferenceCallDetails(
operationName=InferenceOperationType.CHAT,
model="gpt-4o-mini",
providerName="azure-openai",
)
with InferenceScope.start(
request=request,
details=inference_details,
agent_details=agent_details,
) as scope:
scope.record_input_messages(["Summarize the following emails for me."])
response = call_llm()
scope.record_output_messages([response.text])
scope.record_input_tokens(response.usage.input_tokens)
scope.record_output_tokens(response.usage.output_tokens)
scope.record_finish_reasons(["stop"])
Sortie
from microsoft.opentelemetry.a365.core import OutputScope, Response, SpanDetails
# Capture this before exiting the originating InvokeAgentScope context.
parent_context = invoke_scope.get_span_context()
response = Response(
messages=["Here is your organized inbox."],
)
with OutputScope.start(
request=request,
response=response,
agent_details=agent_details,
user_details=None,
span_details=SpanDetails(parent_context=parent_context),
) as scope:
pass
La documentation produit doit définir les exigences de validation spécifiques au produit pour ces étendues.
Validation locale
La validation locale confirme que l’application produit des données de télémétrie avant qu’une destination spécifique au produit soit validée. Utilisez la sortie de la console ou un point de terminaison OTLP local pour vérifier que les traces, les métriques et la journalisation sont créées.
Valider avec un point de terminaison OTLP local
Configurez la distribution pour envoyer des données de télémétrie à un collecteur local ou à un autre point de terminaison compatible OTLP.
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
from microsoft.opentelemetry import use_microsoft_opentelemetry
use_microsoft_opentelemetry()
Valider avec la sortie locale
Utilisez la sortie locale lorsque vous souhaitez confirmer l’instrumentation avant d’envoyer des données de télémétrie à une destination distante.
export ENABLE_A365_OBSERVABILITY_EXPORTER=false
from microsoft.opentelemetry import use_microsoft_opentelemetry
def token_resolver(agent_id, tenant_id):
return "local-validation-token"
use_microsoft_opentelemetry(
enable_a365=True,
a365_token_resolver=token_resolver,
)
# Run instrumented application code.
Passez en revue la sortie locale pour examiner des étendues provenant de sources attendues, telles que les requêtes HTTP, les appels OpenAI ou Azure OpenAI, les portées d'appel d'agents, d'exécution d'outils ou d'inférence. La validation spécifique à la destination doit être incluse dans la documentation du produit pour cette destination.
Configurer manuellement l’authentification
Lorsque vous utilisez l’exportateur Agent 365, vous devez fournir un mécanisme pour fournir un jeton d’authentification. Le résolveur de jetons fonctionne par lot d’exportation en utilisant l'ID d'agent et l'ID de locataire à partir du contexte de bagages actif. La distribution prend en charge trois approches.
Résolveur de jeton manuel
Utilisez un programme de résolution manuel lorsque vous achetez des jetons en dehors du pipeline Agent Framework ou lorsque vous créez des applications non-Agent Framework.
Le programme de résolution doit être synchrone. Acquérir le jeton dans votre gestionnaire d’activités asynchrones et le mettre en cache pour le programme de résolution.
from microsoft.opentelemetry import use_microsoft_opentelemetry
from microsoft.opentelemetry.a365.runtime import get_observability_authentication_scope
_cached_token: str | None = None
def my_token_resolver(agent_id: str, tenant_id: str) -> str | None:
return _cached_token
use_microsoft_opentelemetry(enable_a365=True, a365_token_resolver=my_token_resolver)
@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
global _cached_token
_cached_token = await AGENT_APP.auth.exchange_token(
context,
scopes=get_observability_authentication_scope(),
auth_handler_id="AGENTIC",
)
Cache de jetons agentique avec des applications Agent Framework
Pour les IExporterTokenCache<AgenticTokenStruct> applications Agent Framework, la distribution s’inscrit automatiquement via DI lorsque vous ne définissez pas de code personnalisé TokenResolver. Votre agent appelle RegisterObservability() au moment de l’exécution pour fournir des informations d’identification, et le cache gère l’acquisition et l’actualisation des jetons.
from microsoft.opentelemetry import use_microsoft_opentelemetry
from microsoft.opentelemetry.a365.hosting.token_cache_helpers import AgenticTokenCache, AgenticTokenStruct
from microsoft.opentelemetry.a365.runtime import get_observability_authentication_scope
token_cache = AgenticTokenCache()
_cached_tokens: dict[tuple[str, str], str | None] = {}
# Keep the sync resolver side-effect free; refresh the cache in the async request handler.
def sync_token_resolver(agent_id: str, tenant_id: str) -> str | None:
return _cached_tokens.get((agent_id, tenant_id))
use_microsoft_opentelemetry(enable_a365=True, a365_token_resolver=sync_token_resolver)
@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
agent_id = context.activity.recipient.id
tenant_id = context.activity.recipient.tenant_id
token_cache.register_observability(
agent_id=agent_id,
tenant_id=tenant_id,
token_generator=AgenticTokenStruct(
authorization=AGENT_APP.auth,
turn_context=context,
),
observability_scopes=get_observability_authentication_scope(),
)
_cached_tokens[(agent_id, tenant_id)] = await token_cache.get_observability_token(
agent_id, tenant_id,
)
Exemples d’applications et configuration avancée
Pour obtenir des exemples de travail et des options de configuration avancées, consultez les référentiels GitHub pour chaque langue :
Résolution des problèmes
Cette section décrit les problèmes courants lors de l’implémentation et de l’utilisation de la Microsoft distribution OpenTelemetry avec l’agent 365.
Conseil / Astuce
Le Guide de dépannage de l’Agent 365 contient des recommandations générales de dépannage, les meilleures pratiques et des liens vers du contenu de dépannage pour chaque étape du cycle de développement de l’Agent 365.
Les données d’observabilité n’apparaissent pas
Symptômes :
- L’agent est en fuite
- Pas de télémétrie dans le centre administratif
- Impossible de voir l’activité des agents
Cause racine :
- L’exportation Agent 365 n’est pas activée
- Erreurs de configuration
- Problèmes de résolution de jetons
Solutions : Essayez les étapes suivantes pour résoudre le problème :
Vérifier que l’exportation agent 365 est activée
Vous devez activer explicitement l’exportateur Agent 365. Lorsque vous ne le définissez pas, la distribution peut se replier sur un exportateur de console ou ne rien exporter. Activez-le dans le code :
from microsoft.opentelemetry import use_microsoft_opentelemetry use_microsoft_opentelemetry( enable_a365=True, a365_enable_observability_exporter=True, a365_token_resolver=my_token_resolver, )Ou définissez la variable d’environnement :
export ENABLE_A365_OBSERVABILITY_EXPORTER=true
Vérifier la configuration du résolveur de jeton
L’exportateur requiert un programme de résolution de jeton valide qui retourne un jeton porteur pour chaque demande d’exportation. Si le programme de résolution de jeton est manquant ou retourne
null, l’exportation est ignorée sans notification.Activer l’exportation et la vérification de la télémétrie localement dans la console
Ajoutez un exportateur de console pour vérifier que la télémétrie est générée avant d’atteindre le point de terminaison de l'Agent 365 :
Activez la journalisation commentée
Vérifier les journaux d’activité pour les erreurs d’exportation
Utilisez la
az webapp log tailcommande pour rechercher des erreurs liées à l’observabilité dans les journaux d’activité :az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
ID de locataire ou ID d’agent manquant : sections ignorées
Symptômes: Le système supprime silencieusement les étendues et ne les exporte jamais. Certaines plateformes enregistrent un nombre d’étendues ignorées ou un message tel que No spans with tenant/agent identity found. D’autres les suppriment sans enregistrement.
Résolution :
- Avant l’exportation, les partitions du système sont segmentées par l'identité du locataire et de l'agent. Les étendues qui n’ont pas d’ID de locataire ou d’ID d’agent sont supprimées et ne sont jamais envoyées au service.
- Vérifiez que
BaggageBuildersoit configuré avec l’ID de locataire et l’ID de l’agent avant de créer des spans. Ces valeurs se propagent via le contexte OpenTelemetry et s’attachent à toutes les traces créées dans le contexte du baggage. Pour obtenir l’API spécifique à la plateforme, consultez les attributs de bagages. - Si vous utilisez le middleware pour les bagages ou l'assistant de contexte du package d'intégration d'hébergement, vérifiez que l'activité
TurnContexta un destinataire valide avec une identité d'agent.
Échec de résolution de jeton : exportation ignorée ou non autorisée
Symptômes: Le programme de résolution de jeton retourne null ou lève une erreur. Selon la plateforme, l’exportation est ignorée entièrement ou échoue avec HTTP 401.
Résolution :
- Le résolveur de jeton est requis. S’il est manquant, l’exportateur génère une erreur au démarrage. Vérifiez qu’un programme de résolution de jeton est fourni et retourne un jeton porteur valide.
- Assurez-vous que l’ID de locataire et l’ID d’agent appropriés sont passés à
BaggageBuilder, car ces valeurs sont transférées au résolveur de jeton. - Pour les agents hébergés Azure, vérifiez que l’identité managée dispose de l’autorisation API requise pour l’étendue d’observabilité.
- Pour les applications .NET à l’aide du package d’hébergement Agent Framework, l’échange de jetons est géré automatiquement via l’API. Si des jetons sont manquants, vérifiez que
Microsoft.Agents.A365.Observability.Hostingest installé et inscrit.
HTTP 401 Non autorisé
Symptômes: L’exportation échoue avec HTTP 401. L’exportateur ne réessaye pas cette erreur.
Résolution :
- Vérifiez que l’audience du jeton correspond à l’étendue du point de terminaison d’observabilité.
- Vérifiez que le résolveur de jetons ne retourne pas de jeton d'utilisateur délégué, un jeton pour un public incorrect ou un jeton expiré.
HTTP 403 Interdit
Symptômes: L’exportation échoue avec HTTP 403. L’exportateur ne réessaye pas cette erreur.
Cause: Une erreur HTTP 403 peut avoir des causes différentes. Vérifiez les résolutions suivantes dans l’ordre.
Résolution :
Licence manquante — Vérifiez que votre client dispose de l'une des licences suivantes attribuées dans le Centre d'administration Microsoft 365 :
- Test - Microsoft 365 E7
- Microsoft 365 E7
- Microsoft Agent 365 Frontier
Autorisation manquante
Agent365.Observability.OtelWrite: vous devez accorder cette autorisation à votre identité (identité managée ou inscription d’application). Sans cela, l’exportation de télémétrie échoue avec HTTP 403.Accordez l’autorisation à l’aide de l’une des options suivantes.
Option A — Agent 365 CLI (nécessite
a365.config.jsoneta365.generated.config.jsondans votre répertoire de configuration, un compte Administrateur général et Agent 365 CLI v1.1.139-preview ou version ultérieure)a365 setup admin --config-dir "<path-to-config-dir>"Option B — Entra Portal (aucun fichier de configuration requis ; nécessite l’accès administrateur général à l’inscription de l’application blueprint)
- Accédez au portail Entra>inscriptions d'applications> sélectionnez votre application Blueprint.
- Accédez aux autorisations d’API>Ajouter une autorisation>APIs que mon organisation utilise> recherchez
9b975845-388f-4429-889e-eab1ef63949c. - Sélectionnez Autorisations déléguées> pour vérifier
Agent365.Observability.OtelWrite>Ajouter des autorisations. - Répétez les étapes 2 à 3, cette fois,sélectionnez Autorisations > pour vérifier
Agent365.Observability.OtelWrite>Ajouter des autorisations. - Cliquez sur Accorder le consentement de l’administrateur et confirmez.
Les deux
Agent365.Observability.OtelWrite(délégués) etAgent365.Observability.OtelWrite(Application) doivent afficher l’étatGranted.
HTTP 429 / 5xx — Erreurs temporaires
Symptômes: L’exportation échoue avec un code d’état HTTP temporaire tel que 429 ou 5xx.
Résolution :
- Ces erreurs sont généralement temporaires et résolues par elles-mêmes. Les distributions Python et JavaScript réessayent automatiquement sur les codes d’état HTTP 408, 429 et 5xx. La distribution .NET ne réessaye pas automatiquement.
- Si les erreurs persistent, consultez le tableau de bord d’intégrité du service.
- Envisagez de réduire la fréquence d’exportation en augmentant le délai planifié entre les lots ou la taille maximale du lot d’exportation. Pour Python et JavaScript, utilisez les paramètres
exporterOptionsoua365_*documentés dans les référentiels GitHub. Pour .NET, utilisezo.Agent365.Exporter.ScheduledDelayMillisecondseto.Agent365.Exporter.MaxExportBatchSize.
Délai d’expiration de l’exportation
Symptômes: Les tentatives d’exportation expirent.
Résolution :
Vérifiez la connectivité réseau au point de terminaison d’observabilité.
Le délai d’expiration de la requête HTTP par défaut est de 30 secondes sur toutes les plateformes. Si des délais d’expiration se produisent fréquemment, augmentez la valeur du délai d’expiration dans vos options d’exportation :
L'exportation réussit, mais la télémétrie n'apparaît pas dans Defender ou Purview
Symptômes : Les journaux indiquent une exportation réussie (HTTP 200), mais la télémétrie n'apparaît pas dans Microsoft Defender ou Microsoft Purview.
Résolution :
- Vérifiez que vous répondez à des conditions préalables à l’affichage des journaux exportés :
- Microsoft Purview : l’audit doit être activé pour votre organisation. Consultez Activer ou désactiver l’audit.
-
Microsoft Defender : la recherche avancée doit être configurée pour permettre l'accès à la table
CloudAppEvents. Consultez la table CloudAppEvents dans le schéma de repérage avancé.
- La télémétrie peut prendre plusieurs minutes pour se mettre à jour après une exportation réussie. Attendez avant d’enquêter plus loin.
- Vérifiez que les plages contiennent des attributs
microsoft.tenant.idetgen_ai.agent.idvalides. Les attributs d'identité manquants entraînent la suppression des traces côté serveur même si l'exportation via HTTP retourne un code 200.