SDK de Observabilidade do Agent 365 descontinuado

Importante

Este artigo documenta o Agent 365 Observability SDK descontinuado. Integrações existentes continuam funcionando, mas não use esse SDK para novas integrações. Para novos desenvolvimentos, use o Microsoft OpenTelemetry Distro. Antes de atualizar uma integração existente, revise o guia de migração para o seu idioma:

Para o modelo de dados subjacente, identidade e autenticação, escopos e consentimento, e limites que se aplicam a todo caminho de integração, veja conceitos de observabilidade do Agent 365.

Note

A observabilidade é uma das camadas de funcionalidade incremental no desenvolvimento do Agente 365 e se aplica a todos os tipos de agente.

Para participar do ecossistema Agent 365, adicione capacidades de Observabilidade do Agent 365 ao seu agente. O Agent 365 Observability se baseia no OpenTelemetry (OTel) e oferece uma estrutura unificada para capturar telemetria de forma consistente e segura em todas as plataformas de agentes. Ao implementar esse componente necessário, você permite que administradores de TI monitorem a atividade do seu agente no centro de administração da Microsoft e permitem que equipes de segurança usem o Defender e o Purview para conformidade e detecção de ameaças.

Principais benefícios

  • Visibilidade de ponta a ponta: Capture telemetria abrangente para cada invocação de agente, incluindo sessões, chamadas de ferramentas e exceções, garantindo rastreabilidade total entre as plataformas.
  • Habilitação de segurança e conformidade: Alimente logs de auditoria unificados no Defender e no Purview, possibilitando cenários avançados de segurança e relatórios de conformidade para seu agente.
  • Flexibilidade multiplataforma: baseie-se nos padrões OTel e dê suporte a diversos runtimes e plataformas como Copilot Studio, Foundry e futuros frameworks de agentes.
  • Operational efficiency for admins: fornecer observabilidade centralizada no centro de administração Microsoft 365, reduzindo o tempo de solução de problemas e melhorando a governança com controles de acesso baseados em função para as equipes de TI que gerenciam seu agente.

Agentes com suporte

Os seguintes tipos de agente dão suporte à observabilidade do Agente 365:

Installation

Use esses comandos para instalar os módulos de observabilidade para as linguagens suportadas pelo Agente 365.

Instale os principais pacotes de observabilidade e runtime. Todos os agentes que usam a Observabilidade do Agente 365 precisam desses pacotes.

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

Se o agente usar o pacote Microsoft Agents Hosting, instale o pacote de integração de hospedagem. Ele fornece middleware que preenche automaticamente a bagagem e os escopos a partir do TurnContext, e inclui o armazenamento de tokens para o exportador de observabilidade.

pip install microsoft-agents-a365-observability-hosting

Se o agente usar uma das estruturas de IA com suporte, instale a extensão de instrumentação automática correspondente para capturar automaticamente a telemetria sem código de instrumentação manual. Para obter detalhes de configuração, consulte Instrumentação automática.

# 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

Configuration

Use as seguintes configurações para ativar e personalizar a Observabilidade do Agente 365 para seu agente.

Defina a ENABLE_A365_OBSERVABILITY_EXPORTER variável de ambiente para a true observabilidade. No Agent 365 SDK 2.0 e posteriores, o exportador sempre usa a rota service-to-service (S2S) e autentica com o app-only configurado token_resolver. Se você ativar o exportador sem um resolver, o Python mantém o fallback do exportador de console e não envia telemetria para o Agent 365.

from microsoft_agents_a365.observability.core import configure

def token_resolver(agent_id: str, tenant_id: str) -> str | None:
    # Return a validated app-only observability token for this agent and tenant.
    return "<app-only-observability-token>"

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

O resolver de tokens é excluído do login no console.

Você pode personalizar o comportamento do exportador passando uma Agent365ExporterOptions instância para exporter_options. Quando exporter_options for fornecido, ele terá precedência sobre os parâmetros 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,
)

