SDK di osservabilità

Importante

Per abilitare l'osservabilità in Agent 365, utilizza Microsoft OpenTelemetry Distro. Questa distribuzione fornisce un unico SDK di osservabilità su Microsoft, con tecnologia Agent 365, Microsoft Foundry, Monitoraggio di Azure e altri. L'approccio esistente descritto in questo articolo continua a funzionare senza modifiche incompatibili. Per indicazioni sulla migrazione per lingua, consulta le seguenti guide:

Nota

L'osservabilità è uno dei livelli di funzionalità incrementali in guida introduttiva allo sviluppo con Agent 365 e si applica a tutti i tipi di agenti.

Per partecipare all'ecosistema Agent 365, aggiungi le funzionalità di osservabilità di Agent 365 all'agente. L'osservabilità di Agent 365 si basa su OpenTelemetry (OTel) e fornisce un framework unificato per acquisire i dati di telemetria in modo coerente e sicuro in tutte le piattaforme dell'agente. Mediante l'implementazione di questo componente necessario, consenti agli amministratori IT a monitorare l'attività dell'agente nell'interfaccia di amministrazione di Microsoft e consenti ai team di sicurezza di usare Defender e Purview per la conformità e il rilevamento delle minacce.

Vantaggi chiave

  • Visibilità end-to-end: acquisisci dati di telemetria completi per ogni chiamata dell'agente, incluse sessioni, chiamate agli strumenti ed eccezioni, offrendo la tracciabilità completa tra le piattaforme.
  • Abilitazione di sicurezza e conformità: inserisci log di controllo unificati in Defender e Purview, abilitando scenari di sicurezza avanzati e report di conformità per l'agente.
  • Flessibilità multipiattaforma: crea standard OTel e supporta runtime e piattaforme diverse, ad esempio Copilot Studio, Foundry e framework di agenti futuri.
  • Efficienza operativa per gli amministratori: offri osservabilità centralizzata nell'interfaccia di amministrazione di Microsoft 365, riduci i tempi di risoluzione dei problemi e migliora la governance con i controlli degli accessi in base al ruolo per i team IT che gestiscono l'agente.

Agenti supportati

I seguenti tipi di agenti supportano l'osservabilità di Agent 365:

Installazione

Usa questi comandi per installare i moduli di osservabilità per le lingue supportate da Agent 365.

Installa i pacchetti principali di osservabilità e runtime. Tutti gli agenti che utilizzano l'osservabilità Agent 365 necessitano di questi pacchetti.

pip install microsoft-agents-a365-observability-core
pip install microsoft-agents-a365-runtime

Se l'agente usa il pacchetto Microsoft Agents Hosting, installa il pacchetto di integrazione dell'hosting. Fornisce middleware che popola automaticamente baggage e ambiti da TurnContexte include la memorizzazione nella cache dei token per l'utilità di esportazione dell'osservabilità.

pip install microsoft-agents-a365-observability-hosting

Se il tuo agente utilizza uno dei framework AI supportati, installa la corrispondente estensione di strumentazione automatica per catturare la telemetria senza codice di strumentazione manuale. Per i dettagli di configurazione, vedi Strumentazione automatica.

# For Semantic Kernel
pip install microsoft-agents-a365-observability-extensions-semantic-kernel

# For OpenAI Agents SDK
pip install microsoft-agents-a365-observability-extensions-openai

# For Microsoft Agent Framework
pip install microsoft-agents-a365-observability-extensions-agent-framework

# For LangChain
pip install microsoft-agents-a365-observability-extensions-langchain

Configurazione

Usa le seguenti impostazioni per abilitare e personalizzare l'Osservabilità di Agent 365 per il tuo agente.

Imposta la variabile d'ambiente ENABLE_A365_OBSERVABILITY_EXPORTER su true per l'osservabilità. Questa impostazione esporta i log al servizio e richiede che venga fornito un token_resolver. Altrimenti, viene utilizzato l'esportatore della console.

from microsoft_agents_a365.observability.core import configure

def token_resolver(agent_id: str, tenant_id: str) -> str | None:
    # Implement secure token retrieval here
    return "Bearer <token>"

configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    token_resolver=token_resolver,
)

Lo strumento di risoluzione dei token è escluso dal log sulla console.

È possibile personalizzare il comportamento del componente di esportazione passando un'istanza Agent365ExporterOptions a exporter_options. Quando exporter_options viene fornito, ha la precedenza sui parametri token_resolver e cluster_category.

