Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
[Este artigo é documentação de pré-lançamento e está sujeito a alterações.]
Use o Aplicação Azure Insights para monitorizar os rastreios de agentes do Copilot Studio exportados a partir de um ambiente gerido. Depois de configurar a exportação, use o Azure Monitor e o Application Insights para validar execuções de agentes, monitorizar a execução de nós e ferramentas, criar alertas e criar consultas e dashboards personalizados para análise operacional.
Note
- A telemetria ao nível do ambiente está disponível para agentes com tecnologia da plataforma standard e da plataforma do GitHub Copilot.
- Após a pré-visualização privada, as invocações do agente raiz (
invoke_agent) são agora emitidas comodependencies, em vez derequests. Como resultado, os rastreios de invocação de raiz de agentes mais antigos podem ainda aparecer na tabelarequests. - Para avaliar esta funcionalidade de pré-visualização usando a estratégia e capacidades de telemetria mais recentes, pode testar num ambiente não de produção com o ciclo de lançamento antecipado ativado.
- Esta funcionalidade está disponível apenas para ambientes geridos.
- Apenas os registos de agentes construídos no Copilot Studio, excluindo agentes declarativos, estão disponíveis em Application Insights.
- Para adotar apenas uma estratégia Application Insights ao nível do ambiente para a telemetria de agentes do Copilot Studio, as organizações podem optar por desativar a telemetria Application Insights ao nível do agente.
Este artigo explica como configurar a exportação ao nível do ambiente dos rastros do agente Copilot Studio para o Aplicação Azure Insights através do centro de administração do Power Platform.
Important
Este artigo contém documentação de pré-visualização do Microsoft Copilot Studio e está sujeito a alterações.
As funcionalidades de pré-visualização não se destinam a ser utilizadas em ambiente de produção e podem ter funcionalidades restritas. Esses recursos estão disponíveis antes de um lançamento oficial para que você possa obter acesso antecipado e fornecer feedback.
Se você estiver criando um agente pronto para produção, consulte Visão geral do Microsoft Copilot Studio.
Pré-requisitos
Antes de configurar a ligação de exportação de dados, cumpra os pré-requisitos de Exportar dados para Application Insights.
O que é exportado
Quando ativas a exportação, a telemetria de rastreamento do agente do Copilot Studio é escrita para o Application Insights num formato de observabilidade orientado para traços e alinhado com o OpenTelemetry, que suporta investigação, dashboards e alertas.
Os eventos de agentes do Copilot Studio são escritos na tabela dependencies como spans. Cada evento exportado (InvokeAgent, ExecuteTool e OutputMessages) é uma única linha de span (itemType = dependency).
Como os spans formam um rastreio
A telemetria segue o modelo trace-and-span do OpenTelemetry, reconstruída a partir das colunas operation_Id e operation_ParentId:
- Cada turno do agente é o seu próprio rastreio, identificado por um
operation_Idpartilhado que permite ao Application Insights agrupar o turno e compô-lo na vista de transação ponto a ponto. - O span
InvokeAgenté a raiz do rastreio do seu turno. Os spansExecuteToole os spansOutputMessagesligados ficam aninhados por baixo dele, cada um contendooperation_ParentId= oiddo spanInvokeAgent. - Uma conversação abrange vários turnos, cada um emitido como um rastreio separado. Agrupe ou filtre por
gen_ai.conversation.idpara voltar a encadear os turnos de uma mesma conversação. - Os spans
OutputMessagesnem sempre emitem uma raizInvokeAgent, o que significa que podem (por design) chegar sem um elemento principal correspondente e aparecer como um rastreio autónomo de nó único.
Criar um pacote de exportação
Crie um pacote de exportação com o tipo de exportação definido para Copilot Studio seguindo as instruções em Criar um pacote de exportação da documentação do centro de administração do Power Platform.
Validar a configuração
Depois de guardar a configuração de exportação, execute uma conversa de teste com o agente e confirme que a telemetria chega ao Application Insights. A entrega de telemetria pode demorar até 24 horas em novas configurações. Valide isso:
- Os spans de agentes são apresentados na tabela
dependencies. - Os spans
InvokeAgent,ExecuteTooleOutputMessagesde cada turno partilham umoperation_Id.
Campos do Application Insights
A tabela seguinte mostra os campos na dependencies tabela e quais os campos preenchidos para cada um dos três eventos do agente exportado: InvokeAgent, ExecuteTool, e OutputMessages. A semântica do agente e da operação está em customDimensions (nas chaves gen_ai.*, como gen_ai.operation.name), não nas colunas nativas.
Campos na dependencies tabela |
InvokeAgent | ExecuteTool | Mensagens de Saída | Valor da amostra |
|---|---|---|---|---|
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 |
✔️ | ✔️ | ✔️ | Saiba mais em propriedades de customDimension |
operation_Id |
✔️ | ✔️ | ✔️ |
trace-1111aaa1-aa11-11aa-11a1-a1aaa1111aa1 (partilhado por todos os spans do turno) |
operation_ParentId |
✔️ | ✔️ | ✔️ | O InvokeAgentid do turno para os spans de elementos subordinados; a raiz do rastreio para o span 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 |
✔️ | ✔️ | ✔️ | - |
propriedades de customDimensions
Cada span inclui JSON customDimensions. A tabela seguinte mostra as chaves comuns que aparecem em cada span:
| Key | Valor da amostra |
|---|---|
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 |
Chaves específicas de eventos
A tabela seguinte mostra as chaves específicas de cada evento:
| Key | InvokeAgent | ExecuteTool | Mensagens de Saída | Description |
|---|---|---|---|---|
gen_ai.input.messages |
✔️ | - | - | Matriz JSON de {role, parts:[{content, type}]} — o pedido do utilizador |
gen_ai.output.messages |
- | - | ✔️ | Matriz JSON — a resposta do agente |
gen_ai.tool.name |
- | ✔️ | - | Por exemplo, workiqsharepoint:mcp_SharePointRemoteServer |
gen_ai.tool.type |
- | ✔️ | - | Por exemplo, MCP - Power Platform Connector |
gen_ai.tool.call.id |
- | ✔️ | - | Identificador de invocação de ferramenta |
gen_ai.tool.call.arguments |
- | ✔️ | - | Carga útil JSON enviada para a ferramenta |
gen_ai.tool.call.result |
- | ✔️ | - | Carga útil JSON devolvida pela ferramenta |
Descubra o esquema atual
O esquema documentado neste artigo poderá evoluir ao longo do tempo. Em vez de confiar apenas nas tabelas mencionadas anteriormente, utilize as seguintes consultas para inspecionar o esquema mais recente disponível no seu próprio ambiente.
Listar colunas de tabela nativas
A consulta seguinte devolve o esquema ao nível da coluna da dependencies tabela. Use-o para confirmar colunas nativas disponíveis ao criar consultas, dashboards ou alertas.
dependencies
| getschema
| project ColumnName, ColumnType
| order by ColumnName asc
Descobre chaves customDimensions (propriedades dinâmicas)
A consulta seguinte lista todas as chaves dentro do customDimensions JSON na dependencies tabela: o nome da propriedade, em que eventos do agente aparece (InvokeAgent, ExecuteTool, OutputMessages), e um valor de exemplo. Ao contrário do esquema de colunas nativo, estas propriedades são dinâmicas, pelo que esta consulta mantém-se precisa à medida que o SDK adiciona novas gen_ai.* ou outras chaves. Usa-o como fonte viva de verdade para os atributos disponíveis.
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
Monitorizar telemetria exportada
Utilize os Logs do Application Insights para consultar a atividade do agente e investigar a execução de agentes ou ferramentas. Toda a telemetria exportada é registada na tabela dependencies como spans:
- Cada turno de agente é um rastreio, agrupado por um
operation_Idpartilhado. - O span
InvokeAgenté a raiz do rastreio; os spansExecuteTooleOutputMessagesficam aninhados abaixo dele através deoperation_ParentId. - Agrupe por
gen_ai.conversation.idpara encadear vários turnos da mesma conversação e divida esse ID em_para incluir rastreios de subagentes.
Painéis de agentes (pré-visualização)
Para além dos Logs, o Application Insights fornece vistas incorporadas de Agentes (pré-visualização) que visualizam a telemetria GenAI exportada sem escrever consultas Kusto. À medida que o Copilot Studio escreve os seus spans na tabela dependencies, estes painéis leem diretamente esses dados:
-
Execuções do agente: Lista as invocações do agente criadas a partir dos segmentos
InvokeAgent, com a respetiva duração, êxito e a conversa à qual cada execução pertence. Aplicam-se algumas limitações; Saiba mais em Limitações e considerações conhecidas. -
Ferramentas: Agrega os
ExecuteToolintervalos para mostrar quais as ferramentas que os agentes utilizam, com que frequência e qual o seu desempenho. - Modelos: Resume a utilização dos modelos ao longo das execuções, destacando os modelos invocados e os seus padrões de chamada.
Analise a telemetria dos agentes com o Application Insights
Depois de ligar o seu ambiente ao Application Insights, ele regista os dados de telemetria do agente quando os utilizadores interagem com o agente, incluindo durante os testes dentro do Copilot Studio. Para visualizar os dados de telemetria registados, aceda à secção Logs do seu recurso Application Insights no Azure. Aqui, pode usar consultas Kusto para consultar e analisar os seus dados. Saiba mais em Exemplos de consultas.
Exemplos de consultas
Os exemplos seguintes de consultas Kusto reconstituem as conversas de agente do Copilot Studio a partir da tabela dependencies no Application Insights. Como cada span partilha um operation_Id de rastreio por turno, as consultas ordenam os spans começando pela raiz (o span InvokeAgent antes dos respetivos spans de elementos subordinados) dentro de cada rastreio.
Consulta 1: Devolver um rastreio completo para um ID de conversação específico
Esta consulta devolve todos os spans de uma conversação conhecida, ordenados cronologicamente, com cada span raiz listado antes dos seus spans de elementos subordinados. Substitua o marcador de posição ID da conversa pelo ID da conversa do seu agente. Pode encontrá-lo introduzindo o seguinte comando enquanto testa o seu 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
Pergunta 2: Devolver a última conversa de um agente específico
Esta consulta encontra a conversa mais recente de um agente nomeado dentro da janela de tempo especificada. Devolve todos os spans dessa conversação na mesma ordem cronológica, começando pela raiz. Substitua o nome do agente provisório pelo nome do seu 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: Expandir as propriedades genAI conhecidas do OpenTelemetry em colunas
Esta consulta devolve o mesmo rasto que a consulta 2, mas também processa cada chave conhecida da convenção semântica do OpenTelemetry numa coluna com nome próprio. O resultado é uma tabela plana e explicitamente definida onde pode ordenar, filtrar e analisar diretamente os campos de IA generativa, como nome da ferramenta, modelo, prompt do utilizador, resposta do agente e ID de conversa. Substitua o nome do agente provisório pelo nome do seu 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 dinamicamente todas as propriedades de genAI do OpenTelemetry
Esta consulta devolve os mesmos intervalos que a consulta 3, mas cada chave gen_ai.* é descompactada dinamicamente de customDimensions para a sua própria coluna com o prefixo ga_. Como a projeção é dinâmica, qualquer novo gen_ai.* atributo que o SDK emita posteriormente aparece automaticamente sem alterar a consulta. Substitua o nome do agente provisório pelo nome do seu 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_')
Limitações e considerações conhecidas
- Esta funcionalidade não suporta cenários de agentes não autenticados ou de configuração de agente multi-inquilino. Por isso, o Application Insights não os regista.
- Esta funcionalidade está atualmente disponível apenas em ambientes de cloud pública da Microsoft.
- Para certos cenários de agentes conectados, a relação pai-filho entre rastreios não está corretamente mapeada.
- O valor
durationnão está disponível para rastreios de agentes com tecnologia da plataforma standard. - Certifique-se de ativar a propriedade de autenticação local no recurso de Insights de Aplicação de destino.
- A exportação de telemetria não é transacional. Durante eventos de serviço transitório, podem ocorrer pequenas quantidades de perda de dados.
- Podem ocorrer inconsistências nos dados à medida que as atualizações de ingestão relacionadas com o esquema são implementadas.
- Esta funcionalidade não capta eventos relacionados com temas, como
TopicStart,TopicAction, eTopicEnd. - Atualmente, os IDs de trace e de span utilizam uma representação baseada em GUID, em vez dos formatos hexadecimais padrão do OpenTelemetry: ID de trace com 32 caracteres e ID de span com 16 caracteres.
- Para simplificar a reporte e a resolução de problemas, evite enviar telemetria tanto ao nível do agente como ao nível do ambiente para a mesma instância do Application Insights.
- A telemetria pode variar entre agentes alimentados pelo chicote GitHub Copilot e agentes alimentados pelo chicote padrão.
- Assegure que a sua configuração de Application Insights ao nível do ambiente cumpre os requisitos de residência de dados, privacidade e controlo de acesso baseado em funções (RBAC).
- Grandes conteúdos de registo, incluindo respostas de agentes e argumentos de ferramentas, podem ser truncados.