A tabela a seguir descreve os parâmetros opcionais para configure().

Parâmetro Description Default
logger_name Nome do logger de Python usado para depuração e saída de log do console. microsoft_agents_a365.observability.core
exporter_options Uma Agent365ExporterOptions instância que configura o resolvedor de token e a categoria de cluster juntos. None
suppress_invoke_agent_input Quando True, suprime mensagens de entrada em trechos InvokeAgent. False

A tabela a seguir descreve as propriedades opcionais para Agent365ExporterOptions.

Property Description Default
use_s2s_endpoint Obsoleto e ignorado. O Agent 365 SDK 2.0 e posteriores sempre usa a rota S2S, mesmo quando esse valor é False. False (ignorado)
max_queue_size Tamanho máximo da fila para o processador de lote. 2048
scheduled_delay_ms Atraso em milissegundos entre lotes de exportação. 5000
exporter_timeout_ms Tempo limite em milissegundos para a operação de exportação. 30000
max_export_batch_size Tamanho máximo do lote para operações de exportação. 512

Atributos de bagagem

Use BaggageBuilder para definir informações contextuais que se propagam por todos os trechos em uma requisição. O SDK implementa um SpanProcessor que copia todas as entradas de bagagem não vazias para spans recém-iniciados sem sobrescrever atributos existentes.

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

Para preencher automaticamente o BaggageBuilder a partir do TurnContext, use a função auxiliar populate no pacote microsoft-agents-a365-observability-hosting. Esse auxiliar extrai automaticamente os detalhes do chamador, agente, inquilino, canal e conversa da atividade.

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 de bagagem

Se o agente usar o pacote de integração de hospedagem, registre o middleware de bagagem para preencher automaticamente a bagagem para cada solicitação de entrada. Esta etapa remove a necessidade de chamar BaggageBuilder manualmente em cada manipulador de atividades.

Registre BaggageMiddleware no conjunto middleware do adaptador. Ele extrai automaticamente os detalhes de chamadas, agente, locatário, canal e conversa de cada entrada TurnContext e encapsula a solicitação em um escopo de bagagem.

from microsoft_agents_a365.observability.hosting import BaggageMiddleware

adapter.use(BaggageMiddleware())

Como alternativa, use ObservabilityHostingManager para configurar o middleware de bagagem junto com outros recursos de hospedagem:

from microsoft_agents_a365.observability.hosting import ObservabilityHostingManager, ObservabilityHostingOptions

options = ObservabilityHostingOptions(enable_baggage=True)
ObservabilityHostingManager.configure(adapter.middleware_set, options)

O middleware ignora a configuração de dados adicionais para respostas assíncronas (eventos ContinueConversation) para evitar substituir as informações que a solicitação de origem já estabeleceu.

Resolvedor de token

Quando você usar o exportador Agent 365 no Agent 365 SDK 2.0 e posteriores, forneça um resolvedor de token que retorne o token de observabilidade final somente de aplicativo para a instância do agente exportador. O exportador sempre envia telemetria para a rota S2S e não recorre para a rota delegada. Uma instância registrada no Agent 365 não precisa da Agent365.Observability.OtelWrite permissão ou consentimento do administrador para exportar nessa rota.

Use a troca Federated Managed Identity (FMI) em duas etapas para obter o token somente de aplicativo:

  1. Obtenha um token blueprint client_credentials para api://AzureADTokenExchange/.default com fmi_path definido como o ID do cliente da instância do agente.
  2. Obtenha um token agent-instance client_credentials para api://9b975845-388f-4429-889e-eab1ef63949c/.default. Passe o token do passo 1 como client_assertion, e defina client_assertion_type para urn:ietf:params:oauth:client-assertion-type:jwt-bearer.

Para a configuração completa de autenticação, veja Agent 365-enabled using S2S. Para implementações completas de serviço de token, veja os exemplos do Agente 365 para Node.js, Python e .NET.