from microsoft_agents_a365.observability.core import configure, Agent365ExporterOptions

configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    exporter_options=Agent365ExporterOptions(
        cluster_category="prod",
        token_resolver=token_resolver,
    ),
    suppress_invoke_agent_input=True,
)

La tabella seguente descrive i parametri facoltativi per configure().

Parametro Descrizione Default
logger_name Nome del logger Python usato per il debug e l'output dei log sulla console. microsoft_agents_a365.observability.core
exporter_options Un'istanza Agent365ExporterOptions che configura lo strumento di risoluzione dei token e la categoria del cluster insieme. None
suppress_invoke_agent_input Quando True, elimina i messaggi di input su intervalli InvokeAgent. False

La tabella seguente descrive le proprietà facoltative per Agent365ExporterOptions.

Proprietà Descrizione Default
use_s2s_endpoint Quando True, utilizza il percorso dell'endpoint tra servizi. False
max_queue_size Dimensione massima della coda per il processore batch. 2048
scheduled_delay_ms Ritardo in millisecondi tra i batch di esportazione. 5000
exporter_timeout_ms Timeout in millisecondi per l'operazione di esportazione. 30000
max_export_batch_size Dimensione massima del batch per le operazioni di esportazione. 512

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_agents_a365.observability.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-agents-a365-observability-hosting. Questo helper estrae automaticamente il chiamante, l'agente, il tenant, il canale e i dettagli della conversazione dall'attività.

from microsoft_agents.hosting.core.turn_context import TurnContext
from microsoft_agents_a365.observability.core import BaggageBuilder
from microsoft_agents_a365.observability.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à.

Registra BaggageMiddleware nel set di middleware dell'adapter. Estrae automaticamente il chiamante, l'agente, il tenant, il canale e i dettagli della conversazione da ogni TurnContext in ingresso ed esegue il wrapping della richiesta in un ambito di contesto.

from microsoft_agents_a365.observability.hosting import BaggageMiddleware

adapter.use(BaggageMiddleware())

In alternativa, utilizza ObservabilityHostingManager per configurare il middleware per i dati accessori insieme ad altre funzionalità di hosting.

from microsoft_agents_a365.observability.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.

Strumento di risoluzione dei token

Quando si usa l'utilità di esportazione di Agent 365, è necessario fornire una funzione di risoluzione dei token che restituisce il token di autenticazione. Quando si usa l'SDK di osservabilità di Agent 365 con il framework di hosting dell'agente, è possibile generare token usando TurnContext dalle attività dell'agente

Il seguente esempio di codice mostra come generare un token utilizzando il microsoft_agents.hosting.core SDK. Il token di autenticazione generato qui viene utilizzato per esportare gli span al servizio di ingestione A365. Gli agenti possono generare un token autonomamente, ad esempio utilizzando Libreria di Autenticazione Microsoft (MSAL), ma devono assicurarsi che il token abbia l'ambito di osservabilità.

from microsoft_agents.activity import load_configuration_from_env
from microsoft_agents.authentication.msal import MsalConnectionManager
from microsoft_agents.hosting.aiohttp import CloudAdapter
from microsoft_agents.hosting.core import (
    AgentApplication,
    Authorization,
    MemoryStorage,
    TurnContext,
    TurnState,
)
from microsoft_agents_a365.runtime import (
    get_observability_authentication_scope,
)

agents_sdk_config = load_configuration_from_env(environ)

STORAGE = MemoryStorage()
CONNECTION_MANAGER = MsalConnectionManager(**agents_sdk_config)
ADAPTER = CloudAdapter(connection_manager=CONNECTION_MANAGER)
ADAPTER.use(TranscriptLoggerMiddleware(ConsoleTranscriptLogger()))
AUTHORIZATION = Authorization(STORAGE, CONNECTION_MANAGER, **agents_sdk_config)

AGENT_APP = AgentApplication[TurnState](
    storage=STORAGE, adapter=ADAPTER, authorization=AUTHORIZATION, **agents_sdk_config
)

@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
    aau_auth_token = await AGENT_APP.auth.exchange_token(
                        context,
                        scopes=get_observability_authentication_scope(),
                        auth_handler_id="AGENTIC",
                    )
    # cache this auth token and return via token resolver

