Telemetriegebeurtenissen voor Microsoft Dataverse
De gegevensstroom biedt momenteel prestatiegegevens met betrekking tot inkomende Dataverse-API-oproepen, uitvoeringsoproepen van Dataverse-plug-ins, en Dataverse-SDK-oproepen. Verder biedt de gegevensstroom gegevens voor fouten in plug-in- en Dataverse-SDK-bewerkingen.
Inkomende Dataverse-API-oproepen
Dit zijn oproepen naar de Dataverse-API. Ze kunnen afkomstig zijn van Unified Interface (UCI), de oude webclient, aangepaste clients die gebruikmaken van de SDK, enzovoort. Ze zijn te vinden in de tabel verzoeken van Application Insights, die de volgende velden heeft.
Naam: Het type verzoek. Deze vallen in twee categorieën:
- Web API-aanvraag: Een aanvraag aan de OData v4 eindpunt die veel wordt gebruikt door Unified Interface en moderne clients. Dit verzoek wordt omgezet in een bewerking die voor beide geldig is. Web-API is een 'wrapper' om het RESTful-programmeermodel in te schakelen, maar nadat de gegevens zijn ontvangen, wordt alles hetzelfde binnen de server. Wanneer het antwoord wordt geretourneerd, wordt het geconverteerd naar JSON als het verzoek afkomstig is van de Web-API.
- Organisatieserviceaanvraag: Een aanvraag aan de organisatie-API eindpunt die wordt gebruikt door SDK-clients of de oude webclient.
Duur: De tijd die de server nodig had om op het verzoek te reageren.
Url: De URL waarnaar de aanroep is gedaan.
Aangepaste afmetingen:
UserAgent: Application Insights vult het veld van de gebruikersagent automatisch in met pc wanneer deze logboeken vanaf een server in een datacenter worden gepusht. Application Insights staat niet toe dat het veld Gebruikersagent wordt overschreven. Soms is het veld Gebruikersagent niet beschikbaar om in te vullen. De gebruikersagent vanwaar de oproep is gedaan, kan worden bekeken met behulp van de volgende query:
requests | summarize count() by tostring(customDimensions.userAgent)
Operation_Name: De leesbare naam van de bewerking die moet worden weergegeven in weergaven, zoals de end-to-end transactieweergave.
Uitvoeringslogboeken Dataverse-plug-ins
Deze logboeken voor aangepaste plug-ins die voor een bepaalde bewerking worden uitgevoerd, zijn te vinden in de tabel afhankelijkheid. Het volgende is een voorbeeldquery:
dependencies
| where type == "Plugin"
| take 100
- Naam/Doel: De volledig gekwalificeerde typenaam voor de plug-in die wordt uitgevoerd.
- Duur: De tijd die nodig was om de plug-in uit te voeren.
- Aangepaste afmetingen:
- Diepte: De huidige diepte van de uitvoering in de aanroepstack.
- EntityName: De naam van de entiteit waarop de plug-in actie onderneemt.
- IsolationType: Een waarde die aangeeft of de plug-in in de sandbox wordt uitgevoerd:
- 1: Geen
- 2: Sandbox
- 3: Extern
- PluginName: De gebruiksvriendelijke naam van de plug-in.
- PluginType: De naam van het type plug-in dat wordt uitgevoerd.
- PluginVersion: De versie van de gepubliceerde plug-in. Deze informatie is bedoeld om te helpen bij het oplossen van problemen met versie-updates.
- Fase: Wordt toegewezen aan de volgende waarden:
- PreValidation = 10
- PreOperation = 20
- PreOperationBeforeExternalPlugins = 15
- PreOperationAfterExternalPlugins = 25
- MainOperation = 30
- PostOperationBeforeExternalPlugins = 35
- PostOperationAfterExternalPlugins = 45
- PostOperation = 40
- PostOperationDeprecated = 50
- StepName: De naam van de SDK-berichtverwerking stap. Dit wordt meestal gegenereerd door de registratietool voor plug-ins aan de hand van informatie over de PluginName, het PluginType en de naam van de bewerking, bijvoorbeeld ErrorMessageTest.ThrowException: Account aanmaken.
Telemetrie in de code van de plug-in
Om te begrijpen wat er gebeurt binnen de code van uw plug-in, kunt u aangepaste telemetrie opnemen vanuit uw plug-in door de Microsoft.Xrm.Sdk.PluginTelemetry.ILogger Interface in uw plug-incode te gebruiken om telemetriegegevens rechtstreeks naar uw Application Insights resource te schrijven. Meer informatie: Telemetrie schrijven naar uw Application Insights-bron met behulp van ILogger (preview)
Dataverse-SDK-logboeken
Dit zijn logboeken voor SDK-bewerkingen die worden geactiveerd als onderdeel van een inkomend verzoek. Deze worden gelogd in de tabel afhankelijkheid in Application Insights, omdat ze worden bijgehouden als afhankelijkheden voor het uitvoeren van de aanvraag. Ze worden geïdentificeerd door de typenaam, beginnend met SDK. Het volgende is een voorbeeldquery:
dependencies
| where type startswith "SDK"
| take 10
- Type: Het type SDK-aanvraag dat is geactiveerd. Voorbeelden zijn Retrieve, RetrieveMultiple, FetchXmlToQueryExpression en WhoAmI.
- Naam/Doel: Dit is de naam van de entiteit waarop de SDK-bewerking zich richt.
- Aangepaste afmetingen:
- ClientType: Het type client waarvan de aanroep afkomstig is. Enkele mogelijke waarden zijn Web, UCIClient en OutlookFull.
- EntityId: De unieke identificatie van de entiteit die wordt gebruikt.
- EntityName: De naam van de entiteit die wordt gebruikt.
Uitzonderingen
U ziet details van fouten in plug-in- en SDK-bewerkingen in Application Insights. Het deelvenster Fouten wordt gevoegd door de tabel met uitzonderingen in Application Insights. Deze foutdetails correleren met de rest van de gebeurtenissen in de plug-in en SDK-aanroepen in de end-to-end-weergave. Alle beschikbare informatie wordt waar mogelijk aan kolommen toegevoegd en aan customDimensions wanneer er geen exacte kolomovereenkomst is.
U zult merken dat sommige velden in de tabel uitzonderingen niet worden ingevuld. Dit komt omdat deze velden alleen kunnen worden ingesteld als de Application Insights-SDK wordt gebruikt voor het uitzenden van logboeken van de bron. Deze functie verzamelt platformtelemetrie en pusht deze vervolgens naar Application Insights overeenkomstig het Application Insights-schema.
exceptions
| take 10
Deze query retourneert alle attribuutdetails uit de tabel uitzondering.
- problemId/type: Het type uitzondering.
- outerMessage: Het uitzonderingsbericht.
- aangepasteAfmetingen:
- clientType: Het type client waarvan de aanroep afkomstig is. Enkele mogelijke waarden zijn Web, UCIClient en OutlookFull.
- exceptionSource: De plug-in of aanwijzen waar de uitzondering is opgetreden.
- entityName: De naam van de entiteit die wordt gebruikt.
- pluginName: De naam van de plug-in waarbij de uitzondering is opgetreden.
Als een gebruiker een fout meldt, kunt u de gebruikers-ID (Microsoft Entra ID) gebruiken om details uit de tabel uitzondering te begrijpen.
exceptions
| where user_Id == '00aa00aa-bb11-cc22-dd33-44ee44ee44ee'
De entiteits-ID en entiteitsnaam zijn beschikbaar in customDimensions in de tabel afhankelijkheid.
dependencies
| where type == "SDK Retrieve"
Veelgestelde vragen (FAQ's)
Hieronder volgen enkele veelgestelde vragen over telemetriegebeurtenissen in Dataverse.
Hoe kan ik bepalen of de upgrade van mijn plug-in een prestatievermindering heeft veroorzaakt?
dependencies
| where ['type'] == "Plugin"
| where name startswith "[InsertYourPluginName]"
| summarize avg(duration) by name
De naam van de plug-in moet ook de versie voor aangepaste plug-ins bevatten.
Hoe presteerde de API eerder op een gemeld probleem, op basis van tijd van de dag of locatie? Was de verslechtering van de API geleidelijk of plotseling?
requests
| where url == "https://<URLHere>"
| summarize avg(duration), count() by bin(timestamp, 1h)
| render timechart
In deze grafiek kunnen we de prestaties van het API eindpunt over een bepaalde periode zien ten opzichte van het aantal verzoeken dat wordt gedaan.
U kunt ook een waarschuwing instellen gebaseerd op de prestaties van een bepaalde API binnen Application Insights.
Kan ik inzoomen op fouten of storingen op specifieke tijden of voor specifieke gebruikers om meer inzicht te krijgen in de callstack?
Het paneel Storingen geeft een overzicht van de storingen in een bepaalde periode. U kunt vervolgens inzoomen op een storing op basis van de API-aanroep of het afhankelijkheidstype om de end-to-end-weergave te bekijken.
Kan ik aangepaste dashboards maken?
Ja. U kunt aangepaste dashboards maken met Application Insights.
Kan ik de gebruiksprestaties van plug-ins (responstijd) en uitvalpercentages tijdens piekgebruik bepalen?
Ja. Zie de volgende voorbeeldquery om te begrijpen hoe uw plug-ins presteren.
dependencies
| where ['type'] == "Plugin"
| where name == "[Plugin name here]"
| summarize avg(duration) by bin(timestamp, 1h)
| render timechart
Beschikt deze telemetrie over aanvraagbeperking?
Ja. Er worden momenteel details verstrekt over Basic 429-fouten.
Kan ik uitvoeringspaden begrijpen? Wordt de plug-in vertraagd door oproepen die door de plug-in worden verricht?
Ja. U kunt alle berichten en plug-ins die voor elk verzoek worden uitgevoerd bekijken.
De duur van de uitvoering van alle berichten en plug-ins wordt vastgelegd. Als een plug-in meer tijd kost, kunt u die plug-in identificeren. Als de plug-in een callback uitvoert naar Dataverse, wordt de duur van die oproep vastgelegd. Meer informatie over plug-ins is gepland voor toekomstige implementatie.
Elke uitgaande oproep die door de plug-in wordt gedaan, wordt automatisch geregistreerd als een afhankelijkheid.
Kan ik telemetrie bekijken voor een specifiek verzoek?
Dataverse retourneert x-ms-service-requestId in het headerantwoord op alle aanvragen. Met deze requestId kunt u alle telemetrie opvragen.
union *
| where operation_ParentId contains <requestId>