Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
[Denna artikel är en förhandsversion av dokumentationen och kan komma att ändras.]
Använd Azure Application Insights för att övervaka Copilot Studio-agentspår som exporteras från en hanterad miljö. Efter att du konfigurerat export, använd Azure Monitor och Application Insights för att validera agentkörningar, övervaka nod- och verktygskörning, skapa varningar och bygga anpassade frågor och dashboards för operativ analys.
Note
- Telemetri på miljönivå är tillgänglig för agenter som drivs av både standard harness och GitHub Copilot harness.
- Efter den privata förhandsgranskningen skickas rotagentanrop (
invoke_agent) nu somdependencies(tillsammans med alla andra spann), istället förrequests. Som ett resultat kan spår för agentens root-anrop fortfarande visas i tabellenrequeststills den globala lanseringen är slutförd. - För att utvärdera denna förhandsvisningsfunktion med den senaste telemetristrategin och funktionerna kan du testa i en icke-produktionsmiljö med Early release-cykeln aktiverad.
- Denna funktion rullas för närvarande ut globalt och kanske ännu inte är fullt tillgänglig i dina miljöer.
- Denna funktion är endast tillgänglig för hanterade miljöer.
- Endast loggar för agenter som är byggda i Copilot Studio, exklusive deklarativa agenter, finns tillgängliga i Application Insights.
- För att endast använda en strategi på miljönivå för Application Insights för Copilot Studio-agenttelemetri kan organisationer välja att inaktivera agenttelemetri på Application Insights-nivå.
Den här artikeln förklarar hur man konfigurerar miljönivåexport av Copilot Studio-agentspår till Azure Application Insights via Power Platform-administrationscentret.
Important
Den här artikeln innehåller dokumentation om förhandsversionen av Microsoft Copilot Studio och kan ändras.
Förhandsgranskningsfunktioner ska inte användas i produktion, och funktionerna kan vara begränsade. Funktionerna är tillgängliga före den officiella publiceringen så att du kan få tidig tillgång och ge feedback.
Om du bygger en produktionsklar agent, se Översikt över Microsoft Copilot Studio.
Förutsättningar
Innan du sätter upp dataexportanslutningen, fyll i förkunskaperna för att exportera data till Application Insights.
Vad exporteras
När du aktiverar export skrivs Copilot Studio-agentens trace-telemetri till Application Insights i ett spårorienterat, OpenTelemetry-anpassat observabilitetsformat som stödjer undersökning, instrumentpaneler och varningar.
Copilot Studio-agenthändelser skrivs i dependencies tabellen som spann. Varje exporterad händelse (InvokeAgent, ExecuteTool och OutputMessages) är en enskild span-rad (itemType = dependency).
Hur spann bildar ett spår
Telemetrin följer OpenTelemetrys spår- och spannmodell, rekonstruerad genom kolumnerna operation_Id och operation_ParentId:
- Varje agenttur är sin egen trace, identifierad av en delad
operation_Idruta som gör det möjligt för Application Insights att gruppera vändningen och rendera den i end-to-end-transaktionsvyn. - Spannet
InvokeAgentär roten i spårningen för den turen. DessExecuteTooloch anslutnaOutputMessages-span är nästlade under det, och vart och ett haroperation_ParentId=InvokeAgent-spanetsid. - En konversation sträcker sig över flera turer, som var och en avges som ett separat spår. Gruppera eller filtrera efter
gen_ai.conversation.idför att knyta ihop vändningarna i en konversation igen. -
OutputMessagesspann genererar inte alltid ettInvokeAgent-rootspann, vilket innebär att de avsiktligt kan komma utan någon matchande förälder och visas som ett fristående spår med en enda nod.
Skapa ett exportpaket
Skapa ett exportpaket med exporttypen inställd på Copilot Studio genom att följa instruktionerna i Create an export package av Power Platform admincenter-dokumentationen.
Verifiera konfigurationen
Efter att du sparat exportkonfigurationen, kör en testkonversation med agenten och bekräfta att telemetrin anländer till Application Insights. Telemetrileverans kan ta upp till 24 timmar på nya konfigurationer. Verifiera att:
- Agentspann visas i
dependenciestabellen. - För varje tur delar
InvokeAgent-,ExecuteTool- ochOutputMessages-spannen ettoperation_Id.
Fält för applikationsinsikter
Följande tabell visar fälten i tabellen dependencies och vilka fält som fylls i för var och en av de tre exporterade agenthändelserna: InvokeAgent, , ExecuteTooloch OutputMessages. Agent- och operationssemantik finns i customDimensions (nycklarna gen_ai.* , såsom gen_ai.operation.name), inte i de ursprungliga kolumnerna.
Fält i dependencies tabellen |
InvokeAgent | ExecuteTool | Utdatameddelanden | Exempelvärde |
|---|---|---|---|---|
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 |
✔️ | ✔️ | ✔️ | Läs mer i customDimension-egenskaper |
operation_Id |
✔️ | ✔️ | ✔️ |
trace-1111aaa1-aa11-11aa-11a1-a1aaa1111aa1 (delas av varje intervall i vändningen) |
operation_ParentId |
✔️ | ✔️ | ✔️ | Turen är InvokeAgentid för barnspann; spårroten för spännvidden 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 |
✔️ | ✔️ | ✔️ | - |
customDimensions-egenskaper
Varje spann inkluderar customDimensions JSON. Följande tabell visar vanliga nycklar som förekommer på varje spann:
| Key | Exempelvärde |
|---|---|
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 |
Händelsespecifika nycklar
Följande tabell visar de händelsespecifika nycklarna:
| Key | InvokeAgent | ExecuteTool | Utdatameddelanden | Description |
|---|---|---|---|---|
gen_ai.input.messages |
✔️ | - | - | JSON-array av {role, parts:[{content, type}]}—användarprompten |
gen_ai.output.messages |
- | - | ✔️ | JSON-array—agentens svar |
gen_ai.tool.name |
- | ✔️ | - | Till exempel: workiqsharepoint:mcp_SharePointRemoteServer |
gen_ai.tool.type |
- | ✔️ | - | Till exempel: MCP - Power Platform Connector |
gen_ai.tool.call.id |
- | ✔️ | - | Verktygsinkallationsidentifierare |
gen_ai.tool.call.arguments |
- | ✔️ | - | JSON-payload skickad till verktyget |
gen_ai.tool.call.result |
- | ✔️ | - | JSON-nyttolasten returneras av verktyget |
Upptäck det aktuella schemat
Schemat som dokumenteras i denna artikel kan utvecklas över tid. Istället för att enbart förlita dig på de tidigare nämnda tabellerna, använd följande frågor för att inspektera det senaste schemat live i din egen miljö.
Lista över inbyggda tabellkolumner
Följande fråga returnerar tabellens kolumnnivåschema dependencies . Använd den för att bekräfta tillgängliga inbyggda kolumner när du bygger frågor, instrumentpaneler eller aviseringar.
dependencies
| getschema
| project ColumnName, ColumnType
| order by ColumnName asc
Upptäck customDimensions-nycklar (dynamiska egenskaper)
Följande fråga listar varje nyckel i JSON:en customDimensions i dependencies tabellen: egenskapsnamnet, vilka agenthändelser den visas på (InvokeAgent, ExecuteTool, OutputMessages), och ett exempelvärde. Till skillnad från det inbyggda kolumnschemat är dessa egenskaper dynamiska, så denna fråga förblir korrekt när SDK:n lägger till nya gen_ai.* eller andra nycklar. Använd den som den levande sanningskällan för tillgängliga attribut.
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
Övervaka exporterad telemetri
Använd Application Insights Logs för att fråga om agentaktivitet och undersöka agent- eller verktygskörningar. All telemetri som exporteras hamnar i dependencies-tabellen som span:
- Varje agentomgång är ett spår, grupperat med hjälp av en gemensam
operation_Id. -
InvokeAgent-spannet är rotspannet i spårningen;ExecuteTool- ochOutputMessages-spannen är nästlade under det viaoperation_ParentId. - Gruppera efter
gen_ai.conversation.idför att samla flera omgångar i samma konversation i en tråd, och dela upp det ID:t vid_för att inkludera spårningar för underagenter.
Agents (förhandsvisning) blad
Utöver loggar tillhandahåller Application Insights inbyggda agentvyer (förhandsvisning) som visualiserar den exporterade GenAI-telemetrin utan att skriva Kusto-frågor. När Copilot Studio skriver sina spann till dependencies bordet läser dessa blad direkt från den datan:
-
Agentkörningar: Visar agentanrop skapade från
InvokeAgent-spannen, med deras varaktighet, om de lyckades och vilken konversation varje körning tillhör. Vissa begränsningar gäller; Läs mer i Kända begränsningar och överväganden. -
Verktyg: Sammanställer
ExecuteTool-spanen och visar vilka verktyg agenterna anropar, hur ofta och hur de presterar. - Modeller: Sammanfattar modellanvändning över körningar, visar de anropade modellerna och deras anropsmönster.
Analysera agenttelemetri med Application Insights
Efter att du anslutit din miljö till Application Insights loggar den agentens telemetridata när användare interagerar med agenten, inklusive under testning i Copilot Studio. För att se de loggade telemetridatana, gå till avsnittet Loggar i din Application Insights-resurs i Azure. Här kan du använda Kusto-frågor för att söka och analysera dina data. Läs mer i exempelfrågor.
Exempel på förfrågningar
Följande exempel på Kusto-frågor återskapar Copilot Studio-agentkonversationer dependencies från tabellen i Application Insights. Eftersom varje span delar en trace operation_Id för varje tur, ordnar frågorna span med roten först (spanet InvokeAgent före dess underordnade span) inom varje trace.
Fråga 1: Returnera en fullständig spårning för ett specifikt konversations-ID
Denna fråga returnerar varje span för en viss känd konversation, sorterade kronologiskt där varje rotspan listas före sina underordnade span. Byt ut platshållaren Conversation ID mot agentens konversations-ID. Du kan hitta den genom att ange följande kommando när du testar din anpassade agent: /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
Fråga 2: Returnera den senaste konversationen för en specifik agent
Denna fråga hittar den senaste konversationen för en namngiven agent inom det angivna tidsfönstret. Den returnerar varje span för den konversationen i samma kronologiska ordning, med roten först. Byt ut platshållaren för agentnamnet mot din agents namn.
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
Fråga 3: Utöka kända genAI OpenTelemetriry-egenskaper till kolumner
Denna fråga returnerar samma spår som fråga 2, men den parsar också varje känd OpenTelemetri-semantikkonventionsnyckel till sin egen namngivna kolumn. Resultatet är en platt, explicit definierad tabell där du kan sortera, filtrera och skanna generativa AI-fält som verktygsnamn, modell, användarprompt, agentsvar och konversations-ID direkt. Byt ut platshållaren för agentnamnet mot din agents namn.
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
Fråga 4: Expandera alla genAI OpenTelemetriry-egenskaper dynamiskt
Denna fråga returnerar samma intervall som fråga 3, men varje nyckel i gen_ai.* packas upp dynamiskt från customDimensions till en egen kolumn med prefixet ga_. Eftersom projektionen är dynamisk visas alla nya gen_ai.* attribut som SDK:n skickar ut senare automatiskt utan att frågan ändras. Byt ut platshållaren för agentnamnet mot din agents namn.
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_')
Fråga 5: Returnera den senaste konversationen för en root-agent med alla dess barn, inklusive underagenter
Denna fråga returnerar den senaste konversationen för en namngiven agent. Den returnerar varje spårningsspann för den konversationen och för alla underagenter på första nivån som den anropade. När en agent anropar en annan agent som verktyg ärver underagenten förälderns konversations-ID med suffixet _<subConversationId>. Hela trädet rekonstrueras genom att matcha det översta nivå-ID:t. Byt ut platshållaren för agentnamnet mot din agents namn.
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
Kända begränsningar och överväganden
- Värdet
durationfinns inte tillgängligt för spår av agenter som drivs av standardkabeln. - Fel i agent- och verktygsexekvering återspeglas för närvarande inte korrekt i spårningsstatus.
- Baserat på dina krav på dataresidens kan du vilja använda dedikerade Application Insights-resurser för varje miljöregion.
- Subagent-spann är för närvarande föräldraspanet till det
InvokeAgentspann som anropade agenten, istället för spannetInvokeAgentinom deras eget spår. - Trace- och span-ID:n genereras för närvarande som GUID:er (med prefix där det behövs) i stället för som 32 tecken långa hexadecimala trace-ID:n och 16 tecken långa hexadecimala span-ID:n helt i linje med OpenTelemetry-standarden.
- Se till att lokal autentisering är aktiverad på den aktuella applikationsinsiktsresursen.
- Telemetriexport är inte transaktionell. Under tillfälliga servicehändelser kan små mängder dataförlust uppstå.
- Datainkonsekvenser kan uppstå när schemarelaterade inmatningsuppdateringar rullas ut.
- Ämnesrelaterade händelser som
TopicStart,TopicAction, ochTopicEndfångas inte med miljönivåtelemetri. - För att förenkla rapportering och felsökning, undvik att skicka både agentnivå- och miljönivåtelemetri till samma Application Insights-instans.
- Telemetrin som genereras för agenter som skapats i redigeringsupplevelsen för agenter som drivs av GitHub Copilot-ramverket kan skilja sig från telemetrin för agenter som skapats i redigeringsupplevelsen för agenter som drivs av standardramverket.