Seu resolvedor deve:

  • Devolva um token exclusivo do app para a instância e o tenant do agente exportador. Nunca devolva a asserção intermediária do blueprint, um token de blueprint, um token de usuário ou um token OBO.
  • Valide o token antes de devolvê-lo. Aceite idtyp=app. Se idtyp estiver ausente, aceite apenas um token que tenha uma declaração roles não vazia ou uma declaração oid não vazia igual a sub. Rejeite tokens que tenham uma declaração scp ou outro valor idtyp, tokens expirados e tokens cujo aud não seja 9b975845-388f-4429-889e-eab1ef63949c nem api://9b975845-388f-4429-889e-eab1ef63949c.
  • Armazene o token em cache e atualize-o antes que expire. O exportador chama o resolver uma vez para cada identidade de tenant e para cada identidade de agente em cada lote de exportação.

Note

Migrar do SDK 1.x: O SDK 2.0 remove a troca de tokens delegada para exportação de observabilidade. Substitua o código de token delegado no seu agente por um resolvedor exclusivo do aplicativo, como mostrado nos exemplos a seguir. Agentes que permanecem no SDK 1.x e exportam pela rota delegada ainda precisam da permissão delegada Agent365.Observability.OtelWrite e do consentimento do administrador. O a365 setup all comando não configura essa permissão para agentes de blueprint. Para concedê-la, veja Conceder a permissão.

Ligue AgenticTokenCache.refresh_observability_token(agent_id, tenant_id, acquire_app_only_obs_token) no seu token_resolver. O cache passa o escopo de observabilidade /.default para o callback de aquisição e retorna o token em cache.

from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.hosting.token_cache_helpers import AgenticTokenCache

cache = AgenticTokenCache()

async def acquire_app_only_obs_token(
    agent_id: str,
    tenant_id: str,
    scopes: list[str],
) -> str:
    # Run the FMI exchange described earlier, validate the token, and return it.
    return "<app-only-observability-token>"

async def token_resolver(agent_id: str, tenant_id: str) -> str:
    return await cache.refresh_observability_token(
        agent_id, tenant_id, acquire_app_only_obs_token
    )

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

Python também suporta um resolvedor síncrono que retorna um token de um cache thread-safe. Os exemplos do Agent 365 usam esse padrão, o que evita as restrições de executar um resolver assíncrono na thread exportadora.

Para migrar do SDK 1.x, remova a chamada AGENT_APP.auth.exchange_token que solicitou o escopo de observabilidade e a chamada AgenticTokenCache.register_observability que passou um AgenticTokenStruct. No SDK 2.0, register_observability é uma no-op obsoleta.

Instrumentação automática

A auto-instrumentação escuta automaticamente os frameworks agenticos (SDKs), sinais de telemetria existentes para rastreios e os encaminha para o serviço de observabilidade do Agente 365. Esse recurso elimina a necessidade de os desenvolvedores escreverem código de monitoramento manualmente, simplifica a configuração e garante um acompanhamento consistente de desempenho.

Importante

A instrumentação automática popula apenas os atributos OTel padrão. Você deve adicionar atributos específicos Microsoft por meio de BaggageBuilder. Para ver quais atributos estão ausentes, valide a saída do span no console com os logs do armazenamento para identificar as diferenças.

Múltiplos SDKs e plataformas suportam auto-instrumentação:

Platform SDKs/Frameworks suportados
.NET Kernel semântico, OpenAI, Agent Framework
Python Kernel semântico, OpenAI, Agent Framework, LangChain
Node.js OpenAI, LangChain

Note

O suporte à auto-instrumentação varia conforme a plataforma e a implementação do SDK.

Núcleo Semântico

A instrumentação automática exige o uso de um construtor de baggage. Defina o ID do agente e o ID do locatário usando BaggageBuilder.

Instale o pacote.

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

Configurar a observabilidade

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