Per un agente creato con l'interfaccia della riga di comando A365 che utilizza un assistente AI e il pacchetto Microsoft Agent 365 Observability Hosting Library, usa AgenticTokenCache per gestire automaticamente la cache dei token. Registra il token una volta per agente e tenant durante un gestore di attività e passa cache.get_observability_token come token_resolver nella configurazione di osservabilità.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.hosting.token_cache_helpers import (
    AgenticTokenCache,
    AgenticTokenStruct,
)
from microsoft_agents_a365.runtime import get_observability_authentication_scope

# Create a shared cache instance
token_cache = AgenticTokenCache()

# Use the cache as your token resolver in configure()
configure(
    service_name="my-agent-service",
    service_namespace="my.namespace",
    token_resolver=token_cache.get_observability_token,
)

@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
    token_cache.register_observability(
        agent_id="agent-456",
        tenant_id="tenant-123",
        token_generator=AgenticTokenStruct(
            authorization=AGENT_APP.auth,
            turn_context=context,
        ),
        observability_scopes=get_observability_authentication_scope(),
    )

Strumentazione automatica

La strumentazione automatica ascolta automaticamente i segnali di telemetria esistenti dei framework agenti (SDK) per le tracce e li inoltra al servizio di osservabilità di Agent 365. Questa funzionalità elimina la necessità per gli sviluppatori di scrivere manualmente il codice di monitoraggio, semplificando la configurazione e garantendo un monitoraggio coerente delle prestazioni.

Importante

L'auto-strumentazione popola solo gli attributi standard OTel. Devi aggiungere attributi specifici di Microsoft tramite BaggageBuilder. Per vedere quali attributi mancano, confronta l'output degli intervalli della console con i log dello store per l'insieme delle differenze.

Diversi SDK e piattaforme supportano l'auto-strumentazione:

Piattaforma SDK/framework supportati
.NET Kernel semantico, OpenAI, Agent Framework
Python Kernel semantico, OpenAI, Agent Framework, LangChain
Node.js OpenAI, LangChain

Nota

Il supporto per la strumentazione automatica varia in base all'implementazione della piattaforma e dell'SDK.

Kernel semantico

La strumentazione automatica richiede l'uso del generatore di baggage. Imposta l'ID agente e l'ID tenant usando BaggageBuilder.

Installare il pacchetto .

pip install microsoft-agents-a365-observability-extensions-semantic-kernel

Configura l'osservabilità.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.semantickernel.trace_instrumentor import SemanticKernelInstrumentor

