Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Microsoft OpenTelemetry Distro è una distribuzione unificata per l'osservabilità che offre un'esperienza unica di onboarding per la raccolta di tracce, metriche e log da applicazioni con agente e senza agente. Supporta l'osservabilità per Microsoft Agent 365, Microsoft Foundry, Monitoraggio di Azure e qualsiasi backend compatibile con OpenTelemetry Protocol (OTLP). La distribuzione supporta .NET, Node.js e Python e sostituisce la configurazione frammentata tra diversi stack di osservabilità con un'unica importazione e una sola chiamata di configurazione.
Vantaggi chiave
Microsoft OpenTelemetry Distro offre questi vantaggi:
- Un pacchetto, una sola API: Sostituisce più pacchetti di esportazione e strumentazione con una singola dipendenza.
- Supporto multi-backend: invia la telemetria simultaneamente a Monitoraggio di Azure, a qualsiasi endpoint compatibile con OpenTelemetry Protocol (OTLP) come Datadog, Grafana o New Relic, e a Microsoft Agent 365.
- Strumentazione integrata: Usa strumentazione automatica per HTTP, database, Azure SDK, Funzioni di Azure e altro senza configurazione aggiuntiva.
- Basato su standard: Sfrutta OpenTelemetry, il framework di osservabilità di riferimento per il settore.
- Boilerplate minimo: Aggiungi un'importazione e una chiamata di funzione al punto di ingresso dell'applicazione.
Installazione e configurazione
Questa guida mostra come aggiungere osservabilità alla tua applicazione con Microsoft OpenTelemetry Distro. La distribuzione raccoglie automaticamente tracce, metriche e log con strumenti integrati ed esporta la telemetria in Monitoraggio di Azure, in qualsiasi endpoint OpenTelemetry Protocol (OTLP) o in Microsoft Agent 365.
Installare la raccolta
Per iniziare con Microsoft OpenTelemetry Distro, installa la raccolta appropriata per la tua piattaforma di sviluppo utilizzando il gestore di pacchetti del tuo linguaggio.
Configurazione
L'esportatore Agent 365 non usa una stringa di connessione. Individua automaticamente l'endpoint in base al tenant. Per abilitare l'esportazione verso Agent 365, imposta la destinazione dell'esportatore e fornisci un risolutore di token che restituisca un token di accesso per uno specifico ID agente e ID tenant.
Chiama use_microsoft_opentelemetry() per abilitare l'osservabilità.
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
),
)
Per la risoluzione personalizzata dei token (anziché il risolutore di token predefinito), vedi Risolutore di token manuale.
È possibile personalizzare il comportamento del componente di esportazione passando facoltativamente a365_* a use_microsoft_opentelemetry().
| Parametro | Descrizione | Default |
|---|---|---|
a365_use_s2s_endpoint |
Quando True, utilizza il percorso dell'endpoint tra servizi. |
False |
a365_max_queue_size |
Dimensione massima della coda per il processore batch. | 2048 |
a365_scheduled_delay_ms |
Ritardo in millisecondi tra i batch di esportazione. | 5000 |
a365_exporter_timeout_ms |
Timeout in millisecondi per l'operazione di esportazione. | 30000 |
a365_max_export_batch_size |
Dimensione massima del batch per le operazioni di esportazione. | 512 |
Propagare il contesto
Per mantenere l'osservabilità nelle operazioni distribuite di Agent 365, propagare il contesto. Quando propaghi il contesto attraverso i tuoi agenti e servizi, ti assicuri che tracce, log e metriche siano correttamente correlati lungo tutto il ciclo di vita delle richieste. Questa correlazione è necessaria per un'esperienza di monitoraggio Microsoft Agent 365 completa ed efficace.
Attributi di baggage
Utilizza BaggageBuilder per impostare informazioni contestuali che passano attraverso tutti gli intervalli di una richiesta.
L'SDK implementa una SpanProcessor copia di tutte le voci di baggage non interrotte in intervalli appena avviati senza sovrascrivere gli attributi esistenti.
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
Per popolare automaticamente il BaggageBuilder dal TurnContext, usa l'helper populate nel pacchetto microsoft-opentelemetry. Questo helper estrae automaticamente il chiamante, l'agente, il tenant, il canale e i dettagli della conversazione dall'attività.
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
Middleware per baggage
Se l'agente usa il pacchetto di integrazione dell'hosting, registra il middleware del baggage per popolare automaticamente baggage per ogni richiesta in ingresso. Questo passaggio elimina la necessità di invocare BaggageBuilder manualmente in ogni gestore di attività.
In Python, registra il baggage middleware tramite ObservabilityHostingManager.configure() invece che direttamente sull'adattatore.
from microsoft.opentelemetry.a365.hosting import ObservabilityHostingManager, ObservabilityHostingOptions
options = ObservabilityHostingOptions(enable_baggage=True)
ObservabilityHostingManager.configure(adapter.middleware_set, options)
Il middleware ignora la configurazione del baggage per risposte asincrone (eventi ContinueConversation) per evitare di sovrascrivere baggage già impostati dalla richiesta di origine.
Validare che i dati fluiscono nel prodotto
Per visualizzare la telemetria degli agenti in Microsoft Purview o Microsoft Defender, assicurati che siano soddisfatti i seguenti requisiti:
- Microsoft Purview: L'audit deve essere attivato per la tua organizzazione. Per istruzioni, vedi Attivare o disattivare l'audit.
-
Microsoft Defender: La ricerca avanzata deve essere configurata per accedere alla tabella
CloudAppEvents. Per dettagli, vedi tabella CloudAppEvents nello schema di ricerca avanzata.
Strumentazione automatica
La distribuzione Microsoft OpenTelemetry combina pipeline OpenTelemetry standard con strumentazione curata da Microsoft. La Distro può raccogliere telemetria applicativa, telemetria infrastrutturale e telemetria degli agenti o di IA generativa a seconda del linguaggio e della configurazione.
| Categoria | Cosa copre |
|---|---|
| Pipeline di segnale | Tracce, metriche e log. |
| Rilevamento delle risorse | Servizio, host, cloud e contesto runtime di Azure ove supportato. |
| Strumentazione dell’infrastruttura | HTTP, ASP.NET Core, Azure SDK, client di database e framework di logging ove supportato. |
| Strumentazione di IA generativa | OpenAI, Azure OpenAI, Kernel semantico, LangChain, OpenAI Agents SDK e Agent Framework dove supportati. |
| Ambiti manuali dell'agente | Invocazione dell'agente, esecuzione dello strumento, inferenza e telemetria dell'output ove supportato. |
| Esportatori e processori | Monitoraggio di Azure, Microsoft Agent 365, OTLP, output della console, processori di span, processori di log e lettori di metriche. |
Copertura della strumentazione
| Lingua | Strumentazione comune delle applicazioni | Strumentazione comune per agente e IA generativa |
|---|---|---|
| Python | Risorse, processori, lettori, log, metriche e tracce OpenTelemetry. | Kernel semantico, OpenAI Agents SDK, Agent Framework, LangChain, Microsoft Agent 365 baggage e ambiti Microsoft Agent 365. |
| Node.js | HTTP, Azure SDK, Funzioni di Azure, MongoDB, MySQL, PostgreSQL, Redis, Bunyan e Winston. | OpenAI Agents SDK, LangChain, Microsoft Agent 365 baggage e ambiti Microsoft Agent 365. |
| .NET | ASP.NET Core, HttpClient, SQL Client, Azure SDK, rilevamento risorse, metriche e log. | Kernel semantico, OpenAI e Azure OpenAI, Agent Framework, Microsoft Agent 365 baggage e ambiti Microsoft Agent 365. |
La strumentazione automatica ascolta i segnali di telemetria emessi da librerie e framework supportati. La strumentazione manuale viene utilizzata quando un'applicazione deve descrivere operazioni specifiche per agente, come invocazione, esecuzione dello strumento, inferenza o output asincrono.
Aggiungi sorgenti, contatori, processori o lettori personalizzati di OpenTelemetry quando la tua applicazione emette telemetria non coperta dalle strumentazioni integrate.
Importante
La strumentazione automatica popola solo gli attributi standard di OpenTelemetry. Non include tutti gli attributi richiesti da Agent 365. Devi aggiungere attributi specifici di Microsoft tramite BaggageBuilder. Per vedere quali attributi sono richiesti, consulta Archiviare gli attributi di convalida.
Librerie di strumentazione predefinite
L'auto-strumentazione ascolta la telemetria emessa dai framework supportati e la inoltra attraverso la pipeline OpenTelemetry della Distro. Per gli scenari dell'agente, imposta baggage come ID tenant e ID agente prima che il framework instrumentato crei intervalli.
| Framework | Python | Node.js | .NET |
|---|---|---|---|
| Kernel semantico | Supportata | Non supportato | Supportato |
| OpenAI e OpenAI Agents SDK | Supportata | Supportato | Supportata |
| Agent Framework | Supportata | Non supportato | Supportato |
| LangChain | Supportata | Supportata | Non elencato |
Kernel semantico
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},
},
)
Agent Framework
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},
},
)
Strumentazione manuale
Usa la strumentazione manuale quando la strumentazione automatica non descrive il funzionamento dell'agente con sufficiente dettaglio. Gli ambiti manuali consentono a un'applicazione di descrivere le attività comuni degli agenti in modo uniforme tra diversi linguaggi.
| Ambito | Usare per |
|---|---|
InvokeAgentScope |
L'inizio e il completamento di un'invocazione di agente. |
ExecuteToolScope |
Richiesta strumento effettuata da un agente. |
InferenceScope |
Un'operazione di inferenza di modello di intelligenza artificiale. |
OutputScope |
Output che deve essere registrato dopo il completamento dell'ambito di origine. |
Riutilizza gli stessi valori di richiesta e identità dell'agente tra i diversi ambiti di una richiesta, così che la telemetria possa essere correlata.
Chiamata dell'agente
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."])
Esecuzione dello strumento
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)
Inferenza
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"])
Output
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 documentazione del prodotto dovrebbe definire i requisiti di convalida specifici relativi a questi ambiti.
Convalida locale
La convalida locale conferma che l'applicazione produce telemetria prima che venga convalidata una destinazione specifica per il prodotto. Usa l'output della console o un endpoint OTLP locale per verificare che tracce, metriche e log vengano creati.
Convalidare con un endpoint OTLP locale
Configura la Distro per inviare la telemetria a un collettore locale o a un altro endpoint compatibile con OTLP.
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
from microsoft.opentelemetry import use_microsoft_opentelemetry
use_microsoft_opentelemetry()
Convalidare utilizzando l'output locale
Usa l'output locale quando vuoi verificare la strumentazione prima di inviare la telemetria a una destinazione remota.
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.
Esamina l'output locale per gli span provenienti da fonti previste, come richieste HTTP, chiamate OpenAI o Azure OpenAI, scope di invocazione dell'agente, scope di esecuzione degli strumenti o scope di inferenza. La validazione specifica della destinazione si trova nella documentazione del prodotto corrispondente.
Configurare manualmente l'autenticazione
Quando si utilizza l'esportatore Agent 365, è necessario predisporre un meccanismo per l'acquisizione di un token di autenticazione. Il sistema di risoluzione dei token funziona per batch di esportazione usando l'ID agente e l'ID tenant dal contesto del baggage attivo. La distribuzione supporta due approcci.
Suggerimento
Se stai sviluppando agenti con l'SDK per agenti Microsoft 365, consulta Configurazione dell'autenticazione per l'osservabilità nell'Agent SDK per istruzioni passo-passo sulla configurazione dell'acquisizione di token OBO e S2S sia per agenti che per non agenti.
Strumento di risoluzione manuale di token
Usa uno strumento di risoluzione manuale quando acquisisci token al di fuori del pipeline di Agent Framework, quando sviluppi applicazioni non basate su Agent Framework o quando utilizzi l'autenticazione service-to-service (S2S) (flusso delle credenziali client). Gli agenti possono generare un token autonomamente, ad esempio utilizzando la Libreria di Autenticazione Microsoft (MSAL) o qualsiasi altro metodo di acquisizione di token, ma devono assicurarsi che il token abbia il corretto ambito di osservabilità (api://9b975845-388f-4429-889e-eab1ef63949c/Agent365.Observability.OtelWrite).
Nota
Per l'autenticazione service-to-service (S2S), devi utilizzare questo approccio manuale di risoluzione dei token. La cache dei token agentici supporta solo flussi di autenticazione on-behalf-of (OBO).
I seguenti esempi mostrano il pattern di risolutore di token OBO (on-behalf-of): l'agente acquisisce un token utente tramite il gestore di autenticazione dell'agente e lo scambia con un token con scopo di osservabilità. Per esempi S2S (service-to-service) e un confronto tra autenticazione OBO e S2S, vedi Configurazione autenticazione osservabilità per l'SDK per gli agenti.
Lo strumento di risoluzione deve essere sincrono. Acquisisci il token nel tuo handler di attività asincrona (o tramite MSAL) e memorizzalo in cache per lo strumento di risoluzione.
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 di token agentici con app Agent Framework
Per le app di Agent Framework che usano l'autenticazione OBO (on-behalf-of), la distribuzione registra automaticamente IExporterTokenCache<AgenticTokenStruct> tramite DI quando non imposti un TokenResolver personalizzato. L'agente richiama RegisterObservability() durante l'esecuzione per fornire le credenziali, e la cache gestisce l'acquisizione e l'aggiornamento dei token.
Nota
Questo approccio supporta solo i flussi di autenticazione on-behalf-of (OBO). Per l'autenticazione service-to-service (S2S), usa invece lo strumento di risoluzione manuale dei token.
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,
)
Archiviare gli attributi di convalida
Per la convalida del negozio, l'agente deve implementare gli scopi InvokeAgentScope, InferenceScope e ExecuteToolScope. Ogni ambito corrisponde a un'operazione di span nello schema canonico:
| Ambito SDK | Operazione span | Codice di riferimento universale |
|---|---|---|
InvokeAgentScope |
invoke_agent |
IA |
ExecuteToolScope |
execute_tool |
ET |
InferenceScope |
chat |
CH |
OutputScope |
output_messages |
OM |
Per l'elenco completo degli attributi obbligatori e opzionali per ciascun ambito – inclusa la semantica di ciascun attributo, le indicazioni sulla scelta dei valori e quali attributi sono interrogabili tramite la ricerca avanzata di Microsoft Defender – vedi Agent 365 observability attribute reference. La colonna Si applica a identifica l’ambito di appartenenza di ciascun attributo, mentre la colonna Obbligatorio distingue gli attributi obbligatori (M) da quelli opzionali (O).
Testare l'agente con l'osservabilità
Dopo aver implementato l'osservabilità, verifica che la telemetria venga catturata:
- Andare a
https://admin.cloud.microsoft/#/agents/all. - Seleziona l'agente e fai clic su Attività.
- Verifica che compaiano sessioni e chiamate di strumenti.
Applicazioni di esempio e configurazione avanzata
Per esempi funzionanti e opzioni di configurazione avanzate, consulta i repository GitHub per ciascun linguaggio:
Risoluzione dei problemi
Questa sezione descrive i problemi comuni durante l'implementazione e l'utilizzo della Microsoft OpenTelemetry Distro con Agent 365.
| Problema | Descrizione |
|---|---|
| I dati di osservabilità non sono visibili | Non è visibile alcuna telemetria perché l'esportazione tramite Agent 365 non è abilitata, la configurazione è incompleta oppure la risoluzione del token non va a buon fine. |
| ID tenant o ID agente mancanti: intervalli ignorati | Gli span vengono esclusi prima dell'esportazione quando mancano gli attributi di identità richiesti del tenant o dell'agente. |
| Risoluzione del token non riuscita - esportazione ignorata o non autorizzata | L'esportazione viene ignorata o rifiutata quando lo strumento di risoluzione dei token non restituisce alcun token o si verificano errori durante l'acquisizione del token. |
| HTTP 401 Non autorizzato | Le richieste raggiungono il servizio, ma l'autenticazione non va a buon fine perché il token è non valido, scaduto o associato a un destinatario errato. |
| HTTP 403 Negato | L'autorizzazione non riesce a causa di licenze del tenant mancanti o di autorizzazioni di scrittura di osservabilità mancanti. |
| HTTP 403 Negato - Mancata corrispondenza dell'ID agente | Il servizio rifiuta l'esportazione quando l'ID dell'agente nella richiesta non corrisponde all'identità dell'agente autorizzata dal token. |
| Errori HTTP 429 o 5xx - Errori transitori | La limitazione temporanea della velocità o l'instabilità del back-end interrompono l'esportazione e possono richiedere nuovi tentativi o la regolazione dei batch. |
| Timeout di esportazione | Le operazioni di esportazione superano i limiti di timeout a causa di ritardi di rete o della latenza di risposta degli endpoint. |
| L'esportazione ha successo ma la telemetria non appare né in Defender né in Purview | L'inserimento dati va a buon fine, ma la visibilità è ritardata o bloccata da prerequisiti a valle e requisiti di schema. |
Suggerimento
Guida alla risoluzione dei problemi di Agent 365 contiene raccomandazioni di alto livello per la risoluzione dei problemi, procedure consigliate e collegamenti a contenuti di risoluzione dei problemi per ogni fase del ciclo di vita dello sviluppo di Agent 365.
I dati di osservabilità non sono visibili
Sintomi:
- L'agente è in esecuzione
- Telemetria assente nell’interfaccia di amministrazione
- Non è visibile l’attività dell’agente
Causa radice:
- L'esportazione dell'Agent 365 non è abilitata
- Errori di configurazione
- Problemi con lo strumento di risoluzione dei token
Soluzioni: Prova i seguenti passaggi per risolvere il problema:
Verifica che l'esportazione Agent 365 sia abilitata
Devi abilitare esplicitamente l'esportatore Agent 365. Quando non lo imposti, la distribuzione potrebbe eseguire il fallback a un esportatore di console o non esportare nulla. Abilita nel codice:
from microsoft.opentelemetry import use_microsoft_opentelemetry use_microsoft_opentelemetry( enable_a365=True, a365_enable_observability_exporter=True, a365_token_resolver=my_token_resolver, )Oppure imposta la variabile di ambiente:
export ENABLE_A365_OBSERVABILITY_EXPORTER=trueNota
ENABLE_A365_OBSERVABILITY_EXPORTERè un'opzione secondaria che ha effetto solo quandoenable_a365=Trueè impostato nel codice. Puoi anche controllarla tramite il kwarga365_enable_observability_exporter.
Controlla la configurazione dello strumento di risoluzione dei token
L'utilità di esportazione richiede un resolver di token valido che restituisce un token di connessione per ogni richiesta di esportazione. Se lo strumento di risoluzione dei token è assente o restituisce
null, l'esportazione viene ignorata senza notifiche.Abilita l'esportazione su console e verifica la telemetria localmente
Aggiungi un esportatore della console per verificare che la telemetria sia generata prima che raggiunga l'endpoint di Agent 365.
Abilita registrazione dettagliata
Controlla i log per errori di esportazione
Usa il comando
az webapp log tailper cercare nei log errori di osservabilità:az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
ID tenant o ID agente mancanti: intervalli ignorati
Sintomi: Il sistema scarta silenziosamente gli span e non li esporta mai. Alcune piattaforme registrano un numero di intervalli ignorati o un messaggio No spans with tenant/agent identity found. Altri li scartano senza registrarli nei log.
Risoluzione:
- Prima dell'esportazione, le partizioni di distribuzione vengono suddivise in base all'identità del tenant e dell'agente. Gli intervalli che mancano di un ID tenant o di un ID agente vengono eliminati e non inviati al servizio.
- Assicurati che
BaggageBuildersia configurato con l'ID tenant e l'ID agente prima di creare intervalli. Questi valori vengono propagati attraverso il contesto OpenTelemetry e si collegano a tutti gli intervalli creati nell'ambito del baggage. Per l'API specifica della piattaforma, vedi Attributi Baggage. - Se si utilizza il baggage middleware o il turn context helper dal pacchetto di integrazione dell'hosting per popolare gli ID, verifica che l'attività
TurnContextabbia un destinatario valido con identità agente.
Errore di risoluzione del token: esportazione omessa o non autorizzata
Sintomi: Lo strumento di risoluzione dei token restituisce null o solleva un errore. A seconda della piattaforma, l'esportazione viene omessa completamente o fallisce con HTTP 401.
Risoluzione:
- Lo strumento di risoluzione dei token è obbligatorio. Se è mancante, l'esportatore genera un errore all'avvio. Verifica che sia fornito uno strumento di risoluzione dei token e che restituisca un Bearer token valido.
- Assicurati che l'ID tenant corretto e l'ID dell'agente siano passati a
BaggageBuilder, perché questi valori vengono inoltrati allo strumento di risoluzione dei token. - Per gli agenti ospitati su Azure, verifica che l'Identità Gestita disponga delle autorizzazioni API richieste per l'ambito di osservabilità.
- Per le app .NET che usano il pacchetto di hosting di Agent Framework, lo scambio di token viene gestito automaticamente tramite inserimento delle dipendenze. Se mancano i token, verifica che
Microsoft.Agents.A365.Observability.Hostingsia installato e registrato.
HTTP 401 Non autorizzato
Sintomi: L'esportazione non riesce con HTTP 401. L'esportatore non ritenta di risolvere questo errore.
Risoluzione:
- Verifica che il partecipante del token corrisponda all'ambito dell'endpoint di osservabilità.
- Verifica che lo strumento di risoluzione dei token non restituisca un token utente delegato, un token per un partecipante errato o un token scaduto.
HTTP 403 Non consentito
Sintomi: L'esportazione non riesce con HTTP 403. L'esportatore non ritenta di risolvere questo errore.
Causa principale: Un errore HTTP 403 può avere diverse cause. Controlla le seguenti soluzioni nell'ordine indicato.
Risoluzione:
Licenza mancante: Verifica che il tuo tenant abbia una delle seguenti licenze assegnate nell'interfaccia di amministrazione di Microsoft 365:
- Test - Microsoft 365 E7
- Microsoft 365 E7
- Microsoft Agent 365 Frontier
Autorizzazione
Agent365.Observability.OtelWritemancante: Concedi l'autorizzazione all'identità (identità gestita o registrazione dell'app). Senza di essa, l'esportazione della telemetria fallisce con errore HTTP 403.
Concedere l'autorizzazione
Utilizza una delle seguenti opzioni:
Interfaccia della riga di comando di Agent 365
Richiede un account di amministratore globale; esegui dalla directory del progetto dell'agente contenente
a365.config.jsono usa--agent-name.a365 setup permissions botOppure, senza un file di configurazione:
a365 setup permissions bot --agent-name "<agent-name>"Portale di Entra
Nessun file di configurazione necessario; è richiesto l'accesso come Amministratore Globale alla registrazione dell'app Blueprint.
- Vai al portale di Entra>Registrazioni app> seleziona l'app Blueprint.
- Vai a Autorizzazioni API>Aggiungi un'autorizzazione> cerca API utilizzate dalla mia organizzazione> per
9b975845-388f-4429-889e-eab1ef63949c. - Seleziona Autorizzazioni delegate> e
Agent365.Observability.OtelWrite>Aggiungi autorizzazioni. - Ripeti i passaggi 2–3, questa volta seleziona Autorizzazioni dell'applicazione> controlla
Agent365.Observability.OtelWrite>Aggiungi autorizzazione. - Clicca su Concedi il consenso dell'amministratore e conferma.
Sia
Agent365.Observability.OtelWrite(Delegata) cheAgent365.Observability.OtelWrite(Applicazione) mostrano lo statoGranted.
HTTP 403 Negato - Mancata corrispondenza dell'ID agente
Sintomi: l'esportazione non riesce con HTTP 403 e un messaggio del server simile a 403 Forbidden con errori agent-ID-mismatch durante la chiamata agli endpoint delle tracce di Agent 365.
Causa principale: Questo errore si verifica quando utilizzi l'ID client del progetto invece dell'ID client dell'istanza dell'agente durante la configurazione dei dettagli dell'agente. L'ID dell'agente nell'URL di esportazione non corrisponde all'identità autorizzata dal token, quindi l'endpoint delle tracce rifiuta la richiesta.
Risoluzione:
- Verifica se l'ID tenant viene aggiunto all'elenco dei tenant consentiti di Agent 365.
- Configura i dettagli dell'agente con l'ID client dell'istanza dell'agente (non con l'ID client del progetto).
- Verifica l'URL di esportazione che viene generato - viene registrato se abiliti il logger. Conferma che l'ID dell'agente nell'URL corrisponda all'ID client dell'istanza dell'agente.
- Per abilitare la registrazione diagnostica per ciascun SDK, consulta Validazione locale.
Errori HTTP 429 o 5xx - Errori transitori
Sintomi: L'esportazione fallisce con un codice di stato HTTP temporaneo come 429 o 5xx.
Risoluzione:
- Questi errori sono solitamente transitori e si risolvono da soli. Le distribuzioni Python e JavaScript eseguono automaticamente nuovi tentativi sui codici di stato HTTP 408, 429 e 5xx. La distribuzione .NET non esegue automaticamente nuovi tentativi.
- Se persistono errori, controlla il pannello di stato del servizio.
- Considera la possibilità di ridurre la frequenza di esportazione aumentando l'intervallo programmato tra i batch o la dimensione massima del batch di esportazione. Per Python e JavaScript, utilizza i parametri rilevanti
exporterOptionsoa365_*documentati nei repository GitHub. Per .NET, usao.Agent365.Exporter.ScheduledDelayMillisecondseo.Agent365.Exporter.MaxExportBatchSize.
Timeout di esportazione
Sintomi: Timeout dei tentativi di esportazione.
Risoluzione:
Verifica la connettività di rete verso l'endpoint di osservabilità.
Il timeout predefinito per le richieste HTTP è di 30 secondi su tutte le piattaforme. Se i timeout si verificano frequentemente, aumenta il valore del timeout nelle opzioni di esportazione.
use_microsoft_opentelemetry( enable_a365=True, a365_token_resolver=my_token_resolver, # No direct timeout kwarg — set via environment variable or exporterOptions if supported )Consulta il repository Python per l'elenco completo delle opzioni
a365_*.
L'esportazione ha successo ma la telemetria non appare né in Defender né in Purview
Sintomi: I log mostrano un'esportazione riuscita (HTTP 200) ma la telemetria non è visibile in Microsoft Defender o Microsoft Purview.
Risoluzione:
- Verifica di soddisfare i prerequisiti per visualizzare i log esportati:
- Microsoft Purview: L'audit deve essere attivato per la tua organizzazione. Consulta Attivare o disattivare il controllo.
-
Microsoft Defender: La ricerca avanzata deve essere configurata per accedere alla tabella
CloudAppEvents. Consulta la tabella CloudAppEvents nello schema di ricerca avanzata.
- La telemetria può richiedere diversi minuti per essere popolata dopo un'esportazione riuscita. Attendi prima di indagare ulteriormente.
- Verifica che gli span contengano attributi validi
microsoft.tenant.idegen_ai.agent.id. Gli attributi identità mancanti causano l'eliminazione degli intervalli lato server anche se l'esportazione HTTP restituisce il codice 200.
Contenuto correlato
- Concetti di osservabilità di Agent 365 - Flusso di dati, modelli di identità, autenticazione, ambiti e limiti che si applicano a ogni percorso di integrazione.
- Riferimento agli attributi di osservabilità di Agent 365 - Schema degli attributi canonici di span a cui ogni span acquisito da Agent 365 deve conformarsi.