A instrumentação automática exige o uso de um construtor de baggage. Defina o ID do agente e o ID do locatário usando BaggageBuilder.

Instale o pacote.

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

Configurar a observabilidade

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

Estrutura do Agente

A instrumentação automática exige o uso de um construtor de baggage. Defina o ID do agente e o ID do inquilino usando BaggageBuilder.

Instale o pacote.

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

Configurar a observabilidade

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()

Estrutura LangChain

Note

A instrumentação automática para a estrutura LangChain também dá suporte a LangGraph e Deep Agents. A mesma extensão captura automaticamente a telemetria para agentes criados com qualquer um desses frameworks.

Auto-instrumentação requer o uso do baggage builder. Defina o ID do agente e o ID do tenant usando BaggageBuilder.

Instale o pacote.

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

Configurar a observabilidade

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

Instrumentação manual

Use o SDK de observabilidade do Agente 365 para entender o funcionamento interno do agente. O SDK fornece escopos que você pode iniciar: InvokeAgentScope, ExecuteToolScope, InferenceScope, e OutputScope.

Invocação do agente

Use esse escopo no início do processo do seu agente. Usando o escopo do agente de invocação, você pode capturar propriedades como o agente atual que está sendo invocado, dados do usuário do agente, entre outros.

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(...)

Execução da ferramenta

Os exemplos a seguir mostram como adicionar rastreamento de observabilidade à execução da ferramenta do seu agente. Esse rastreamento captura telemetria para fins de monitoramento e auditoria.

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)

Inferência

Os exemplos a seguir mostram como instrumentar chamadas de inferência de modelos de IA com rastreamento de observabilidade para capturar o uso de tokens, detalhes do modelo e metadados de resposta.

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)

Saída

Use este escopo para cenários assíncronos onde InvokeAgentScope, ExecuteToolScope ou InferenceScope não possam capturar dados de saída sincronamente. Comece OutputScope como um intervalo filho para registrar as mensagens de saída finais após a conclusão do escopo pai.

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

Valide localmente

Para verificar se você integrou com sucesso com o SDK de observabilidade, examine os logs do console gerados pelo seu agente e os logs do SDK de observabilidade.

Defina a variável de ambiente ENABLE_A365_OBSERVABILITY_EXPORTER como false. Essa configuração exporta os spans (traces) para o console.

Para investigar falhas de exportação, habilite o log detalhado definindo ENABLE_A365_OBSERVABILITY_EXPORTER para true e configure o log de depuração na inicialização do aplicativo:

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)

Mensagens importantes de 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.

Exibindo logs exportados

Para visualizar a telemetria do agente no Microsoft Purview ou Microsoft Defender, certifique-se de atender aos seguintes requisitos:

Validar para publicação em lojas

Importante

Para validação bem-sucedida da loja, seu agente deve implementar os escopos InvokeAgentScope, InferenceScope e ExecuteToolScope. Esses três escopos são necessários para publicação.

Antes de publicar, use logs de console para validar sua integração de observabilidade para o agente, implementando os escopos necessários invoke agent, execute tool, inference, e output. Depois, compare os logs do seu agente com as seguintes listas de atributos para verificar se todos os atributos necessários estão presentes. Capture atributos em cada escopo ou através do criador de contexto, e inclua atributos opcionais segundo seu critério.

Para mais informações sobre os requisitos de publicação em loja, consulte as diretrizes de validação da loja.

atributos de InvokeAgentScope

A lista a seguir resume os atributos de telemetria necessários e opcionais registrados quando você inicia um 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"
    }

atributos de ExecuteToolScope

A lista a seguir resume os atributos de telemetria necessários e opcionais registrados quando você inicia um 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"
    }

atributos de InferenceScope

A lista a seguir resume os atributos de telemetria necessários e opcionais registrados quando você inicia um 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"
    }

atributos de OutputScope