# Configure observability
configure(
    service_name="my-semantic-kernel-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
instrumentor = SemanticKernelInstrumentor()
instrumentor.instrument()

# Your Semantic Kernel code is now automatically traced

OpenAI

La strumentazione automatica richiede l'uso del generatore di baggage. Imposta l'ID agente e l'ID tenant usando BaggageBuilder.

Installare il pacchetto .

pip install microsoft-agents-a365-observability-extensions-openai

Configura l'osservabilità.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.openai import OpenAIAgentsTraceInstrumentor

# Configure observability
configure(
    service_name="my-openai-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
instrumentor = OpenAIAgentsTraceInstrumentor()
instrumentor.instrument()

# Your OpenAI Agents code is now automatically traced

Agent Framework

La strumentazione automatica richiede l'uso del generatore di baggage. Imposta l'ID agente e l'ID tenant usando BaggageBuilder.

Installare il pacchetto .

pip install microsoft-agents-a365-observability-extensions-agent-framework

Configura l'osservabilità.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.agentframework import (
    AgentFrameworkInstrumentor,
)

# Configure observability
configure(
    service_name="AgentFrameworkTracingWithAzureOpenAI",
    service_namespace="AgentFrameworkTesting",
)

# Enable auto-instrumentation
AgentFrameworkInstrumentor().instrument()

Framework LangChain

La strumentazione automatica richiede l'uso del generatore di baggage. Imposta l'ID agente e l'ID tenant usando BaggageBuilder.

Installare il pacchetto .

pip install microsoft-agents-a365-observability-extensions-langchain

Configura l'osservabilità.

from microsoft_agents_a365.observability.core.config import configure
from microsoft_agents_a365.observability.extensions.langchain import CustomLangChainInstrumentor

# Configure observability
configure(
    service_name="my-langchain-agent",
    service_namespace="ai.agents"
)

# Enable auto-instrumentation
CustomLangChainInstrumentor()

# Your LangChain code is now automatically traced

Strumentazione manuale

Usa l'SDK di osservabilità di Agent 365 per comprendere il funzionamento interno dell'agente. L'SDK fornisce gli ambiti che è possibile avviare: InvokeAgentScope, ExecuteToolScope, InferenceScope e OutputScope.

Chiamata dell'agente

Usa questo ambito all'inizio del processo dell'agente. Usando l'ambito di chiamata dell'agente si acquisisce proprietà come l'agente corrente richiamato, i dati utente dell'agente e così via.

from microsoft_agents_a365.observability.core import (
    InvokeAgentScope,
    InvokeAgentScopeDetails,
    AgentDetails,
    CallerDetails,
    UserDetails,
    Channel,
    Request,
    ServiceEndpoint,
)

agent_details = AgentDetails(
    agent_id="agent-456",
    agent_name="My Agent",
    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",
)

scope_details = InvokeAgentScopeDetails(
    endpoint=ServiceEndpoint(hostname="myagent.contoso.com", port=443),
)

request = Request(
    content="User asks a question",
    session_id="session-42",
    conversation_id="conv-xyz",
    channel=Channel(name="msteams"),
)

caller_details = CallerDetails(
    user_details=UserDetails(
        user_id="user-123",
        user_email="jane.doe@contoso.com",
        user_name="Jane Doe",
    ),
)

with InvokeAgentScope.start(request, scope_details, agent_details, caller_details):
    # Perform agent invocation logic
    response = call_agent(...)

Esecuzione dello strumento

I seguenti esempi mostrano come aggiungere il tracciamento dell'osservabilità all'esecuzione dello strumento del tuo agente. Questo tracciamento cattura la telemetria a scopo di monitoraggio e audit.

from microsoft_agents_a365.observability.core import (
    ExecuteToolScope,
    ToolCallDetails,
    Request,
    ServiceEndpoint,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

tool_details = ToolCallDetails(
    tool_name="summarize",
    tool_type="function",
    tool_call_id="tc-001",
    arguments="{'text': '...'}",
    description="Summarize provided text",
    endpoint=ServiceEndpoint(hostname="tools.contoso.com", port=8080),
)

with ExecuteToolScope.start(request, tool_details, agent_details) as scope:
    result = run_tool(tool_details)
    scope.record_response(result)

Inferenza

Gli esempi seguenti illustrano come instrumentare le chiamate di inferenza del modello di intelligenza artificiale con il rilevamento dell'osservabilità per acquisire l'utilizzo dei token, i dettagli del modello e i metadati della risposta.

from microsoft_agents_a365.observability.core import (
    InferenceScope,
    InferenceCallDetails,
    InferenceOperationType,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

inference_details = InferenceCallDetails(
    operationName=InferenceOperationType.CHAT,
    model="gpt-4o-mini",
    providerName="azure-openai",
    inputTokens=123,
    outputTokens=456,
    finishReasons=["stop"],
)

with InferenceScope.start(request, inference_details, agent_details) as scope:
    completion = call_llm(...)
    scope.record_output_messages([completion.text])
    scope.record_input_tokens(completion.usage.input_tokens)
    scope.record_output_tokens(completion.usage.output_tokens)

Output

Usa questo ambito per scenari asincroni in cui InvokeAgentScope, ExecuteToolScope o InferenceScope non possono catturare i dati di output in modo sincrono. Avvia OutputScope come intervallo figlio per registrare i messaggi di output finali al termine dell'ambito padre.

from microsoft_agents_a365.observability.core import (
    OutputScope,
    Response,
    SpanDetails,
)

# Use the same agent_details and request instances from the InvokeAgentScope example above

# Get the parent context from the originating scope
parent_context = invoke_scope.get_context()

response = Response(messages=["Here is your organized inbox with 15 urgent emails."])

with OutputScope.start(
    request,
    response,
    agent_details,
    span_details=SpanDetails(parent_context=parent_context),
):
    # Output messages are recorded automatically from the response
    pass

Convalida in locale

Per verificare di aver effettuato con successo l'integrazione con l'SDK di osservabilità, esamina i log della console generati dal tuo agente e i log dell'SDK di osservabilità.

Impostare la variabile di ambiente ENABLE_A365_OBSERVABILITY_EXPORTER su false. Questa impostazione si estende (traccia) nella console.

Per analizzare gli errori di esportazione, abilita la registrazione dettagliata impostando ENABLE_A365_OBSERVABILITY_EXPORTER su true e configurando la registrazione di debug all'avvio dell'applicazione.

import logging

logging.basicConfig(level=logging.DEBUG)
logging.getLogger("microsoft_agents_a365.observability.core").setLevel(logging.DEBUG)

# Or target only the exporter:
logging.getLogger(
    "microsoft_agents_a365.observability.core.exporters.agent365_exporter"
).setLevel(logging.DEBUG)

Messaggi chiave di log:

DEBUG  Token resolved for agent {agentId} tenant {tenantId}
DEBUG  Exporting {n} spans to {url}
DEBUG  HTTP 200 - correlation ID: abc-123
ERROR  Token resolution failed: {error}
ERROR  HTTP 401 exporting spans - correlation ID: abc-123
INFO   No spans with tenant/agent identity found; nothing exported.

Visualizzazione dei log esportati

Per visualizzare la telemetria degli agenti in Microsoft Purview o Microsoft Defender, assicurati che siano soddisfatti i seguenti requisiti:

Convalida per la pubblicazione in Store

Importante

Per la convalida del negozio, l'agente deve implementare gli scopi InvokeAgentScope, InferenceScope e ExecuteToolScope. Questi tre ambiti sono necessari per la pubblicazione.

Prima della pubblicazione, usa i log della console per convalidare l'integrazione dell'osservabilità per l'agente implementando gli ambiti invoke agent, execute tool, inference e output richiesti. Poi confronta i log del tuo agente con le seguenti liste di attributi per verificare che tutti gli attributi richiesti siano presenti. Acquisisce attributi su ogni ambito o tramite il generatore di baggage e includi attributi opzionali a tua discrezione.

Per maggiori informazioni sui requisiti per la pubblicazione nello Store, consulta le linee guida per la convalida dello Store.

Attributi InvokeAgentScope

L'elenco seguente riepiloga gli attributi di telemetria obbligatori e facoltativi registrati quando si avvia un InvokeAgentScope.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "microsoft.a365.caller.agent.blueprint.id": "Optional",
        "microsoft.a365.caller.agent.id": "Optional",
        "microsoft.a365.caller.agent.name": "Optional",
        "microsoft.a365.caller.agent.platform.id": "Optional",
        "microsoft.a365.caller.agent.user.email": "Optional",
        "microsoft.a365.caller.agent.user.id": "Optional",
        "microsoft.a365.caller.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.input.messages": "Required",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "server.address": "Required",
        "server.port": "Required",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

Attributi ExecuteToolScope

L'elenco seguente riepiloga gli attributi di telemetria obbligatori e facoltativi registrati quando si avvia un ExecuteToolScope.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.operation.name": "Required",
        "gen_ai.tool.call.arguments": "Required",
        "gen_ai.tool.call.id": "Required",
        "gen_ai.tool.call.result": "Required",
        "gen_ai.tool.description": "Optional",
        "gen_ai.tool.name": "Required",
        "gen_ai.tool.type": "Required",
        "server.address": "Optional",
        "server.port": "Optional",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

Attributi InferenceScope

L'elenco seguente riepiloga gli attributi di telemetria obbligatori e facoltativi registrati quando si avvia un InferenceScope.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.a365.agent.thought.process": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.input.messages": "Required",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "gen_ai.provider.name": "Required",
        "gen_ai.request.model": "Required",
        "gen_ai.response.finish_reasons": "Optional",
        "gen_ai.usage.input_tokens": "Optional",
        "gen_ai.usage.output_tokens": "Optional",
        "server.address": "Optional",
        "server.port": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.session.id": "Optional",
        "microsoft.tenant.id": "Required"
    }

Attributi OutputScope

L'elenco seguente riepiloga gli attributi di telemetria obbligatori e facoltativi registrati quando si avvia un OutputScope. Usa questo ambito per scenari asincroni in cui l'ambito padre non può acquisire i dati di output in modo sincrono.

"attributes": {
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

Testare l'agente con l'osservabilità

Dopo aver implementato l'osservabilità nell'agente, esegui dei test per verificare che i dati di telemetria vengano acquisiti correttamente. Segui la guida ai test per configurare l'ambiente. Segui la guida ai test per configurare l'ambiente, quindi concentrati principalmente sulla sezione Visualizzare i log di osservabilità per verificare che l'implementazione dell'osservabilità funzioni come previsto.

Verifica:

  • Vai a: https://admin.cloud.microsoft/#/agents/all
  • Seleziona l'agente > Attività
  • Vedi sessioni e chiamate di strumenti

Risoluzione dei problemi

Questa sezione descrive i problemi più comuni nell’implementazione e nell’utilizzo dell’osservabilità.

Problema Descrizione
I dati di osservabilità non sono visibili Nessuna telemetria è visibile perché l'esportazione non è abilitata, la configurazione è incorretta o la risoluzione dei token non va a buon fine.
ID tenant o ID agente mancanti: intervalli ignorati Gli intervalli vengono eliminati prima dell'esportazione quando mancano gli attributi di identità necessari per il partizionamento.
Risoluzione del token non riuscita - esportazione ignorata o non autorizzata Le richieste di esportazione falliscono o vengono saltate quando il resolver non restituisce alcun token o incontra un'eccezione.
HTTP 401 Non autorizzato L'autenticazione va a buon fine dal punto di vista sintattico, ma il token è invalido per l'ingestione a causa dell'ambito, del tipo o della scadenza.
HTTP 403 Negato L'accesso è negato a causa di lacune nelle licenze del tenant o di permessi di osservabilità mancanti.
HTTP 403 Negato - Mancata corrispondenza dell'ID agente La richiesta viene rifiutata quando l'identità dell'agente nell'URL non corrisponde a quella rappresentata dal token.
Errori HTTP 429 o 5xx - Errori transitori La limitazione della larghezza di banda della rete temporanea o malfunzionamenti lato servizio interrompono l'esportazione e potrebbero richiedere la regolazione della configurazione dei tentativi.
Timeout di esportazione I batch di telemetria superano i tempi di timeout configurati a causa della latenza di rete o della reattività degli endpoint.
L'esportazione ha successo ma la telemetria non appare né in Defender né in Purview L'ingestione si completa, ma la visibilità a valle viene ritardata o bloccata dai prerequisiti del prodotto.

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'osservabilità 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'esportatore di osservabilità sia abilitato

    Devi abilitare esplicitamente l'esportatore Agent 365. Quando disabilitato, l'SDK torna a un esportatore console e la telemetria non viene inviata al servizio. Per i dettagli della configurazione, vedi Configurazione.

  • 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. Assicurati che il tuo codice implementi correttamente il resolver di token. Per dettagli, vedi Strumento di risoluzione dei token.

  • Controllo degli errori nei log

    Abilita la registrazione dettagliata e usa il comando az webapp log tail per cercare nei log errori relativi all'osservabilità. Per dettagli su come abilitare la registrazione dei log su ciascuna piattaforma, vedi Convalida locale.

    # Look for observability-related errors
    az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
    
  • Verifica l'esportazione della telemetria

    Verifica che la telemetria sia generata ed esportata come previsto.

    • Aggiungi un esportatore per la console e verifica se la telemetria viene generata localmente. Per dettagli su come utilizzare l'esportatore della console e verificare l'output, vedi Verifica localmente.

ID tenant o ID agente mancanti: intervalli ignorati

Sintomi: Il sistema scarta silenziosamente gli span e non li esporta mai. Alcuni SDK registrano un conteggio degli intervalli ignorati o un messaggio, ad esempio "Nessun intervallo con l'identità tenant/agente trovata". Altri li rilasciano senza registrazione.

Risoluzione:

  • Prima dell'esportazione, le partizioni dell'SDK vengono suddivise in base all'identità del tenant e dell'agente. Il sistema elimina gli intervalli che mancano di un ID tenant o di un ID agente e non li invia mai al servizio.
  • Assicurati che BaggageBuilder sia 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.
  • Verifica che l'attività TurnContext abbia un destinatario valido con identità agente se si utilizza il baggage middleware o il turn context helper dal pacchetto di integrazione dell'hosting per popolare gli ID.

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 dell'SDK, l'esportazione viene saltata completamente oppure la richiesta viene inviata senza un'intestazione di autorizzazione e fallisce con HTTP 401.

Risoluzione:

  • Lo strumento di risoluzione dei token è necessario all'inizializzazione. 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 di utilizzare l'ID tenant corretto e l'ID agente per BaggageBuilder, perché questi valori vengono passati al risolutore di token.
  • Per gli agenti ospitati su Azure, verifica che l'Identità Gestita disponga delle autorizzazioni API richieste per l'ambito di osservabilità.

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.OtelWrite mancante: se hai recentemente aggiornato i pacchetti di osservabilità, devi concedere questa autorizzazione. Vedi la nota importante nella sezione successiva.

Importante

Gli agenti esistenti che aggiornano a queste versioni dei pacchetti richiedono un passaggio aggiuntivo

Questo passaggio si applica solo se stai aggiornando un agente esistente. Le nuove installazioni di agenti non richiedono questo passaggio. Se esegui l'aggiornamento alle versioni del pacchetto seguenti o versioni successive, è necessario concedere la nuova autorizzazione Agent365.Observability.OtelWrite all'identità (identità gestita o registrazione dell'app). Senza questa autorizzazione, l'esportazione della telemetria non riesce con HTTP 403.

Piattaforma Versione minima che richiede questo passaggio
.NET 0.3-beta
Node.js 0.2.0-preview.1
Python 0.3.0

Concedi l'autorizzazione utilizzando una delle seguenti opzioni.

Opzione A — Interfaccia della riga di comando di Agent 365 (richiede un account di amministratore globale; esegui dalla directory del progetto dell'agente contenente a365.config.json, o utilizza --agent-name)

a365 setup permissions bot

Oppure, senza un file di configurazione:

a365 setup permissions bot --agent-name "<agent-name>"

Questo comando concede tutte le autorizzazioni mancanti sul progetto, inclusi gli ambiti di osservabilità.

Opzione B - Portale di Entra (non sono necessari file di configurazione; è richiesto l'accesso da Amministratore globale alla registrazione dell'app del progetto)

  1. Vai al portale di Entra>Registrazioni app> seleziona l'app Blueprint.
  2. Vai a Autorizzazioni API>Aggiungi un'autorizzazione> cerca API utilizzate dalla mia organizzazione> per 9b975845-388f-4429-889e-eab1ef63949c.
  3. Seleziona Autorizzazioni delegate> e Agent365.Observability.OtelWrite>Aggiungi autorizzazioni.
  4. Ripeti i passaggi 2–3, questa volta seleziona Autorizzazioni dell'applicazione> controlla Agent365.Observability.OtelWrite>Aggiungi autorizzazione.
  5. Clicca su Concedi il consenso dell'amministratore e conferma.

Sia Agent365.Observability.OtelWrite (Delegato) che Agent365.Observability.OtelWrite (Applicazione) dovrebbero mostrare lo stato Granted.

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 il logging diagnostico per ciascun SDK, vedi Convalida in 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. Gli SDK Python e JavaScript effettuano automaticamente tentativi per i codici di stato HTTP 408, 429 e 5xx fino a tre volte con backoff esponenziale. L'SDK .NET non esegue automaticamente nuovi tentativi.
  • Se persistono errori, controlla il pannello di stato del servizio.
  • Valuta la possibilità di ridurre la frequenza di esportazione aumentando il ritardo programmato tra i batch o aumentando la dimensione massima del batch di esportazione. Per le opzioni di configurazione per piattaforma, consulta la tabella Agent365ExporterOptions nella sezione Configurazione.

Timeout di esportazione

Sintomi: Timeout dei tentativi di esportazione.

Risoluzione:

  • Verifica la connettività di rete verso l'endpoint di osservabilità.
  • I timeout predefiniti variano a seconda della piattaforma. Il timeout predefinito per le richieste HTTP è di 30 secondi. Alcuni SDK hanno anche un timeout di esportazione complessivo separato che copre tutto il ciclo di esportazione, inclusi i tentativi di ripetizione. Per le proprietà esatte e i valori predefiniti per piattaforma, consulta la tabella Agent365ExporterOptions in Configurazione.
  • Se i timeout si verificano frequentemente, aumenta il valore di timeout rilevante nelle opzioni di esportazione.

L'esportazione ha successo ma la telemetria non appare né in Defender né in Purview

Sintomi: I log mostrano un'esportazione riuscita, ma la telemetria non è visibile né in Microsoft Defender né in Microsoft Purview.

Risoluzione:

  • Verifica di soddisfare i prerequisiti per visualizzare i log esportati. Per Purview, l'audit deve essere attivato. Per Defender, devi configurare la ricerca avanzata. Per altre informazioni, consulta Visualizzazione dei log esportati.
  • La telemetria può richiedere diversi minuti per essere popolata dopo un'esportazione riuscita. Aspetta che compaiano i dati prima di approfondire.

Per ulteriori informazioni sulla verifica dell'osservabilità, consulta: