Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
[Denne artikkelen er forhåndsutgitt dokumentasjon og kan endres.]
Bruk Azure Application Insights for å overvåke Copilot Studio-agentspor eksportert fra et administrert miljø. Etter at du har konfigurert eksport, bruk Azure Monitor og Application Insights for å validere agentkjøringer, overvåke node- og verktøykjøring, lage varsler og bygge tilpassede spørringer og dashbord for operasjonell analyse.
Notat
- Telemetri på miljønivå er tilgjengelig for agenter drevet av både standardharnessen og GitHub Copilot-harnessen.
- Etter den private forhåndsvisningen sendes rotagent-kall (
invoke_agent) nå ut somdependencies(sammen med alle andre spenn), i stedet forrequests. Som et resultat kan agentens root-invokasjonsspor fortsatt vises irequeststabellen til den globale utrullingen er fullført. - For å evaluere denne forhåndsvisningsfunksjonen ved hjelp av den nyeste telemetristrategien og mulighetene, kan du teste i et ikke-produksjonsmiljø med tidlig lanseringssyklus aktivert.
- Denne funksjonen rulles for tiden ut globalt og er kanskje ikke fullt tilgjengelig i dine miljøer ennå.
- Denne funksjonen er kun tilgjengelig for administrerte miljøer.
- Kun logger for agenter som er bygget i Copilot Studio, ekskludert deklarative agenter, er tilgjengelige i Application Insights.
- For å adoptere kun en miljønivå Application Insights-strategi for Copilot Studio-agenttelemetri, kan organisasjoner velge å deaktivere agentnivå Application Insights-telemetri.
Denne artikkelen forklarer hvordan man konfigurerer miljønivå-eksport av Copilot Studio-agentspor til Azure Application Insights gjennom Power Platform-administrasjonssenteret.
Important
Denne artikkelen inneholder dokumentasjon for Microsoft Copilot Studio-forhåndsversjonen og kan bli endret.
Evalueringsfunksjonalitet er ikke ment for produksjonsbruk og kan ha begrensninger. Disse funksjonene er tilgjengelige før en offisielle utgivelsen slik at du kan få tidlig tilgang og gi tilbakemeldinger.
Hvis du skal bygge en produksjonsklar agent, kan du se Oversikt over Microsoft Copilot Studio.
Forutsetninger
Før du setter opp dataeksportforbindelsen, fullfør forutsetningene for å eksportere data til Application Insights.
Hva blir eksportert
Når du aktiverer eksport, skrives Copilot Studio-agentens trace-telemetri til Application Insights i et trace-orientert, OpenTelemetry-tilpasset observabilitetsformat som støtter undersøkelse, dashbord og varsling.
Agenthendelser i Copilot Studio skrives til dependencies-tabellen som span. Hver eksportert hendelse (, , og ) er en enkelt spanrad (InvokeAgentExecuteToolOutputMessages).itemType = dependency
Hvordan spenn danner et spor
Telemetrien følger OpenTelemetris spor-og-spenn-modell, rekonstruert gjennom og operation_Id kolonneneoperation_ParentId:
- Hver agenttur er sin egen sporing, identifisert av en delt
operation_Idrunde, som gjør det mulig for Application Insights å gruppere runden og vise den i ende-til-ende-transaksjonsvisningen. - Spennet
InvokeAgenter roten til svingens spor. DetsExecuteToolog tilkobledeOutputMessages-span er nestet under det, hver medoperation_ParentId=InvokeAgent-spanetsid. - En samtale strekker seg over flere runder, hver sendt ut som et eget spor. Grupper eller filtrer etter
gen_ai.conversation.idfor å flette vendingene i en samtale sammen igjen. -
OutputMessagesspenn genererer ikke alltid enInvokeAgent-rotnode, noe som betyr at de med hensikt kan komme uten en samsvarende overordnet node og fremstå som et frittstående spor med bare én node.
Opprett en eksportpakke
Lag en eksportpakke med eksporttypen satt til Copilot Studio ved å følge instruksjonene i Lag en eksportpakke av Power Platform-administrasjonssenterets dokumentasjon.
Valider konfigurasjonen
Etter at du har lagret eksportkonfigurasjonen, kjør en testsamtale med agenten og bekreft at telemetrien ankommer i Application Insights. Telemetrilevering kan ta opptil 24 timer på nye konfigurasjoner. Bekreft at:
- Agent spans vises i tabellen
dependencies. - I hver omgang har
InvokeAgent,ExecuteToologOutputMessages-områdene en fellesoperation_Id.
Applikasjonsinnsiktsfelt
Tabellen nedenfor viser feltene i tabellen dependencies , og hvilke felt som er fylt ut for hver av de tre eksporterte agenthendelsene: InvokeAgent, ExecuteTool, og OutputMessages. Agent- og operasjonssemantikk er i customDimensions (nøklene gen_ai.* , som gen_ai.operation.name), ikke i de native kolonnene.
Felt i dependencies tabellen |
InvokeAgent | ExecuteTool | Utdatameldinger | Eksempelverdi |
|---|---|---|---|---|
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ær mer i customDimension-egenskaper |
operation_Id |
✔️ | ✔️ | ✔️ |
trace-1111aaa1-aa11-11aa-11a1-a1aaa1111aa1 (delt av hver spenn i svingen) |
operation_ParentId |
✔️ | ✔️ | ✔️ | Denne er InvokeAgentid for underordnede spenn; roten til sporingen for InvokeAgent-spennet |
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
Hver spenn inkluderer customDimensions JSON. Følgende tabell viser vanlige nøkler som forekommer på hver spennvidde:
| Nøkkel | Eksempelverdi |
|---|---|
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 |
Hendelsesspesifikke nøkler
Tabellen nedenfor viser de hendelsesspesifikke nøklene:
| Nøkkel | InvokeAgent | ExecuteTool | Utdatameldinger | Beskrivelse |
|---|---|---|---|---|
gen_ai.input.messages |
✔️ | - | - | JSON-array av {role, parts:[{content, type}]}—brukerprompten |
gen_ai.output.messages |
- | - | ✔️ | JSON-array—agentens svar |
gen_ai.tool.name |
- | ✔️ | - | Eksempel: workiqsharepoint:mcp_SharePointRemoteServer |
gen_ai.tool.type |
- | ✔️ | - | Eksempel: MCP - Power Platform Connector |
gen_ai.tool.call.id |
- | ✔️ | - | Verktøykallingsidentifikator |
gen_ai.tool.call.arguments |
- | ✔️ | - | JSON-nyttelast sendt til verktøyet |
gen_ai.tool.call.result |
- | ✔️ | - | JSON-nyttelast returnert av verktøyet |
Oppdag det nåværende skjemaet
Skjemaet som er dokumentert i denne artikkelen kan utvikle seg over tid. I stedet for å stole utelukkende på tabellene nevnt tidligere, bruk følgende spørringer for å inspisere det nyeste skjemaet live i ditt eget miljø.
Vis innebygde tabellkolonner
Følgende spørring returnerer kolonnenivåskjemaet i dependencies tabellen. Bruk det til å bekrefte tilgjengelige native kolonner når du lager forespørsler, dashbord eller varsler.
dependencies
| getschema
| project ColumnName, ColumnType
| order by ColumnName asc
Oppdag customDimensions-nøkler (dynamiske egenskaper)
Følgende spørring lister opp alle nøkler i JSON-en customDimensions i dependencies tabellen: egenskapsnavnet, hvilke agenthendelser den vises på (InvokeAgent, ExecuteTool, OutputMessages), og en prøveverdi. I motsetning til det opprinnelige kolonneskjemaet, er disse egenskapene dynamiske, så denne spørringen forblir nøyaktig når SDK-en legger til nye gen_ai.* eller andre nøkler. Bruk det som levende kilde til sannhet for tilgjengelige attributter.
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
Overvåk eksportert telemetri
Bruk Application Insights-loggene for å spørre agentaktivitet og undersøke agent- eller verktøykjøring. All eksportert telemetri havner i dependenciestabellen som span:
- Hver agentomgang er et spor, gruppert etter en felles
operation_Id. - Spennet
InvokeAgenter sporroten;ExecuteToologOutputMessagesspenner reir under den gjennomoperation_ParentId. - Grupper etter
gen_ai.conversation.idfor å samle flere meldinger i samme samtale, og del denne ID-en på_for å inkludere spor fra underagenter.
Agents (forhåndsvisning) blader
I tillegg til logger tilbyr Application Insights innebygde Agents (forhåndsvisning) visninger som visualiserer den eksporterte GenAI-telemetrien uten å skrive Kusto-spørringer. Når Copilot Studio skriver sine spenn til tabellendependencies, leser disse bladene direkte fra disse dataene:
-
Agent Runs: Lister agent-invokasjoner bygget fra spennene
InvokeAgent, med varighet, suksess og samtalen hver runde tilhører. Noen begrensninger gjelder; lær mer i Kjente begrensninger og hensyn. -
Verktøy: Samler
ExecuteToolspennene for å vise hvilke verktøy agentene kaller, hvor ofte og hvordan de presterer. - Modeller: Oppsummerer modellbruken på tvers av kjøringer, og fremhever modellene som påkalles og deres kallmønstre.
Analyser agenttelemetri med Application Insights
Etter at du kobler miljøet ditt til Application Insights, logger det agentens telemetridata når brukere interagerer med agenten, inkludert under testing i Copilot Studio. For å se de loggførte telemetridataene, gå til Loggseksjonen i din Application Insights-ressurs i Azure. Her kan du bruke Kusto-spørringer for å spørre og analysere dataene dine. Lær mer i eksempelforespørsler.
Eksempelspørringer
Følgende eksempler på Kusto-forespørsler rekonstruerer Copilot Studio-agentsamtaler fra dependencies tabellen i Application Insights. Siden hvert span deler et sporingsforløp operation_Id for hver tur, sorterer spørringene spanene med roten først (spanet InvokeAgent før de underordnede spanene) innenfor hvert sporingsforløp.
Forespørsel 1: Hent en fullstendig sporing for en bestemt samtale-ID
Denne spørringen returnerer alle span for en kjent samtale, sortert kronologisk, med hvert rotspan oppført før sine underordnede span. Erstatt Conversation ID-plassholderen med agentens Conversation ID. Du kan finne den ved å skrive inn følgende kommando mens du tester din egendefinerte 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
Forespørsel 2: Returner den siste samtalen for en spesifikk agent
Denne spørringen finner den nyeste samtalen for en navngitt agent innenfor det angitte tidsvinduet. Den returnerer hvert tidsrom for den samtalen i samme kronologiske, rot-først-rekkefølge. Bytt ut agentnavnets plassholder med agentens navn.
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
Spørring 3: Utvid kjente genAI OpenTelemetri-egenskaper til kolonner
Denne spørringen returnerer samme spor som spørring 2, men den parser også hver kjent OpenTelemetri-semantisk-konvensjonsnøkkel til sin egen navngitte kolonne. Resultatet er en flat, eksplisitt definert tabell hvor du kan sortere, filtrere og skanne generative AI-felt som verktøynavn, modell, brukerprompt, agentsvar og samtale-ID direkte. Bytt ut agentnavnets plassholder med agentens navn.
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
Spørsmål 4: Utvid alle genAI OpenTelemetrie-egenskaper dynamisk
Denne spørringen returnerer de samme spennviddene som spørring 3, men hver gen_ai.* nøkkel pakkes dynamisk ut fra customDimensions i sin egen ga_-prefiks-kolonne. Siden projeksjonen er dynamisk, vises enhver ny gen_ai.* attributt som SDK-en sender ut senere automatisk uten å endre spørringen. Bytt ut agentnavnets plassholder med agentens navn.
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_')
Forespørsel 5: Returner den siste samtalen for en rotagent med alle dens barn, inkludert underagenter
Denne forespørselen returnerer den nyeste samtalen for en navngitt agent. Den returnerer hvert tidsrom for den samtalen og for alle første-nivå underagenter den påkalte. Når en agent kaller en annen agent som et verktøy, arver underagenten forelderens samtale-ID med et _<subConversationId> suffiks. Hele trestrukturen rekonstrueres ved å samsvare med ID på toppnivå. Bytt ut agentnavnets plassholder med agentens navn.
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
Kjente begrensninger og hensyn
- Verdien
durationer ikke tilgjengelig for spor av agenter som bruker standard harness. - Agent- og verktøyutførelsesfeil vises for øyeblikket ikke korrekt i trace-statusene.
- Basert på kravene til dataopphold kan det være lurt å bruke dedikerte Application Insights-ressurser for hver miljøregion.
- Sub-agent-span er for øyeblikket underordnet
InvokeAgent-spanet som påkalte agenten, i stedet forInvokeAgent-spanet i sitt eget spor. - Trace- og span-IDer sendes for øyeblikket ut som GUID-er (med prefiks der det trengs) i stedet for fullt OpenTelemetry-standard 32-hex-char trace-ID og 16-hex-char span-ID justert.
- Sørg for at lokal autentisering er aktivert på den målrettede Application Insights-ressursen.
- Telemetrieksport er ikke transaksjonell. Under transiente tjenestehendelser kan små mengder datatap oppstå.
- Datainkonsistenser kan oppstå når skjema-relaterte oppdateringer rulles ut.
- Temarelaterte hendelser som
TopicStart,TopicAction, ogTopicEndfanges ikke opp med miljønivå-telemetri. - For å forenkle rapportering og feilsøking, unngå å sende både agent- og miljøtelemetri til samme Application Insights-instans.
- Telemetrien som sendes ut for agenter skrevet i agentene drevet av GitHub Copilot-harnessen, kan avvike fra agenter bygget i agentene drevet av standard harness-authoring-opplevelse.