A lista a seguir resume os atributos de telemetria necessários e opcionais registrados quando você inicia um OutputScope. Use esse escopo para cenários assíncronos em que o escopo pai não pode capturar dados de saída de forma síncrona.

"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"
    }

Teste seu agente com observabilidade

Depois de implementar a observabilidade em seu agente, teste-a para garantir que ela capture a telemetria corretamente. Siga o guia de testes para configurar seu ambiente. Em seguida, concentre-se principalmente na seção Exibir logs de observabilidade para validar se sua implementação de observabilidade está funcionando conforme o esperado.

Verificação:

  • Vá para: https://admin.cloud.microsoft/#/agents/all
  • Selecione sua agente > Atividade
  • Você vê sessões e invocações de ferramentas

Troubleshooting

Esta seção descreve problemas comuns ao implementar e utilizar observabilidade.

Problema Description
Os dados de observabilidade não são exibidos Nenhuma telemetria é visível porque a exportação não está habilitada, a configuração está incorreta ou a resolução do token falha.
ID do locatário ou do agente ausente – trechos ignorados Spans são descartados antes da exportação quando os atributos de identidade necessários para o particionamento estão ausentes.
Falha de resolução de token – exportação ignorada ou não autorizada A exportação falha quando o resolver não retorna um token ou encontra uma exceção.
HTTP 401 Não Autorizado A autenticação é bem-sucedida do ponto de vista sintático, mas o token é inválido para a ingestão devido ao escopo, tipo ou expiração.
HTTP 403 Proibido O acesso é negado devido a lacunas na licença do locatário, falta de registro no Agent 365 ou falta de permissão de observabilidade quando é necessária.
HTTP 403 Proibido – Incompatibilidade da ID do agente A solicitação é rejeitada quando a identidade do agente na URL não corresponde à identidade representada pelo token.
Erros HTTP 429 ou 5xx – Erros transitórios A limitação temporária ou falhas no serviço interrompem a exportação e podem exigir ajustes nas tentativas de repetição.
Tempo limite de exportação Os lotes de telemetria ultrapassam os limites de tempo configurados devido à latência da rede ou ao tempo de resposta do ponto de extremidade.
A exportação é bem-sucedida, mas a telemetria não aparece no Defender ou no Purview A ingestão é concluída, mas a visibilidade nas etapas posteriores sofre atraso ou é bloqueada devido a pré-requisitos do produto.

Dica

O Guia de Solução de Problemas do Agente 365 contém recomendações de resolução de problemas de alto nível, melhores práticas e links para conteúdo de solução de problemas para cada parte do ciclo de desenvolvimento do Agente 365.

Os dados de observabilidade não aparecem

Sintomas:

  • O agente está correndo
  • Sem telemetria no centro administrativo
  • Não consigo ver a atividade dos agentes

Causa raiz:

  • A observabilidade não é ativada
  • Erros de configuração
  • Problemas do resolvedor de tokens

Soluções: Tente os seguintes passos para resolver o problema:

  • Verificar se o exportador de observabilidade está habilitado

    Você deve habilitar explicitamente o exportador do Agente 365. Quando desabilitado, o SDK volta para um exportador de console e a telemetria não é enviada ao serviço. Para obter detalhes de configuração, consulte Configuração.

  • Verifique a configuração do resolver de tokens

    O exportador requer um resolvedor de token válido que retorne um token de observabilidade somente do aplicativo a cada solicitação de exportação. Se o resolver estiver ausente, não retornar nenhum token ou gerar uma exceção, a exportação não envia uma solicitação. Certifique-se de que seu código implemente o resolvedor de tokens. Para obter detalhes, consulte Resolvedor de tokens.

  • Verifique se há erros nos logs

    Habilite o log detalhado e use o comando az webapp log tail para buscar nos logs por erros relacionados à observabilidade. Para obter detalhes sobre como habilitar o logging para cada plataforma, consulte Validar localmente.

    # Look for observability-related errors
    az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
    
  • Verificar exportação de telemetria

    Confirme que a telemetria foi gerada e exportada conforme esperado.

    • Adicione um exportador de console e verifique se a telemetria é gerada localmente. Para obter detalhes sobre como usar o exportador de console e validar a saída, consulte Validar localmente.

