Zdarzenia telemetrii dla usługi Microsoft Dataverse
Notatka
Nowe i ulepszone Power Platform centrum administracyjne jest teraz dostępne w publicznej wersji zapoznawczej! Zaprojektowaliśmy nowe centrum administracyjne tak, aby było łatwiejsze w użyciu i wyposażone w nawigację zorientowaną na zadania, która pomaga szybciej osiągać określone wyniki. Będziemy publikować nową i zaktualizowaną dokumentację, gdy nowe Power Platform centrum administracyjne stanie się ogólnie dostępne.
Strumień danych dostarcza obecnie danych wydajnościowych związanych z połączeniami przychodzącymi API Dataverse, połączeniami wykonawczymi wtyczek Dataverse oraz połączeniami SDK Dataverse. Dostarcza również danych dla awarii w operacjach wtyczek i Dataverse SDK.
Przychodzące połączenia Dataverse API
Są to połączenia z API Dataverse. Mogą one pochodzić z interfejsu Unified Interface (UCI), starszego klienta sieciowego, klientów niestandardowych korzystających z zestawu SDK itd. Znajdują się one w tabeli żądań w Application Insights, która posiada następujące pola.
Name: Rodzaj żądania. Dzielą się one na dwie kategorie:
- Web API Request: Żądanie do punktu końcowego OData v4, który jest powszechnie używany przez ujednolicony interfejs i nowoczesne klienty. To żądanie jest przekształcane w operację, która jest wspólna dla obu. Interfejs sieciowy API jest „otoką” umożliwiającą zastosowanie modelu programowania RESTful, ale po otrzymaniu danych wszystko staje się takie samo w obrębie serwera. Gdy odpowiedź jest zwracana, jest ona konwertowana na JSON, jeśli żądanie pochodzi z interfejsu sieciowego API.
- Żądanie o organizację usługi: Żądanie skierowane do punktu końcowego API organizacji używanego przez klienty SDK lub starszego klienta sieciowego.
Duration: Czas potrzebny na udzielenie odpowiedzi przez serwer.
URL: Adres URL, na który zostało wykonane połączenie.
CustomDimensions:
UserAgent: Application Insights automatycznie wstawia w polu agenta użytkownika wartość PC, ponieważ dzienniki te są przesyłane z serwera w centrum danych. Application Insights nie pozwala na nadpisanie pola agenta użytkownika. Czasami, pole agenta użytkownika nie jest dostępne do wypełnienia. Agent użytkownika, z którego wykonano połączenie, może zostać wyświetlony za pomocą następującego zapytania:
requests | summarize count() by tostring(customDimensions.userAgent)
Operation_Name: Czytelna nazwa operacji, która ma być wyświetlana w widokach, np. w kompleksowym widoku transakcji.
Dzienniki wykonywania wtyczki Dataverse
Dzienniki dla niestandardowych wtyczek działających dla danej operacji znajdują się w tabeli zależność. Poniżej znajduje się przykładowe zapytanie:
dependencies
| where type == "Plugin"
| take 100
- Name/Target: W pełni kwalifikowana nazwa typu dla wykonywanej wtyczki.
- Duration: Czas potrzebny na wykonanie wtyczki.
-
CustomDimensions:
- Depth: Bieżąca głębia wykonania w stosie wywołań.
- EntityName: Nazwa podmiotu, na którym działa wtyczka.
-
IsolationType: Wartość wskazująca, czy wtyczka jest wykonywana w środowisku piaskownicy:
- 1: Brak
- 2: Piaskownica
- 3: Zewnętrzne
- PluginName: Przyjazna dla użytkownika nazwa wtyczki.
- PluginType: Nazwa typu wykonywanej wtyczki.
- PluginVersion: Wersja opublikowanej wtyczki. Celem jest umożliwienie wykorzystania tych informacji do rozwiązywania problemów z aktualizacjami wersji.
-
Stage: Mapowanie na następujące wartości:
- PreValidation = 10
- PreOperation = 20
- PreOperationBeforeExternalPlugins = 15
- PreOperationAfterExternalPlugins = 25
- MainOperation = 30
- PostOperationBeforeExternalPlugins = 35
- PostOperationAfterExternalPlugins = 45
- PostOperation = 40
- PostOperationDeprecated = 50
- StepName: Nazwa kroku przetwarzania komunikatów SDK. Zazwyczaj jest on generowany przez narzędzie do rejestracji wtyczek przy użyciu informacji o PluginName, PluginType oraz nazwy operacji — np. ErrorMessageTest.ThrowException: Utworzenie konta.
Telemetria w kodzie wtyczki
Aby zrozumieć, co dzieje się wewnątrz Twojego kodu wtyczki, możesz włączyć niestandardową telemetrię z poziomu wtyczki, używając interfejsu Microsoft.Xrm.Sdk.PluginTelemetry.ILogger w kodzie wtyczki, aby zapisywać dane telemetryczne bezpośrednio do zasobu Application Insights. Więcej informacji: Zapisywanie telemetrii w zasobie Application Insights za pomocą ILogger (podgląd)
Dzienniki SDK Dataverse
Są to dzienniki dla operacji SDK wywołanych jako część przychodzącego żądania. Są one logowane do tabeli zależności w Application Insights, ponieważ są one śledzone jako zależności do wykonania żądania. Są one identyfikowane przez nazwę typu, zaczynającą się od SDK. Poniżej znajduje się przykładowe zapytanie:
dependencies
| where type startswith "SDK"
| take 10
- Type: Typ wywołanego żądania SDK. Przykłady obejmują Retrieve, RetrieveMultiple, FetchXmlToQueryExpression oraz WhoAmI.
- Name/Target: Jest to nazwa podmiotu będącego celem operacji SDK.
-
CustomDimensions:
- ClientType: Typ klienta, od którego pochodzi połączenie. Możliwe wartości to Web, UCIClient i OutlookFull.
- EntityId: Unikalny identyfikator używanego podmiotu.
- EntityName: Nazwa używanej jednostki.
Wyjątki
Szczegóły niepowodzeń w operacjach na wtyczkach i SDK zobaczysz w Application Insights. Tabela wyjątków w Application Insights zasila panel Niepowodzenia. Te szczegóły niepowodzenia korelują z resztą zdarzeń w wywołaniach wtyczki i SDK w widoku end-to-end. Wszystkie dostępne informacje są dodawane do kolumn, gdy jest to możliwe oraz do customDimensions, gdy nie ma dokładnego dopasowania do kolumny.
Zauważysz, że niektóre pola w tabeli wyjątków nie są wypełnione. Dzieje się tak, ponieważ pola te mogą być ustawione tylko wtedy, gdy SDK Application Insights jest używane do wysyłania logów ze źródła. Funkcja ta zbiera telemetrię platformy, a następnie przesyła ją do Application Insights zgodnie ze schematem Application Insights.
exceptions
| take 10
To zapytanie zwróci wszystkie szczegóły atrybutów z tabeli wyjątków.
- problemId/type: Typ wyjątku.
- outerMessage: Komunikat o wyjątkach.
-
customDimensions:
- clientType: Typ klienta, od którego pochodzi połączenie. Możliwe wartości to Web, UCIClient i OutlookFull.
- exceptionSource: Wtyczka lub punkt, gdzie został wyświetlony wyjątek.
- entityName: Nazwa używanej jednostki.
- pluginName: Nazwa wtyczki, w której został wyświetlony wyjątek.
Jeśli użytkownik zgłosi błąd, możesz użyć identyfikatora użytkownika (Microsoft Entra ID), aby poznać szczegóły z tabeli wyjątków .
exceptions
| where user_Id == '00aa00aa-bb11-cc22-dd33-44ee44ee44ee'
ID podmiotu i nazwa podmiotu są dostępne w customDimensions w tabeli zależności.
dependencies
| where type == "SDK Retrieve"
Często zadawane pytania (FAQ)
Poniżej przedstawiono niektóre często zadawane pytania dotyczące zdarzeń telemetrycznych dla Dataverse.
Jak ustalić, czy uaktualnienie dodatku plug-in spowodowało obniżenie wydajności?
dependencies
| where ['type'] == "Plugin"
| where name startswith "[InsertYourPluginName]"
| summarize avg(duration) by name
Nazwa dodatku plug-in powinna również zawierać wersję dla niestandardowego dodatu plug-in.
Jak działał interfejs API przed zgłoszeniem problemu (na podstawie godziny dnia lub lokalizacji)? Czy pogorszenie działania interfejsu API było stopniowe, czy nagłe?
requests
| where url == "https://<URLHere>"
| summarize avg(duration), count() by bin(timestamp, 1h)
| render timechart
Na tym wykresie możemy zobaczyć wydajność punktu końcowego interfejsu API w czasie, w stosunku do liczby zgłaszanych żądań.
Można także skonfigurować alert na podstawie wydajności konkretnego interfejsu API w tym miejscu w obszarze Application Insights.
Czy można przejść do szczegółów błędów lub usterek w określonych godzinach lub dla określonych użytkowników, aby zapoznać się ze stosem wywołań?
Panel Niepowodzenia zawiera przegląd błędów w danym okresie. Następnie można zawęzić do konkretnego błędu na podstawie wywołania interfejsu API lub typu zależności, aby zobaczyć widok end-to-end.
Czy mogę tworzyć własne pulpity nawigacyjne?
Tak. Można tworzyć własne pulpity nawigacyjne za pomocą Application Insights.
Czy mogę określić wydajność użytkowania wtyczek (czas reakcji) i awaryjność w czasie największego obciążenia?
Tak. Zobacz poniższe przykładowe zapytanie, aby zrozumieć jak działają Twoje wtyczki.
dependencies
| where ['type'] == "Plugin"
| where name == "[Plugin name here]"
| summarize avg(duration) by bin(timestamp, 1h)
| render timechart
Czy ta telemetria będzie miała dławienie?
Tak. Obecnie podawane informacje o podstawowym błędzie 429.
Czy mogę zrozumieć ścieżki wykonania? Czy połączenia wykonywane przez wtyczkę spowalniają ją?
Tak. Możesz przeglądać wszystkie komunikaty i wtyczki, które są wykonywane dla dowolnego żądania.
Czas wykonywania wszystkich komunikatów i wtyczek jest rejestrowany. Jeśli wykonanie jakiejś wtyczki zajmuje więcej czasu, można ją zidentyfikować. Jeśli wtyczka wykonuje wywołanie zwrotne do Dataverse, czas trwania tego połączenia jest rejestrowany. Więcej informacji na temat wtyczek jest planowanych do wdrożenia w przyszłości.
Każde połączenie wychodzące wykonane przez wtyczkę zostanie automatycznie zarejestrowane jako zależność.
Czy mogę zobaczyć telemetrię dla konkretnego żądania?
Dataverse zwraca x-ms-service-requestId w nagłówku odpowiedzi na wszystkie żądania. Używając tego requestId, możesz zapytać o całą telemetrię.
union *
| where operation_ParentId contains <requestId>