Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La Distribución de Microsoft OpenTelemetry es una distribución unificada de observabilidad, que proporciona una única experiencia de incorporación para recopilar trazas, métricas y registros de aplicaciones agénticas y no agénticas. Permite la observabilidad para Microsoft Agent 365, Microsoft Foundry, Azure Monitor y cualquier backend compatible con el protocolo OpenTelemetry (OTLP). La distribución admite .NET, Node.js y Python, y reemplaza la configuración fragmentada en varias pilas de observabilidad, por una importación y una llamada de configuración.
Beneficios clave
Microsoft OpenTelemetry Distro proporciona los siguientes beneficios:
- Un solo paquete, una sola API: reemplaza varios paquetes de exportadores y de instrumentación con una sola dependencia.
- Compatibilidad con múltiples back-end: enviar telemetría a Azure Monitor, cualquier punto de conexión compatible con el Protocolo OpenTelemetry (OTLP), como Datadog, Grafana o New Relic, y Microsoft Agent 365 al mismo tiempo.
- Instrumentación integrada: use instrumentación automática para HTTP, bases de datos, SDK de Azure, Azure Functions y más, sin configuración adicional.
- Basado en estándares: se basa en OpenTelemetry, el marco de observabilidad estándar del sector.
- Plantilla mínima: Asegúrese de agregar una importación y una llamada de función a su punto de entrada de la aplicación.
Instalación y configuración
Esta guía indica cómo agregar observabilidad a su aplicación con Microsoft OpenTelemetry Distro. La Distribución recopila automáticamente trazas, métricas y registros mediante instrumentaciones integradas, y exporta la telemetría a Azure Monitor, a cualquier punto de conexión compatible con el protocolo OpenTelemetry (OTLP) o a Microsoft Agent 365.
Instalar biblioteca
Para empezar con la Distribución Microsoft OpenTelemetry, instale la biblioteca adecuada para su plataforma de desarrollo utilizando el gestor de paquetes de su idioma.
Requisitos previos: Python 3.10 o posterior.
pip install microsoft-opentelemetry
Configuración
El exportador de Agent 365 no utiliza una cadena de conexión. Detecta su punto de conexión automáticamente en función del inquilino. Para habilitar la exportación a Agent 365, establezca el destino del exportador y proporcione un resolvedor de token que devuelva un token de acceso para un id. de agente y un id. de inquilino determinados.
Llama a use_microsoft_opentelemetry() para habilitar la observabilidad.
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
),
)
Para la resolución personalizada de tokens (en lugar de la resolución de tokens predeterminada), consulte Solución de tokens manual.
Puede personalizar el comportamiento del exportador, pasando los kwargs opcionales a365_* a use_microsoft_opentelemetry().
| Parámetro | Descripción | Valor predeterminado |
|---|---|---|
a365_use_s2s_endpoint |
Cuando True usa la ruta de acceso del punto de conexión de servicio a servicio. |
False |
a365_max_queue_size |
Tamaño máximo de cola para el procesador por lotes. | 2048 |
a365_scheduled_delay_ms |
Retraso en milisegundos entre lotes de exportación. | 5000 |
a365_exporter_timeout_ms |
Tiempo de espera en milisegundos para la operación de exportación. | 30000 |
a365_max_export_batch_size |
Tamaño máximo de lote para operaciones de exportación. | 512 |
Propagar contexto
Para mantener la observabilidad en operaciones distribuidas de Agent 365, propague el contexto. Cuando propaga el contexto a través de sus agentes y servicios, se asegura de que las trazas, los registros y las métricas estén correctamente correlacionados a lo largo de todo el ciclo de vida de la solicitud. Esta correlación es necesaria para una experiencia de supervisión completa y eficaz en Microsoft Agent 365.
Atributos de equipaje
Use BaggageBuilder para establecer información contextual que fluye a través de todos los intervalos de una solicitud.
El SDK implementa una SpanProcessor que copia de todas las entradas de equipaje no vacías en intervalos recién iniciados sin sobrescribir los atributos existentes.
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
Para rellenar automáticamente el BaggageBuilder desde el TurnContext use el asistente populate en el paquete microsoft-opentelemetry. Este asistente extrae automáticamente los detalles del autor de la llamada, el agente, el inquilino, el canal y la conversación de la actividad.
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 de equipaje
Si el agente usa el paquete de integración de hospedaje, registre el middleware de equipaje para rellenar automáticamente el equipaje para cada solicitud entrante. Este paso elimina la necesidad de llamar a BaggageBuilder manualmente en cada gestor de actividades.
En Python, registre el middleware de equipaje a través de ObservabilityHostingManager.configure() en lugar de hacerlo directamente en el adaptador.
from microsoft.opentelemetry.a365.hosting import ObservabilityHostingManager, ObservabilityHostingOptions
options = ObservabilityHostingOptions(enable_baggage=True)
ObservabilityHostingManager.configure(adapter.middleware_set, options)
El middleware omite la configuración de la información de contexto para las respuestas asincrónicas (eventos ContinueConversation) para evitar sobrescribir la información de contexto que la solicitud de origen ya ha establecido.
Validar que los datos fluyen en el producto
Para ver la telemetría de agentes en Microsoft Purview o Microsoft Defender, asegúrese de que se cumplan los siguientes requisitos:
- Microsoft Purview: la auditoría debe estar activada para su organización. Para obtener instrucciones, consulte Activar o desactivar la auditoría.
-
Microsoft Defender: es necesario configurar la búsqueda avanzada para acceder a la tabla
CloudAppEvents. Para obtener más información, consulte la tabla CloudAppEvents en el esquema de búsqueda avanzada.
Instrumentación automática
La Distribución de OpenTelemetry de Microsoft combina canalizaciones estándar de OpenTelemetry con instrumentación curada por Microsoft. La Distribución puede recopilar telemetría de aplicaciones, infraestructura y agentes o IA generativa en función del lenguaje y la configuración.
| Categoría | Lo que abarca |
|---|---|
| Canalizaciones de señal | Seguimientos, métricas y registros. |
| Detección de recursos | Contexto de tiempo de ejecución de servicio, host, nube y Azure donde sea compatible. |
| Instrumentación de infraestructura | HTTP, ASP.NET Core, SDK de Azure, clientes de base de datos y marcos de registro donde se admiten. |
| Instrumentación de IA generativa | OpenAI, Azure OpenAI, Kernel semántico, LangChain, SDK de OpenAI Agents y Agent Framework cuando se admiten. |
| Ámbitos de agentes manuales | Invocación de agentes, ejecución de herramientas, inferencia y telemetría de salida donde se admita. |
| Exportadores y procesadores | Azure Monitor, Microsoft Agent 365, OTLP, salida de consola, procesadores de trazas, procesadores de registro y lectores de métricas. |
Cobertura de instrumentación
| Language | Instrumentación común de aplicaciones | Instrumentación común de agentes e IA generativa |
|---|---|---|
| Python | Recursos, procesadores, lectores, registros, métricas y trazas de OpenTelemetry. | Kernel semántico, SDK de agentes de OpenAI, Agent Framework, LangChain, herramientas de Microsoft Agent 365 y ámbitos de Microsoft Agent 365. |
| Node.js | HTTP, SDK de Azure, Azure Functions, MongoDB, MySQL, PostgreSQL, Redis, Bunyan y Winston. | SDK de agentes de OpenAI, LangChain, contexto del Microsoft Agent 365 y ámbitos de Microsoft Agent 365. |
| .NET | ASP.NET Core, HttpClient, SQL Client, SDK de Azure, detección de recursos, métricas y registros. | Kernel semántico, SDK de agentes de OpenAI y Azure OpenAI, Agent Framework, herramientas de Microsoft Agent 365 y ámbitos de Microsoft Agent 365. |
La instrumentación automática escucha las señales de telemetría emitidas por bibliotecas y marcos admitidos. La instrumentación manual se utiliza cuando una aplicación necesita describir operaciones específicas del agente, como invocación, ejecución de herramientas, inferencia o salida asincrónica.
Agregue orígenes, contadores, procesadores o lectores personalizados de OpenTelemetry cuando su aplicación emita telemetría no cubierta por la instrumentación integrada.
Importante
La instrumentación automática rellena solo los atributos OpenTelemetry estándar. No incluye todos los atributos requeridos por Agent 365. Debe agregar atributos específicos de Microsoft a través de BaggageBuilder. Para ver qué atributos se requieren, consulte Atributos de validación de almacén.
Bibliotecas de instrumentación integradas
La instrumentación automática escucha la telemetría emitida por marcos admitidos y la reenvía a través de la canalización de OpenTelemetry de la distribución. En escenarios de agente, establezca equipaje como el identificador de inquilino y el identificador del agente, antes de que el marco instrumentado cree intervalos.
| marco | Python | Node.js | .NET |
|---|---|---|---|
| Kernel semántico | Admitido | No se admite | Admitido |
| OpenAI y el SDK de OpenAI Agents | Admitido | Compatible | Admitido |
| Agent Framework | Admitido | No se admite | Admitido |
| LangChain | Admitido | Admitido | No aparece en la lista |
Kernel semántico
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},
},
)
Instrumentación manual
Utilice instrumentación manual cuando la instrumentación automática no describa el funcionamiento del agente con suficiente detalle. Los ámbitos manuales permiten a una aplicación describir actividades comunes de agentes de manera coherente entre idiomas.
| Ámbito | Se usa para |
|---|---|
InvokeAgentScope |
El inicio y la finalización de una invocación de agente. |
ExecuteToolScope |
Una llamada de herramienta realizada por un agente. |
InferenceScope |
Una operación de inferencia de modelo de IA. |
OutputScope |
Salida que debe registrarse una vez que el ámbito de origen se haya completado. |
Reutilizar los mismos valores de identidad de solicitud y de agente en los ámbitos de una solicitud para que la telemetría relacionada pueda correlacionarse.
Invocación de 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."])
Ejecución de herramientas
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)
Inferencia
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"])
Opción 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 documentación del producto debe definir los requisitos de validación específicos del producto para estos ámbitos.
Validación local
La validación local confirma que la aplicación produce telemetría antes de que se valide un destino específico del producto. Utiliza la salida de consola o un punto de conexión OTLP local para comprobar que se crean trazas, métricas y registros.
Valida con un punto de conexión OTLP local
Configure la Distribución para enviar telemetría a un colector local o a otro punto de conexión compatible con OTLP.
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
from microsoft.opentelemetry import use_microsoft_opentelemetry
use_microsoft_opentelemetry()
Validar con salida local
Use la salida local cuando quiera confirmar la instrumentación antes de enviar telemetría a un destino remoto.
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.
Revise la salida local para intervalos de orígenes esperados, como solicitudes HTTP, llamadas a OpenAI o Azure OpenAI, ámbitos de invocación de agentes, ámbitos de ejecución de herramientas o ámbitos de inferencia. La validación específica del destino se encuentra en la documentación del producto correspondiente a ese destino.
Configurar manualmente la autenticación
Al usar el exportador del Agent 365, debe proporcionar un mecanismo para suministrar un token de autenticación. El solucionador de tokens funciona por lote de exportación, mediante el identificador del agente y el identificador de inquilino del contexto de equipaje activo. La Distribución admite dos enfoques.
Sugerencia
Si estás desarrollando agentes con el SDK de agentes de Microsoft 365, consulte Configuración de autenticación de observabilidad para SDK de Agente para obtener instrucciones paso a paso sobre cómo configurar la adquisición de tokens OBO y S2S tanto para agentes agénticos como no agénticos.
Resolución manual de tokens
Utilice un solucionador manual cuando adquiera tokens fuera de la canalización de Agent Framework, cuando desarrolle aplicaciones que no sean de Agent Framework o cuando use autenticación servicio-a-servicio (S2S) (flujo de credenciales del cliente). Los agentes pueden generar un token por sí mismos, por ejemplo, usando Biblioteca de autenticación de Microsoft (MSAL) o cualquier otro método de adquisición de tokens, pero deben asegurarse de que el token tenga el alcance de observabilidad correcto (api://9b975845-388f-4429-889e-eab1ef63949c/Agent365.Observability.OtelWrite).
Nota
Para la autenticación de servicio a servicio (S2S), debe utilizar este enfoque manual de resolución de tokens. La caché de tokens agente solo admite flujos de autenticación en nombre de (OBO).
Los siguientes ejemplos muestran el patrón del solucionador de tokens OBO (on-behalf-of): el agente adquiere un token de usuario mediante el administrador de autenticación agéntica y lo intercambia por un token con alcance de observabilidad. Para ejemplos de S2S (servicio a servicio) y una comparación de autenticación OBO vs S2S, consulte Configuración de Autenticación de Observabilidad para el SDK de Agentes.
El solucionador debe ser sincrónico. Adquiera el token en su gestionador de actividad asíncrono (o mediante MSAL) y almacénalo en caché para el solucionador.
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",
)
Caché de tokens de agente con aplicaciones de Agent Framework
Para las aplicaciones de Agent Framework que usan autenticación on-behalf-of (OBO), la distribución registra automáticamente IExporterTokenCache<AgenticTokenStruct> mediante DI cuando no se configura un TokenResolver personalizado. El agente llama a RegisterObservability() en tiempo de ejecución para proporcionar credenciales y la memoria caché controla la adquisición y actualización de tokens.
Nota
Este enfoque solo admite flujos de autenticación en nombre de (OBO). Para la autenticación de servicio a servicio (S2S), use el solucionador de tokens manual en su lugar.
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,
)
Atributos de validación de almacén
Para una validación del almacén con éxito, el agente debe implementar InvokeAgentScope, InferenceScope y ExecuteToolScope. Cada ámbito corresponde a una operación de intervalo en el esquema canónico:
| Ámbito del SDK | Operación de intervalo | Código de referencia universal |
|---|---|---|
InvokeAgentScope |
invoke_agent |
IA |
ExecuteToolScope |
execute_tool |
ET |
InferenceScope |
chat |
CH |
OutputScope |
output_messages |
OM |
Para obtener las listas completas de atributos requeridos y opcionales por alcance —incluyendo la semántica de cada atributo, orientación para elegir valores y cuáles atributos pueden consultarse mediante la búsqueda avanzada de Microsoft Defender— consulte la referencia de atributos de observabilidad de Agent 365. La columna Aplica a identifica a qué ámbito pertenece cada atributo, y la columna Obligatorio distingue los atributos obligatorios (M) de los opcionales (O).
Prueba del agente con observabilidad
Tras implementar la observabilidad, compruebe que se esté capturando la telemetría:
- Vaya a
https://admin.cloud.microsoft/#/agents/all. - Seleccione el agente y luego, Actividad.
- Compruebe que aparecen sesiones y llamadas a herramientas.
Aplicaciones de ejemplo y configuración avanzada
Para ejemplos funcionales y opciones avanzadas de configuración, consulte los repositorios de GitHub para cada idioma:
Solución de problemas
Esta sección describe problemas comunes al implementar y utilizar la Distribución Microsoft OpenTelemetry con Agent 365.
| Problema | Description |
|---|---|
| Los datos de observabilidad no aparecen | No hay telemetría visible porque la exportación de Agent 365 no está habilitada, la configuración está incompleta o falla la resolución del token. |
| Falta el id. de inquilino o el del agente: intervalos omitidos | Los tramos se filtran antes de la exportación cuando faltan los atributos de identidad obligatorios del inquilino o del agente. |
| Error de resolución de tokens: exportación omitida o no autorizada | La exportación se omite o se rechaza cuando el solucionador de tokens no devuelve ningún token o presenta errores durante la adquisición del token. |
| HTTP 401 No autorizado | Las solicitudes llegan al servicio, pero la autenticación falla porque el token no es válido, ha expirado o es para la audiencia equivocada. |
| HTTP 403 Prohibido | Se produce un error en la autorización debido a que faltan licencias de inquilino o faltan permisos de escritura de observabilidad. |
| HTTP 403 Prohibido — Id. de agente no coincide | El servicio rechaza la exportación cuando el id. del agente en la solicitud no coincide con la identidad del agente autorizado por el token. |
| Errores HTTP 429 o 5xx - Errores transitorios | La limitación temporal o la inestabilidad de back-end interrumpen la exportación y pueden requerir reintentos o ajuste por lotes. |
| Tiempo de espera de exportación | Las operaciones de exportación superan los límites de tiempo de espera debido a retrasos en la red o latencia de respuesta del punto de conexión. |
| La exportación es correcta, pero la telemetría no aparece en Defender ni en Purview. | La ingesta de datos es correcta, pero la visibilidad se retrasa o bloquea por los requisitos previos posteriores y los requisitos del esquema. |
Sugerencia
La Guía de solución de problemas de Agent 365 contiene recomendaciones generales, procedimientos recomendados y vínculos a recursos de solución de problemas para cada parte del ciclo de vida del desarrollo de Agent 365.
Los datos de observabilidad no aparecen
Síntomas:
- El agente está en ejecución
- No hay telemetría en el Centro de administración
- No se puede ver la actividad del agente
Causa principal:
- La exportación de Agent 365 no está habilitada
- Errores de configuración
- Problemas con el resolutor de tokens
Soluciones: pruebe los siguientes pasos para solucionar el problema:
Compruebe que la exportación de Agent 365 esté habilitada
Debe habilitar explícitamente el exportador de Agent 365. Cuando no se establece, la distribución podría revertir a un exportador de consola o no exportar nada. Habilitarlo en código:
from microsoft.opentelemetry import use_microsoft_opentelemetry use_microsoft_opentelemetry( enable_a365=True, a365_enable_observability_exporter=True, a365_token_resolver=my_token_resolver, )O establezca la variable de entorno:
export ENABLE_A365_OBSERVABILITY_EXPORTER=trueNota
ENABLE_A365_OBSERVABILITY_EXPORTERes una opción secundaria que solo surte efecto cuandoenable_a365=Truese establece en el código. También puede controlarlo a través del kwarga365_enable_observability_exporter.
Comprobar configuración de la resolución de tokens
El exportador requiere un solucionador de tokens válido que devuelva un token de portador para cada solicitud de exportación. Si falta el solucionador de tokens o devuelve
null, la exportación se omite silenciosamente.Habilitar la exportación en consola y comprobar la telemetría localmente
Agregue un exportador de consola para comprobar que la telemetría se está generando antes de llegar al punto de conexión de Agent 365:
Habilitar registro detallado
Revisa los registros para detectar errores de exportación
Use el
az webapp log tailcomando para buscar registros de errores relacionados con la observabilidad:az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
Falta el identificador de inquilino o el del agente: intervalos omitidos
Síntomas: el sistema descarta intervalos en silencio y nunca los exporta. Algunas plataformas registran un recuento de intervalos omitidos o un mensaje como No spans with tenant/agent identity found. Otros los descartan sin registro.
Resolución
- Antes de la exportación, la distribución divide los segmentos por las identidades de los inquilinos y de los agentes. Intervalos que carecen de un identificador de inquilino o de agente se quitan y nunca se envían al servicio.
- Asegúrese de que
BaggageBuilderestá configurado con el identificador de inquilino y el identificador del agente antes de crear intervalos. Estos valores se propagan a través del contexto de OpenTelemetry y se adjuntan a todos los intervalos creados dentro del ámbito del equipaje. Para la API específica de la plataforma, consulte Atributos de equipaje. - Si está usando el middleware de equipaje o activa el ayudante de contexto desde el paquete de integración de hospedaje, confirme que la actividad
TurnContexttiene un destinatario válido con la identidad del agente.
Error de resolución de tokens: exportación omitida o no autorizada
Síntomas: el resolvedor de tokens devuelve null o genera un error. Dependiendo de la plataforma, la exportación se omite por completo o falla con HTTP 401.
Resolución
- Se requiere el solucionador de tokens. Si falta, el exportador genera un error al iniciarse. Compruebe que se haya proporcionado un solucionador de tokens y devuelva un token de portador válido.
- Asegúrese de que el id. de inquilino y el id. de agente correctos se pasen a
BaggageBuilder, porque estos valores se envían al solucionador de tokens. - Para agentes hospedados en Azure, compruebe que la Identidad administrada tenga el permiso de API requerido para el ámbito de observabilidad.
- Para aplicaciones .NET que usan el paquete de hospedaje de Agent Framework, el intercambio de token se controla automáticamente a través de la inyección de dependencias. Si faltan tokens, confirme que
Microsoft.Agents.A365.Observability.Hostingestá instalado y registrado.
HTTP 401 No autorizado
Síntomas: la exportación falla con HTTP 401. El exportador no reintenta en caso de este error.
Resolución
- Compruebe que la audiencia del token coincide con el alcance del punto de conexión de observabilidad.
- Compruebe que el solucionador de tokens no esté devolviendo un token de usuario delegado, un token para una audiencia incorrecta o un token caducado.
HTTP 403 Prohibido
Síntomas: la exportación falla con HTTP 403. El exportador no reintenta en caso de este error.
Causa raíz: un error HTTP 403 puede tener diferentes causas. Revise las siguientes soluciones en orden.
Resolución
Licencia que falta: compruebe que su cliente tenga asignada una de las siguientes licencias en el Centro de administración de Microsoft 365:
- Prueba: Microsoft 365 E7
- Microsoft 365 E7
- Microsoft Agent 365 Frontier
Falta el permiso de
Agent365.Observability.OtelWrite— Otorgue el permiso a su identidad (Identidad administrada o registro de la aplicación). Sin ello, la exportación de telemetría falla con HTTP 403.
Conceder el permiso
Utilice cualquiera de estas opciones:
CLI de Agent 365
Requiere una cuenta de Administrador global; ejecute desde el directorio del proyecto del agente que contiene
a365.config.jsono utilice--agent-name.a365 setup permissions botO bien, sin un archivo de configuración:
a365 setup permissions bot --agent-name "<agent-name>"Entra Portal
No se requieren archivos de configuración; se necesita acceso de Administrador global al registro de la aplicación de plano técnico.
- Vaya al portal de Entra>Registros de aplicaciones> y seleccione su aplicación de plano técnico.
- Vaya a Permisos de API>Agregar un permiso>API que usa mi organización> busca
9b975845-388f-4429-889e-eab1ef63949c. - Seleccione Permisos delegados>, active
Agent365.Observability.OtelWrite>Agregar permisos. - Repita los pasos 2–3, esta vez seleccione Permisos de aplicación>, active
Agent365.Observability.OtelWrite>Agregar permisos. - Haga clic en Conceder consentimiento de administrador y confirme.
Tanto
Agent365.Observability.OtelWrite(Delegado) comoAgent365.Observability.OtelWrite(Aplicación) muestra el estadoGranted.
HTTP 403 Prohibido — Id. de agente no coincide
Síntomas: la exportación falla con HTTP 403 y un mensaje del servidor similar a 403 Forbidden, con errores de agent-ID-mismatch al llamar a los puntos de conexión de trazas de Agent 365.
Causa raíz: este error ocurre cuando usa el Id. del cliente de plano técnico en lugar del Id. del cliente de la instancia del agente al configurar los detalles del agente. El id. del agente en la URL de exportación no coincide con la identidad autorizada por el token, por lo que el punto de conexión de los seguimientos rechaza la solicitud.
Resolución
- Compruebe si el id. de inquilino se agrega a la lista de inquilinos permitidos del Agent 365.
- Establece los detalles del agente con el Id. de cliente de la instancia del agente (no el id. de cliente de plano técnico).
- Compruebe la URL de exportación que se genera: se registra si habilita el registrador. Confirme que el id. del agente en la URL coincida con el id. de cliente de la instancia del agente.
- Para habilitar el registro de diagnóstico por SDK, consulte Validación local.
Errores HTTP 429 o 5xx - Errores transitorios
Síntomas: la exportación falla con un código de estado HTTP transitorio como 429 o 5xx.
Resolución
- Estos errores suelen ser transitorios y se resuelven por sí solos. Las distribuciones de Python y JavaScript reintentan automáticamente la exportación cuando se reciben los códigos de estado HTTP 408, 429 y 5xx. La distribución .NET no reintenta automáticamente.
- Si persisten errores, revise el panel de estado del servicio.
- Considere reducir la frecuencia de exportación aumentando el retraso programado entre lotes o el tamaño máximo de lote de exportación. Para Python y JavaScript, utilice los parámetros
exporterOptionsoa365_*pertinentes según lo documentado en Repositorios de GitHub. Para .NET, useo.Agent365.Exporter.ScheduledDelayMillisecondsyo.Agent365.Exporter.MaxExportBatchSize.
Tiempo de espera de exportación
Síntomas: Se agota el tiempo de espera de los intentos de exportación.
Resolución
Compruebe la conectividad de red al punto de conexsión de observabilidad.
El tiempo de espera predeterminado para las solicitudes HTTP es de 30 segundos en todas las plataformas. Si los tiempos de espera ocurren con frecuencia, aumente el valor del tiempo de espera en las opciones del exportador.
use_microsoft_opentelemetry( enable_a365=True, a365_token_resolver=my_token_resolver, # No direct timeout kwarg — set via environment variable or exporterOptions if supported )Consulte el repositorio de Python para la lista completa de opciones
a365_*.
La exportación es correcta, pero la telemetría no aparece en Defender ni en Purview.
Síntomas: los registros muestran una exportación exitosa (HTTP 200), pero la telemetría no es visible en Microsoft Defender ni en Microsoft Purview.
Resolución
- Compruebe que cumpla los requisitos previos para ver los registros exportados:
- Microsoft Purview: la auditoría debe estar activada para su organización. Vea Activación o desactivación de la auditoría.
-
Microsoft Defender: es necesario configurar la búsqueda avanzada para acceder a la tabla
CloudAppEvents. Consulte Tabla CloudAppEvents en el esquema de búsqueda avanzada.
- La telemetría puede tardar varios minutos en actualizarse tras una exportación correcta. Espere antes de continuar investigando.
- Verifique que las etiquetas contengan atributos
microsoft.tenant.idygen_ai.agent.idválidos. La ausencia de atributos de identidad provoca que los intervalos sean descartados en el servidor, incluso si la exportación HTTP devuelve 200.
Contenido relacionado
- Conceptos de observabilidad de Agent 365: flujo de datos, modelos de identidad, autenticación, ámbitos y límites aplicables a cada ruta de integración.
- Referencia de atributos de observabilidad de Agent 365: esquema canónico de atributos de intervalos al que debe ajustarse todo intervalo ingerido por Agent 365.