ID do locatário ou ID do agente ausente – intervalos ignorados

Sintomas: O sistema descarta silenciosamente intervalos e nunca os exporta. Alguns SDKs registram uma contagem de spans ignorados ou uma mensagem como "Nenhum span com a identificação de locatário/agente encontrada". Outros os descartam sem logar.

Solução:

  • Antes da exportação, as partições do SDK abrangem a identidade do locatário e do agente. O sistema descarta segmentos que não têm uma ID de locatário ou uma ID de agente e nunca os envia para o serviço.
  • Verifique se BaggageBuilder está configurado com a ID do locatário e a ID do agente antes de criar intervalos. Esses valores se propagam por meio do contexto OpenTelemetry e são anexados a todos os intervalos criados dentro do escopo da bagagem. Para a API específica da plataforma, consulte atributos de bagagem.
  • Confirme se a TurnContext atividade tem um destinatário válido com a identidade do agente, caso você use o middleware de bagagem ou o auxiliar de contexto do pacote de integração de hospedagem para preencher essas IDs.

Falha no processamento de token – exportação ignorada ou não autorizada

Sintomas: O resolver de tokens retorna null, retorna um token vazio ou lança um erro. A exportação falha sem enviar uma solicitação, e o exportador não recorre à rota delegada.

Solução:

  • Forneça um resolver que retorne o token final de observabilidade somente de aplicativo para a instância e o tenant do agente exportador.
  • Verifique se a ID do locatário correta e a ID do agente são usadas para BaggageBuilder, porque esses valores são passados para o resolvedor de token.
  • Verifique o comportamento de inicialização específico da linguagem. Node.js falha na configuração quando o exportador Agent 365 está ativado sem um resolvedor, .NET falha na construção do exportador e Python retorna ao exportador do console quando nenhum resolvedor está configurado.
  • Verifique se seu resolver valida o token antes de devolvê-lo. Deve rejeitar tokens delegados com um claim scp e tokens emitidos para o público errado.

HTTP 401 Não Autorizado

Sintomas: A exportação falha com HTTP 401. O exportador não tenta novamente esse erro.

Solução:

  • Verifique se o claim aud do token é 9b975845-388f-4429-889e-eab1ef63949c ou api://9b975845-388f-4429-889e-eab1ef63949c.
  • Verifique se o resolvedor de tokens não está retornando um token de usuário delegado, um token com uma reivindicação scp, um token para um público incorreto ou um token expirado.
  • Confirme que o resolvedor retorna o token agente final de instância, e não a asserção intermediária do blueprint.

HTTP 403 Proibido

Sintomas: A exportação falha com HTTP 403. O exportador não tenta novamente esse erro.

Causa raiz: Um erro HTTP 403 pode ter causas diferentes. Verifique as resoluções a seguir na ordem correta.

Solução:

  • Missing license — verifique se seu locatário tem uma das seguintes licenças atribuídas no Centro de administração do Microsoft 365:

    • Teste - Microsoft 365 E7
    • Microsoft 365 E7
    • Microsoft Agent 365 Frontier
  • A instância do agente não está registrada — A rota S2S aceita um token somente de aplicativo sem a função Agent365.Observability.OtelWrite apenas de uma instância de agente registrada no Agent 365. Caso contrário, retorna HTTP 403 insufficient_scope. Para agentes blueprint, a365 setup all registra a instância do agente. Para tentar novamente um registro falhado, execute a365 setup all --agent-registration-only. Criar uma identidade Microsoft Entra, por si só, não registra a instância do agente.

  • O token não é exclusivo de aplicativos — Verifique se o token não inclui uma claim scp. A rota S2S requer um token somente de aplicativo.

  • Identidade não registrada não possui o papel do aplicativo — Identidades não registradas, incluindo os registros padrão de aplicativos que os agentes do motor personalizado usam, precisam do Agent365.Observability.OtelWrite papel do aplicativo. Para concedê-la, veja Conceder a permissão.

  • Agente SDK 1.x na rota delegada — A rota delegada precisa da permissão delegada Agent365.Observability.OtelWrite e do consentimento do administrador, que a365 setup all não configura para agentes de blueprint. Atualize para o SDK 2.0 ou conceda a permissão.

  • O ID do agente não corresponde ao token — Veja HTTP 403 Forbidden - Incompatibilidade no ID do agente.

