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.
Note
Las características de este artículo son impulsadas por el arnés estándar, que utiliza las opciones de facturación descritas en Licencias para agentes alimentados por el arnés estándar. Aprende cómo acceder a las funciones estándar en Access agentes estándar y flujos de agentes.
[Este artículo es documentación preliminar y está sujeto a cambios.]
Utiliza Aplicación de Azure Insights para monitorizar las trazas de agentes de Copilot Studio exportadas desde un entorno gestionado. Después de configurar la exportación, utiliza Azure Monitor y Application Insights para validar las ejecuciones de agentes, monitorizar la ejecución de nodos y herramientas, crear alertas y crear consultas y paneles personalizados para análisis operativo.
Note
- Tras la vista previa privada, las invocaciones del agente raíz (
invoke_agent) se emiten ahora comodependencies(junto con todos los demás spans), en lugar derequests. Como resultado, las trazas de invocación raíz de agentes pueden seguir apareciendo en larequeststabla hasta que se complete el despliegue global. - Para evaluar esta función de vista previa utilizando la última estrategia y capacidades de telemetría, puedes probar en un entorno no productivo con el ciclo de lanzamiento anticipado activado.
- Esta función se está desplegando actualmente a nivel global y puede que aún no esté completamente disponible en vuestros entornos.
- Esta función está disponible solo para entornos gestionados.
- Solo los registros de los agentes que se construyen en Copilot Studio, excluyendo los agentes declarativos, están disponibles en Application Insights.
- Para adoptar únicamente una estrategia Application Insights a nivel de entorno para la telemetría de agentes de Copilot Studio, las organizaciones pueden optar por desactivar la telemetría de Application Insights a nivel de agente.
Este artículo explica cómo configurar la exportación a nivel de entorno de los trazos de agentes de Copilot Studio a Aplicación de Azure Insights a través del centro de administración de Power Platform.
Importante
Este artículo contiene la documentación de la versión preliminar de Microsoft Copilot Studio y está sujeto a modificaciones.
Las características en versión preliminar no están pensadas para usarse en producción y pueden tener una funcionalidad limitada. Estas características están disponibles antes del lanzamiento oficial para que pueda tener acceso anticipado y proporcionar comentarios.
Si está creando un agente listo para producción, consulte Información general sobre Microsoft Copilot Studio.
Prerequisites
Antes de configurar la conexión de exportación de datos, completa los requisitos previos de Exportar datos a Application Insights.
Qué es lo que se exporta
Al habilitar la exportación, la telemetría de trazas de los agentes de Copilot Studio se envía a Application Insights en un formato de observabilidad orientado a trazas y alineado con OpenTelemetry que admite la investigación, los paneles y las alertas.
Los eventos del agente de Copilot Studio se escriben en la tabla dependencies como intervalos. Cada evento exportado (InvokeAgent, ExecuteTool y OutputMessages) corresponde a una sola fila de span (itemType = dependency).
Cómo los spans forman una traza
La telemetría sigue el modelo de trazas y spans de OpenTelemetry y se reconstruye a través de las columnas operation_Id y operation_ParentId:
- Cada turno del agente es su propia traza, identificada por un
operation_Idcompartido que permite a Application Insights agrupar el turno y mostrarlo en la vista de transacciones de extremo a extremo. - El
InvokeAgenttramo es la raíz de la traza de su giro. SuExecuteTooly losOutputMessagesconectados se anidan debajo de él, cada uno conoperation_ParentId=InvokeAgentdel intervaloid. - Una conversación se desarrolla a lo largo de varios turnos, cada uno registrado como una traza independiente. Agrupa o filtra por
gen_ai.conversation.idpara volver a unir las intervenciones de una misma conversación. -
OutputMessagesLos spans no siempre emiten unaInvokeAgentraíz, lo que significa que pueden (por diseño) llegar sin un padre coincidente y aparecer como una traza independiente de un solo nodo.
Crear un paquete de exportación
Crea un paquete de exportación con el tipo de exportación configurado en Copilot Studio siguiendo las instrucciones en Crear un paquete de exportación de la documentación del centro de administración de Power Platform.
Validación de la configuración
Después de guardar la configuración de exportación, ejecuta una conversación de prueba con el agente y confirma que la telemetría llega a Application Insights. La entrega de telemetría puede tardar hasta 24 horas en nuevas configuraciones. Valide que:
- Los spans de agente aparecen en la tabla
dependencies. - Los segmentos
InvokeAgent,ExecuteToolyOutputMessagesde cada turno comparten unoperation_Id.
Campos de Application Insights
La siguiente tabla muestra los campos de la dependencies tabla y qué campos se rellenan para cada uno de los tres eventos de agente exportados: InvokeAgent, ExecuteTool, y OutputMessages. La semántica de agentes y operaciones está en customDimensions (las gen_ai.* claves, como gen_ai.operation.name), no en las columnas nativas.
Campos de la tabla dependencies |
InvokeAgent | ExecuteTool | Mensajes de salida | Valor de ejemplo |
|---|---|---|---|---|
timestamp [UTC] |
✔️ | ✔️ | ✔️ | 6/11/2026, 5:02:13.501 AM |
id |
✔️ | ✔️ | ✔️ | 1111aaa1-aa11-11aa-11a1-a1aaa1111aa1 |
name |
✔️ | ✔️ | ✔️ | InvokeAgent / ExecuteTool / OutputMessages |
resultCode |
✔️ | ✔️ | ✔️ |
OK, ERROR |
type |
✔️ | ✔️ | ✔️ | GenAI |
target |
✔️ | ✔️ | ✔️ | GenAI |
data |
✔️ | ✔️ | ✔️ | invoke_agent / execute_tool / output_messages |
success |
✔️ | ✔️ | ✔️ | True |
duration |
✔️ | ✔️ | ✔️ | 0 |
performanceBucket |
✔️ | ✔️ | ✔️ | <250ms |
itemType |
✔️ | ✔️ | ✔️ | dependency |
customDimensions |
✔️ | ✔️ | ✔️ | Más información en las propiedades de customDimension |
operation_Id |
✔️ | ✔️ | ✔️ |
trace-1111aaa1-aa11-11aa-11a1-a1aaa1111aa1 (compartido por todos los segmentos del giro) |
operation_ParentId |
✔️ | ✔️ | ✔️ | La del turno InvokeAgentid para los tramos secundarios; la raíz de seguimiento para el tramo InvokeAgent |
client_Type |
✔️ | ✔️ | ✔️ | PC |
client_IP |
✔️ | ✔️ | ✔️ | 0.0.0.0 |
client_City |
✔️ | ✔️ | ✔️ | San Jose |
client_StateOrProvince |
✔️ | ✔️ | ✔️ | California |
client_CountryOrRegion |
✔️ | ✔️ | ✔️ | United States |
appId |
✔️ | ✔️ | ✔️ | 11111a1a-1111-1111-a111-1a1a1a11111a |
appName |
✔️ | ✔️ | ✔️ | - |
iKey |
✔️ | ✔️ | ✔️ | aa111a1a-a1aa-111a-111a-a111a111111a |
sdkVersion |
✔️ | ✔️ | ✔️ | dotnetc:2.23.0-29 |
itemId |
✔️ | ✔️ | ✔️ | a1a1111a-1111-11a1-1111-111111aa1a1a |
itemCount |
✔️ | ✔️ | ✔️ | 1 |
_ResourceId |
✔️ | ✔️ | ✔️ | - |
Propiedades de las dimensiones personalizadas
Cada tramo incluye el customDimensions JSON. La siguiente tabla muestra las claves comunes que aparecen en cada tramo:
| Key | Valor de ejemplo |
|---|---|
SpanId |
1111aaa1-aa11-11aa-11a1-a1aaa1111aa1 |
error.type |
404 |
Status.code |
1, 2 |
Status.message |
Descriptive failure message |
gen_ai.agent.id |
1aa11a11-1a1a-1a11-1a1a-1111aa1111aa |
gen_ai.agent.name |
MCS Agent |
gen_ai.conversation.id |
aaaaa111-1a1a-1111-1aa1-a111111a11a1 |
gen_ai.request.model |
Sonnet46 |
gen_ai.operation.name |
invoke_agent / execute_tool / output_messages |
env.id |
111a1aa1-a1aa-aaa1-a11a-11a111111111 |
microsoft.tenant.id |
11aaa111-1a11-1a1a-a111-aa1a111a111a |
microsoft.a365.agent.blueprint.id |
1111111a-aa11-1a11-a1a1-a11a1111a1a1 |
microsoft.a365.agent.platform.id |
111a1aa1-…_1a11111a-… |
microsoft.channel.name |
Copilot Studio Test Pane |
resource.provider |
copilot studio |
signal.category |
default |
a365.enabled |
True |
appinsights.enabled |
True |
user.id |
- |
user.email |
My.User@mytenant.onmicrosoft.com |
user.name |
My User |
client.address |
::ffff:00.00.00.00 |
telemetry.sdk.name |
A365ObservabilitySDK |
telemetry.sdk.language |
dotnet |
telemetry.sdk.version |
1.1.9.43597 |
Claves específicas para eventos
La siguiente tabla muestra las claves específicas de cada evento:
| Key | InvokeAgent | ExecuteTool | Mensajes de salida | Description |
|---|---|---|---|---|
gen_ai.input.messages |
✔️ | - | - | Matriz JSON de {role, parts:[{content, type}]}—el prompt de usuario |
gen_ai.output.messages |
- | - | ✔️ | Matriz JSON—la respuesta del agente |
gen_ai.tool.name |
- | ✔️ | - | Por ejemplo: workiqsharepoint:mcp_SharePointRemoteServer |
gen_ai.tool.type |
- | ✔️ | - | Por ejemplo: MCP - Power Platform Connector |
gen_ai.tool.call.id |
- | ✔️ | - | Identificador de invocación de herramienta |
gen_ai.tool.call.arguments |
- | ✔️ | - | Datos JSON enviados a la herramienta |
gen_ai.tool.call.result |
- | ✔️ | - | Datos JSON devueltos por la herramienta |
Descubre el esquema actual
El esquema documentado en este artículo podría evolucionar con el tiempo. En lugar de basarte únicamente en las tablas mencionadas anteriormente, utiliza las siguientes consultas para inspeccionar el esquema más reciente en vivo en tu propio entorno.
Lista de columnas nativas de la tabla
La siguiente consulta devuelve el esquema a nivel de columna de la dependencies tabla. Úsalo para confirmar columnas nativas disponibles al crear consultas, paneles de control o alertas.
dependencies
| getschema
| project ColumnName, ColumnType
| order by ColumnName asc
Descubre claves de dimensiones personalizadas (propiedades dinámicas)
La siguiente consulta lista todas las claves dentro del customDimensions JSON en la dependencies tabla: el nombre de la propiedad, en qué eventos del agente aparece (InvokeAgent, ExecuteTool, OutputMessages), y un valor de muestra. A diferencia del esquema de columnas nativo, estas propiedades son dinámicas, por lo que esta consulta se mantiene precisa a medida que el SDK añade nuevas gen_ai.* u otras claves. Úsalo como fuente viva de verdad para los atributos disponibles.
dependencies
| where timestamp > ago(7d)
| mv-expand Key = bag_keys(customDimensions) to typeof(string)
| summarize Events = make_set(name), SampleValue = take_any(tostring(customDimensions[Key])) by Key
| order by Key asc
Supervisar la telemetría exportada
Usa los registros de Logs de Application Insights para consultar la actividad del agente e investigar la ejecución del agente o de herramientas. Toda la telemetría exportada se almacena en la tabla dependencies en forma de spans:
- Cada turno del agente es una traza, agrupada por un
operation_Idcompartido. - El
InvokeAgentspan es la raíz de la traza;ExecuteToolyOutputMessagesspans se anidan bajo él medianteoperation_ParentId. - Agrupa por
gen_ai.conversation.idpara agrupar en un hilo varios turnos de la misma conversación, y divide ese ID en_para incluir trazas de subagentes.
Paneles de Agentes en versión preliminar
Además de los Logs, Application Insights ofrece vistas integradas de Agentes (vista previa) que visualizan la telemetría GenAI exportada sin necesidad de escribir consultas Kusto. A medida que Copilot Studio escribe sus intervalos en la tabla dependencies, estos paneles leen esos datos directamente:
-
Ejecuciones de agentes: Enumera las invocaciones de agentes creadas a partir de los
InvokeAgenttramos, con su duración, éxito y la conversación a la que pertenece cada ejecución. Existen algunas limitaciones; Aprende más en Limitaciones y consideraciones conocidas. -
Herramientas: Agrega los
ExecuteToolspans para mostrar qué herramientas llaman los agentes, con qué frecuencia y cómo actúan. - Modelos: Resume el uso del modelo a lo largo de las ejecuciones, mostrando los modelos invocados y sus patrones de llamada.
Analizar la telemetría de agentes con Application Insights
Después de conectar tu entorno a Application Insights, este registra los datos de telemetría del agente cuando los usuarios interactúan con el agente, incluyendo durante las pruebas dentro de Copilot Studio. Para ver los datos de telemetría registrados, ve a la sección de Logs de tu recurso Application Insights en Azure. Aquí, puedes usar consultas Kusto para consultar y analizar tus datos. Aprende más en Consultas de ejemplo.
Consultas de ejemplo
Los siguientes ejemplos de consultas de Kusto reconstruyen las conversaciones de los agentes de Copilot Studio a partir de la dependencies tabla en Application Insights. Como cada span comparte una traza operation_Id en cada turno, las consultas ordenan los spans empezando por la raíz (el span InvokeAgent antes que sus spans hijos) dentro de cada traza.
Consulta 1: Devuelve un trazo completo para un ID de conversación específico
Esta consulta devuelve todos los spans de una conversación conocida, ordenados cronológicamente, con cada span raíz situado antes que sus spans hijo. Reemplaza el marcador ID de conversación por el ID de conversación de tu agente. Puedes encontrarlo introduciendo el siguiente comando mientras pruebas tu agente personalizado: /debug conversationid.
let LatestConvo = "<Conversation ID>";
dependencies
| where tostring(customDimensions["gen_ai.conversation.id"]) == LatestConvo
| order by operation_Id asc, iff(name == "InvokeAgent", 0, 1) asc, timestamp asc
| project timestamp, name, id, operation_Id,
operation_ParentId, duration, target, type, cloud_RoleName,
resultCode, customDimensions
Consulta 2: Obtener la conversación más reciente de un agente específico
Esta consulta encuentra la conversación más reciente de un agente nombrado dentro del periodo especificado. Devuelve cada tramo de esa conversación en el mismo orden cronológico, raíz primero. Sustituye el marcador de posición nombre del agente por el nombre de tu agente.
let Window = 7d;
let AgentName = "<Agent name>";
let LatestConvo = toscalar(
dependencies
| where timestamp > ago(Window)
| where tostring(customDimensions["gen_ai.agent.name"]) == AgentName
| where isnotempty(tostring(customDimensions["gen_ai.conversation.id"]))
| top 1 by timestamp desc
| project tostring(customDimensions["gen_ai.conversation.id"])
);
dependencies
| where timestamp > ago(Window)
| where tostring(customDimensions["gen_ai.conversation.id"]) == LatestConvo
| order by operation_Id asc, iff(name == "InvokeAgent", 0, 1) asc, timestamp asc
| project timestamp, name, id, operation_Id,
operation_ParentId, duration, target, type, cloud_RoleName,
resultCode, customDimensions
Consulta 3: Desglosar las propiedades conocidas de OpenTelemetry para genAI en columnas
Esta consulta devuelve la misma traza que la consulta 2, pero también analiza cada clave conocida de convención semántica de OpenTelemetry en su propia columna nombrada. El resultado es una tabla plana y definida explícitamente donde puedes ordenar, filtrar y escanear los campos de IA generativa como nombre de herramienta, modelo, prompt de usuario, respuesta del agente e ID de conversación directamente. Sustituye el marcador de posición nombre del agente por el nombre de tu agente.
let Window = 7d;
let AgentName = "<Agent name>";
let LatestConvo =
toscalar(
dependencies
| where timestamp > ago(Window)
| extend
AgentName_ = tostring(customDimensions["gen_ai.agent.name"]),
ConversationId_ = tostring(customDimensions["gen_ai.conversation.id"])
| where AgentName_ == AgentName
| where isnotempty(ConversationId_)
| summarize arg_max(timestamp, ConversationId_)
| project ConversationId_
);
dependencies
| where timestamp > ago(Window)
| extend
ConversationId = tostring(customDimensions["gen_ai.conversation.id"])
| where ConversationId == LatestConvo
| extend
OperationName = tostring(customDimensions["gen_ai.operation.name"]),
AgentId = tostring(customDimensions["gen_ai.agent.id"]),
AgentName = tostring(customDimensions["gen_ai.agent.name"]),
Model = tostring(customDimensions["gen_ai.request.model"]),
ToolName = tostring(customDimensions["gen_ai.tool.name"]),
ToolType = tostring(customDimensions["gen_ai.tool.type"]),
ToolCallId = tostring(customDimensions["gen_ai.tool.call.id"]),
ToolArguments = tostring(customDimensions["gen_ai.tool.call.arguments"]),
ToolResult = tostring(customDimensions["gen_ai.tool.call.result"]),
EnvironmentId = tostring(customDimensions["env.id"]),
TenantId = tostring(customDimensions["microsoft.tenant.id"]),
ChannelName = tostring(customDimensions["microsoft.channel.name"]),
BlueprintId = tostring(customDimensions["microsoft.a365.agent.blueprint.id"]),
PlatformId = tostring(customDimensions["microsoft.a365.agent.platform.id"]),
ResourceProvider = tostring(customDimensions["resource.provider"]),
SignalCategory = tostring(customDimensions["signal.category"]),
UserId = tostring(customDimensions["user.id"]),
UserName = tostring(customDimensions["user.name"]),
UserEmail = tostring(customDimensions["user.email"])
| extend
InputMessages = parse_json(tostring(customDimensions["gen_ai.input.messages"])),
OutputMessages = parse_json(tostring(customDimensions["gen_ai.output.messages"]))
| extend
UserInput = tostring(InputMessages[0].parts[0].content),
AgentOutput = tostring(OutputMessages[0].parts[0].content)
| order by
operation_Id asc,
iff(name == "InvokeAgent", 0, 1) asc,
timestamp asc
| project
timestamp, name, id, operation_Id, operation_ParentId, OperationName, ConversationId,
AgentId, AgentName, Model, ToolName, ToolType, ToolCallId, ToolArguments, ToolResult,
UserInput, AgentOutput, EnvironmentId, TenantId, ChannelName, BlueprintId, PlatformId,
ResourceProvider, SignalCategory, UserId, UserName, UserEmail, duration, target, type,
cloud_RoleName, resultCode, customDimensions
Consulta 4: Expandir dinámicamente todas las propiedades de OpenTelemetry de GenAI
Esta consulta devuelve los mismos intervalos que la consulta 3, pero cada clave gen_ai.* se desempaqueta dinámicamente de customDimensions en su propia columna con prefijo ga_. Como la proyección es dinámica, cualquier nuevo gen_ai.* atributo que el SDK emita posteriormente aparece automáticamente sin cambiar la consulta. Sustituye el marcador de posición nombre del agente por el nombre de tu agente.
let Window = 7d;
let AgentName = "<Agent name>";
let LatestConvo = toscalar(
dependencies
| where timestamp > ago(Window)
| where tostring(customDimensions["gen_ai.agent.name"]) == AgentName
| where isnotempty(tostring(customDimensions["gen_ai.conversation.id"]))
| top 1 by timestamp desc
| project tostring(customDimensions["gen_ai.conversation.id"])
);
dependencies
| where timestamp > ago(Window)
| where tostring(customDimensions["gen_ai.conversation.id"]) == LatestConvo
| order by operation_Id asc, iff(name == "InvokeAgent", 0, 1) asc, timestamp asc
| mv-apply Key = bag_keys(customDimensions) on (
where Key startswith "gen_ai."
| summarize OTelGenAI = make_bag(bag_pack(tostring(Key), customDimensions[tostring(Key)]))
)
| project timestamp, name, id, operation_Id, operation_ParentId,
duration, target, type, cloud_RoleName, resultCode,
OTelGenAI, customDimensions
| evaluate bag_unpack(OTelGenAI, 'ga_')
Consulta 5: Devolver la última conversación para un agente raíz con todos sus hijos, incluidos los subagentes
Esta consulta devuelve la conversación más reciente para un agente nombrado. Devuelve cada intervalo de esa conversación y de todos los subagentes de primer nivel que invocó. Cuando un agente llama a otro agente usándolo como herramienta, el subagente hereda el ID de conversación del padre con el sufijo _<subConversationId>. Todo el árbol se reconstruye haciendo coincidencia en el ID de nivel superior. Sustituye el marcador de posición nombre del agente por el nombre de tu agente.
let Window = 7d;
let AgentName = "<Agent name>";
let LatestRoot =
toscalar(
dependencies
| where timestamp > ago(Window)
| extend
AgentName_ = tostring(customDimensions["gen_ai.agent.name"]),
ConversationId = tostring(customDimensions["gen_ai.conversation.id"])
| where AgentName_ == AgentName
| where isnotempty(ConversationId)
| where ConversationId !has "_"
| summarize arg_max(timestamp, ConversationId)
| project ConversationId
);
dependencies
| where timestamp > ago(Window)
| extend
ConversationId = tostring(customDimensions["gen_ai.conversation.id"]),
AgentName_ = tostring(customDimensions["gen_ai.agent.name"]),
ToolName = tostring(customDimensions["gen_ai.tool.name"]),
ToolResult = tostring(customDimensions["gen_ai.tool.callresult"])
| where isnotempty(ConversationId)
| where ConversationId == LatestRoot
or ConversationId startswith strcat(LatestRoot, "_")
| extend
Depth = countof(ConversationId, "_"),
AgentRole = iff(ConversationId == LatestRoot, "root", "sub-agent")
| extend
InputMessages = parse_json( tostring(customDimensions["gen_ai.input.messages"]) ),
OutputMessages = parse_json( tostring(customDimensions["gen_ai.output.messages"]) )
| extend
UserInput = tostring(InputMessages[0].parts[0].content),
AgentOutput = tostring(OutputMessages[0].parts[0].content)
| order by timestamp asc
| project
timestamp, name, AgentRole, Depth, AgentName, ToolName, ToolResult, UserInput,
AgentOutput, id, operation_Id, operation_ParentId, ConversationId, duration,
target, type, cloud_RoleName, resultCode, customDimensions
Limitaciones y consideraciones conocidas
- El valor
durationno está disponible para las trazas de agentes clásicas. - Actualmente, los errores en la ejecución de agentes y herramientas no se reflejan correctamente en los estados de las trazas.
- Según tus requisitos de residencia de datos, quizá quieras utilizar recursos dedicados a Application Insights para cada región del entorno.
- Los spans de subagente actualmente tienen como span padre el
InvokeAgentque invocó al agente, en lugar delInvokeAgentdentro de su propia traza. - Actualmente, los IDs de traza y de span se emiten como GUID (con prefijo cuando es necesario) en lugar de como IDs de traza de 32 caracteres hexadecimales e IDs de span de 16 caracteres hexadecimales, totalmente conformes con el estándar OpenTelemetry.
- Asegúrate de que la autenticación local esté activada en el recurso objetivo de Application Insights.
- La exportación de telemetría no es transaccional. Durante eventos de servicio transitorios, pueden producirse pequeñas pérdidas de datos.
- Pueden producirse inconsistencias en los datos a medida que se implementan actualizaciones de ingestión relacionadas con el esquema.
- Eventos relacionados con temas como
TopicStart,TopicAction, yTopicEndno se capturan con telemetría a nivel de entorno. - Para simplificar la elaboración de informes y la resolución de problemas, evita enviar tanto telemetría a nivel de agente como de entorno a la misma instancia de Application Insights.
- La telemetría emitida para los agentes creados en los agentes impulsados por GitHub Copilot puede diferir de la de los agentes construidos en los agentes con experiencia de creación de arnés estándar.