Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Distribueret sporing er en metode, der bruges til at profilere og overvåge applikationer, især applikationer bygget ved hjælp af en mikrotjenestearkitektur. Det giver dig mulighed for at spore en hændelse i systemet fra én tjeneste til en anden og hente komplet diagnosticering om ydeevne og ventetid. W3C-sporingssammenhæng-anbefalingen definerer, hvordan kontekstoplysninger sendes og ændres mellem tjenester i distribuerede sporingsscenarier. Denne artikel indeholder praktiske anvendelser og use cases til distribueret sporing og forklarer, hvordan du implementerer det på tværs af flere tjenester i Power Platform.
Sporings-id'er
I W3C Trace Context-standarden tildeles hver sporing en globalt unik 16-byte trace-id
. Hver aktivitet i sporingen tildeles en entydig 8-byte span-id
.
trace-id
repræsenterer den samlede transaktion og span-id
repræsenterer individuelle handlinger i den pågældende transaktion. Hver aktivitet registrerer trace-id
sin egen span-id
og span-id
dens overordnedes og etablerer overordnet-underordnet relation mellem aktiviteter.
I W3C-standarden traceparent
er en overskrift, der bruges til at spore anmodninger, når de bevæger sig gennem forskellige tjenester eller systemer. Den indeholder en unik trace-id
, en parent-id
, der repræsenterer den umiddelbare opkalder, og trace-flags
til prøveudtagningsbeslutninger.
Eksempelscenarie
Lad os se på et eksempel, hvor en browser starter en transaktion, flere mikrotjenester interagerer, og der foretages et kald til web-API'en Dataverse:
Source |
trace-id og span-id |
---|---|
Browser |
trace-parent : 00-11111111111111111111111111111111-2222222222222222-01 |
Kubernetes |
trace-parent : 00-11111111111111111111111111111111-3333333333333333-01 |
Dataverse |
trace-parent : 00-11111111111111111111111111111111-4444444444444444-01 |
Browseren starter transaktionen: Browseren sender en anmodning til en webserver. Anmodningen tildeles en
trace-id
og enspan-id
span-id-1.Interaktion med mikrotjenester: Webserveren behandler anmodningen og foretager et opkald til en mikrotjeneste. Kaldet tildeles et nyt
span-id
(span-id-2) og bevarer det sammetrace-id
. Mikrotjenesten kalder en anden mikrotjeneste, opretter en andenspan-id
(span-id-3) osv. I hvert tilfældetrace-id
forbliver det samme, men der genereres en nyspan-id
for hver operation.Opkald til Dataverse web-API: En af mikrotjenesterne foretager et kald til web-API'en Dataverse. Kaldet tildeles igen et nyt
span-id
(span-id-4) og bevarer det sammetrace-id
.
Trace-ID og overordnet-underordnet relation
trace-id
Joinforbinder alle transaktioner med en overordnet-underordnet relation. Hver span-id
repræsenterer en entydig handling i sporingen, og den overordnede span-id
knytter den til den overordnede handling. Denne hierarkiske struktur giver dig mulighed for at spore hele transaktionen fra den første anmodning til det endelige svar, selvom den krydser flere tjenester og systemer.
Tilknytning af sporings-id og operations-id
Application Insights knytter W3C-feltet trace-id
til Operation Id
, så du nemt kan forespørge på et sæt relaterede handlinger, der forekommer som en del af slutpunkt-til-slutpunkt-sporingen.
Praktiske anvendelser og fordele
W3C Trace Context-standarden for distribueret sporing tilbyder flere praktiske anvendelser og fordele:
End-to-end-synlighed: Sporingskontekst giver komplet synlighed i en transaktion, hvilket hjælper dig med at forstå, hvordan anmodninger overføres gennem dit system.
Ydelsesovervågning: Det giver dig mulighed for at overvåge ydeevnen for individuelle tjenester og identificere flaskehalse.
Fejldiagnose: Det hjælper dig med at diagnosticere fejl ved at spore stien til en anmodning og identificere, hvor der opstår fejl.
Afhængighedssporing: Det giver dig mulighed for at spore afhængigheder mellem tjenester og forstå, hvordan de interagerer.
Ved at implementere distribueret sporing med W3C Trace Context-standarden kan du få værdifuld indsigt i dit programs adfærd, forbedre dens ydeevne og forbedre den samlede brugeroplevelse.
Potentielle brugsscenarier
I følgende tabel beskrives potentielle use cases for distribueret sporing i Power Platform. Hver use case illustrerer, hvordan distribueret sporing kan anvendes på forskellige scenarier, så du kan overvåge og diagnosticere problemer med ydeevnen på tværs af flere tjenester.
Eksempel | Description | Bemærkninger |
---|---|---|
Autonom agent | En datahændelse udløser en autonom agent. Den mulige langlivede transaktion bevarer sporingsforælderen. Transaktionen kan gå på tværs af flere processer og tjenester, herunder mulig overdragelse til en kundeservicemedarbejder. | Power Automate kan anmode om distribueret sporing fra plug-in'en Dataverse. Hvert trin i processen tilføjer Application Insights telemetri. Du kan forespørge på end-to-end-transaktionen i Application Insights eller ved hjælp af KQL-forespørgsler. |
Slutbrugerens web-, mobil- eller agenttransaktion | En bruger starter en transaktion for at opdatere kundedata. Sporingsposter føjes til Application Insights fra anmodningen og sporingsmeddelelser fra Dataverse. | Tjenesten Kubernetes starter en distribueret transaktion. Det kalder web-API'en Dataverse for at opdatere kundeoplysninger. |
Kundesupportagent | En kunde kontakter callcenteret. En callcenteroperatør bruger Copilot i Dynamics 365 Customer Service og en modelbaseret app til at opdatere kundens oplysninger. Hver komponent i opdateringen skriver til Application Insights. | Transaktionen starter hos callcenteroperatøren. Modelbaseret app anmoder om en distribueret transaktion fra Dataverse. |
Integration af Dataverse web API
Lad os undersøge, hvordan web-API'en Dataverse kan integreres med W3C Trace Context til distribueret sporing.
Opkaldstjenesten starter en sporing med et entydigt trace-id
og span-id
. Værdien trace-parent
kan overføres til web-API'en enten i brødteksten i en HTTP POST-anmodning eller som en del af en HTTP-forespørgselsstreng, f.eks.:
-
Mulighed 1: POST-brødtekst:
postData(environmentUrl + "api/data/v9.0/" + customApiName, token, ...)
-
Mulighed 2: Tag forespørgselsstreng:
postData(environmentUrl + "api/data/v9.0/" + customApiName + "?tag=01-0af...")
Ved hjælp af begge metoder kan du konfigurere et Dataverse plug-in til at inkorporere Application Insights sporing, generere nye span-id
s- og sporingsmeddelelser.
Dataverse-integration
Lad os nu undersøge, hvordan du implementerer dette mønster ved hjælp af de generelt tilgængelige funktioner i Dataverse.
Sådan anvender du distribueret sporing på kald til web-API'en Dataverse:
- Brug Dataverse meddelelser til at udvide meddelelsespipelinen.
- Opret en brugerdefineret API med Dataverse plug-ins, der bruger Application Insights SDK til at tilføje de påkrævede overordnede-underordnede relationer.
Kalde på fra andre Power Platform tjenester
Lad os sige, at du vil tillade, at andre Power Platform tjenester, f.eks. Copilot Studio, Power Apps eller Power Automate cloudflows, inkluderes i den overordnede distribuerede sporingsløsning. Overvej at aktivere en funktion fra en app, et flow, en kode eller en anden funktion for at kalde de Dataverse brugerdefinerede API'er, som beskrevet i dette afsnit.
Dataverse meddelelser for objekter eller brugerdefinerede API'er
Du kan definere brugerdefinerede Dataverse meddelelser, der giver dig mulighed for at interagere med objekter eller brugerdefinerede API'er i miljøet Dataverse. Dataverse meddelelser giver dig mulighed for at strømline dine Datastyring-processer og sikre problemfri integration med dine observerbarhedsbehov. Flere oplysninger i Opret dine egne meddelelser.
Tilføj trin til en plug-in
Når du har oprettet en Dataverse meddelelsestype eller bruger en foruddefineret objekttype i et miljø, kan du bruge en plug-in til at konfigurere udførelse på forskellige stadier i databehandlingspipelinen og tillade distribueret sporing. Flere oplysninger i Brug plug-ins til at udvide forretningsprocesser.
Pipelinefaserne kan omfatte trin til prævalidering, forbehandling og efterdrift. Ved at føje trin til en plug-in styrer du dataflowet og sikrer, at handlingerne udføres på det rigtige tidspunkt.
Forhåndsvalidering: Forekommer, før hovedhandlingen udføres. Det validerer dataene og sikrer, at de opfylder de krævede kriterier.
Førhandling: Forekommer efter prævalideringstrinnet, men før hovedhandlingen udføres. Det udfører eventuelle nødvendige forberedelser eller ændringer af dataene.
Efter-validering: Forekommer efter hovedhandlingen udføres. Det udfører enhver nødvendig oprydning eller andre handlinger baseret på resultaterne af hovedoperationen.
Du kan konfigurere plug-ins til at udføre disse trin enten synkront eller asynkront, afhængigt af kravene til programmet.
Usikre og sikre konfigurationsværdier
Du kan bruge felterne Usikker konfiguration og Sikker konfiguration i værktøjet til registrering af plug-ins til at styre aspekter af plug-in'ens funktionsmåde.
Usikker konfiguration: Usikre indstillinger er synlige for alle brugere og kan omfatte indstillinger som logniveau, aktivering/deaktivering af sporing og andre ikke-følsomme oplysninger.
Sikker konfiguration: Sikre indstillinger er kun synlige for brugere med de relevante tilladelser og kan omfatte følsomme oplysninger, f.eks. forbindelsesstrenge, API-nøgler og andre fortrolige data.
I forbindelse med distribuerede sporingsscenarier skal du bruge feltet Usikker konfiguration til at administrere, om sporing er slået til, og til at angive logføringsniveauet. Brug feltet Sikker konfiguration til at gemme de oplysninger om forbindelsesstrengen, der kræves af plug-in'en.
Flere oplysninger i Registrer en plug-in.
Brugerdefineret API med parametre for anmodning og svar
Dataverse giver dig mulighed for at oprette og bruge brugerdefinerede API'er med specifikke anmodnings- og svarparametre for at opfylde dit programmets behov.
InputParameters
: Definer de inputdata, der kræves af den brugerdefinerede API. De kan omfatte forskellige datatyper, f.eks. strenge, heltal og komplekse objekter.OutputParameters
: Definer de outputdata, der returneres af den brugerdefinerede API. De kan omfatte forskellige datatyper og strukturer, så du kan give detaljerede og meningsfulde svar til API-forbrugere.
Tip
I forbindelse med distribueret sporing kan du mærke forespørgselsstrengværdien for at overføre en delt variabel fra API'en.
Brugerdefinerede behandlingstrin (synkronisering og asynkronisering)
Når du bruger brugerdefinerede behandlingstrin, kan du definere, om trinnene skal udføres synkront eller asynkront. Denne fleksibilitet giver dig mulighed for at optimere ydeevnen og reaktionsevnen for din applikation.
- Synkron behandling: Trinnene udføres sekventielt. Det næste trin starter ikke, før det aktuelle trin er fuldført. Denne fremgangsmåde sikrer, at hvert trin fuldføres, før du går videre til det næste.
- Asynkron behandling: Trinnene udføres individuelt. Det næste trin kan starte, før det aktuelle trin er fuldført. Denne fremgangsmåde giver mulighed for parallel behandling og kan forbedre den samlede ydeevne for din applikation.
Ved at definere brugerdefinerede behandlingstrin kan du føje overvågning og andre funktioner til eksisterende objekter eller brugerdefinerede API-meddelelser, hvilket sikrer, at din applikation fungerer effektivt.
Dataverse C#-plug-ins
Byg og udrul Dataverse C#-plug-ins, der bruger Application Insights SDK til at oprette den korrekte overordnet-underordnede relation mellem tjenester. Flere oplysninger i Skriv en plug-in.
Sammenligning af brugerdefineret plug-in og out-of-the-box ILogger
Dataverse indeholder en køreklar ILogger, der kan konfigureres på miljøniveau. Den indbyggede ILogger er designet til at tilbyde en standardiseret logningsmekanisme på tværs af forskellige miljøer, hvilket sikrer konsistens og brugervenlighed. Det giver dog muligvis ikke det samme niveau af granularitet og tilpasning som den brugerdefinerede plug-in ILogger.
Den brugerdefinerede plug-in ILogger i Dataverse tilbyder mere detaljerede niveauer af oplysninger, såsom sporing, fejlfinding og information. Det giver udviklere mulighed for at fange mere specifikke og relevante data under udførelsen af plug-ins. ILogger bruger værdier fra meddelelsesanmodningen eller tagparameteren Del variabel til at angive den kaldende sporingsoverordnede for bedre sporing og korrelation af logfiler.
Flere oplysninger i Skrive telemetri til Application Insights-ressourcen ved hjælp af ILogger.
Nøglebegreber i C# til fortolkning af aktivitet og angivelse af overordnet id
Når du bruger den brugerdefinerede plug-in ILogger, er det vigtigt at forstå centrale C#-begreber til fortolkning af aktivitet og angivelse af det overordnede id. Her er et eksempel på, hvordan du opretter en ny aktivitet for en sporingsmeddelelse:
// Create a new activity for the trace message
var activity = new Activity("CustomActivity");
activity.SetParentId(traceParent);
activity.Start();
// Create a trace telemetry record
var traceTelemetry = new TraceTelemetry(message, ConvertLogLevel(level))
{
Message = message,
Context = { Operation = { ParentId = dependencyTelemetry.Id, Id = activity.Id } }
};
// Track the trace telemetry
telemetryClient.TrackTrace(traceTelemetry);
Tip
OpenTelemetri-eksempelprojektet Dataverse indeholder et eksempel på en Dataverse plug-in-integration med OpenTelemetry. OpenTelemetry er en samling af W3C-standarder, API'er, SDK'er og værktøjer, som du kan bruge til at instrumentere, generere, indsamle og eksportere telemetridata.
Bidragydere
Microsoft vedligeholder denne artikel. Følgende bidragydere skrev denne artikel.
Hovedforfattere:
- Grant Archibald, Senior Program Manager