HTTP 403 Proibido — incompatibilidade no ID do agente

Sintomas: A exportação falha com HTTP 403 e uma mensagem do servidor semelhante a 403 Forbidden, com falhas agent-ID-mismatch ao chamar os endpoints de rastreamento do Agent 365.

Causa principal: Esse erro ocorre quando você usa o ID do cliente do blueprint em vez do ID do cliente da instância do agente ao configurar os detalhes do agente. A ID do agente na URL de exportação não corresponde à identidade autorizada pelo token, portanto, o ponto de extremidade de rastreamento rejeita a solicitação.

Solução:

  • Verifique se a ID do locatário foi adicionada à lista de locatários permitidos do Agente 365.
  • Defina os detalhes do agente usando o ID do cliente da instância do agente (não o ID do cliente do blueprint).
  • Verifique a URL de exportação gerada — ela é registrada se você habilitar o logger. Confirme se o ID do agente na URL corresponde ao ID do cliente da instância de agente.
  • Para habilitar o registro de diagnóstico para cada SDK, consulte Validar localmente.

Erros HTTP 429 ou 5xx – Erros transitórios

Sintomas: A exportação falha com um código de status HTTP transitório, como 429 ou 5xx.

Solução:

  • Esses erros geralmente são transitórios e resolvidos por conta própria. Os SDKs Python e JavaScript realizam tentativas automáticas novamente em códigos de status HTTP 408, 429 e 5xx até três vezes com recuo exponencial. O SDK do .NET não tenta novamente automaticamente.
  • Se os erros persistirem, verifique o painel de integridade do serviço.
  • Considere reduzir a frequência de exportação aumentando o atraso agendado entre lotes ou aumentando o tamanho máximo do lote de exportação. Para obter opções de configuração por plataforma, consulte a Agent365ExporterOptions tabela em Configuração.

Tempo limite de exportação

Sintomas: Tempo limite de tentativas de exportação.

Solução:

  • Verifique a conectividade de rede com o endpoint de observabilidade.
  • Os padrões de tempo limite variam de acordo com a plataforma. O tempo limite de solicitação HTTP padrão é de 30 segundos. Alguns SDKs também têm um tempo limite global separado do exportador que abrange todo o ciclo de exportação, incluindo novas tentativas. Para obter as propriedades exatas e os padrões por plataforma, consulte a Agent365ExporterOptions tabela em Configuração.
  • Se os tempos limite ocorrerem com frequência, aumente o valor de tempo limite relevante nas opções do exportador.

A exportação é bem-sucedida, mas a telemetria não aparece no Defender ou no Purview

Symptoms: Os logs indicam uma exportação bem-sucedida, mas a telemetria não está visível no Microsoft Defender ou Microsoft Purview.

Solução:

  • Verifique se você atende aos pré-requisitos para exibir logs exportados. Para o Purview, a auditoria deve ser ativada. Para Defender, você deve configurar a busca avançada. Para obter mais informações, consulte Visualização de logs exportados.
  • A telemetria pode levar vários minutos para ser atualizada após uma exportação bem-sucedida. Aguarde até que os dados apareçam antes de investigar mais.

Para saber mais sobre como testar a observabilidade, confira: