Udostępnij za pośrednictwem


Zdarzenia telemetrii dla usługi Microsoft Dataverse

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.

  • Nazwa: typ żądania. Dzielą się one na dwie kategorie:

    • Żądanie internetowego interfejsu API: żądanie do punktu końcowego OData w wersji 4, który jest często używany przez ujednolicony interfejs i nowoczesnych klientów. 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 obsługi organizacji: żądanie do punktu końcowego interfejsu API organizacji używane przez klientów zestawu SDK lub starszego klienta sieci Web.
  • Czas trwania: Czas, w którym serwer odpowiedział na żądanie.

  • Adres URL: adres URL, do którego zostało wykonane połączenie.

  • Niestandardowe wymiary:

    • UserAgent: automatycznie wypełnia pole agenta użytkownika komputerem Application Insights , gdy te dzienniki są wypychane 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)
      

      Application Insights CustomDimensions UserAgent.

  • Operation_Name: czytelna nazwa operacji do wyświetlenia w widokach, takich jak widok transakcji typu end-to-end.

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

Dzienniki wykonywania wtyczki Application Insights Dataverse.

  • Nazwa/Cel: W pełni kwalifikowana nazwa typu dla uruchamianej wtyczki.
  • Czas trwania: Czas potrzebny na uruchomienie wtyczki.
  • Niestandardowe wymiary:
    • Głębokość: bieżąca głębokość wykonania w stosie wywołań.
    • EntityName: nazwa jednostki, na której działa wtyczka.
    • IsolationType: wartość wskazująca, czy wtyczka jest wykonywana w piaskownicy:
      • 1: Brak
      • 2: Piaskownica
      • 3: Zewnętrzne
    • PluginName: przyjazna dla użytkownika nazwa wtyczki.
    • PluginType: nazwa typu uruchamianej wtyczki.
    • PluginVersion: Wersja opublikowanej wtyczki. Celem jest umożliwienie wykorzystania tych informacji do rozwiązywania problemów z aktualizacjami wersji.
    • Etap: Mapuje 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 zestawu 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ę w kodzie wtyczki, możesz dołączyć niestandardowe dane telemetryczne z poziomu wtyczki przy użyciu Microsoft. Xrm.Sdk.PluginTelemetry.ILogger Interfejs w kodzie wtyczki do zapisywania danych telemetrycznych bezpośrednio w Application Insights zasobie. 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

Zestaw SDK zapytania Application Insights.

  • Typ: typ wyzwolonego żądania zestawu SDK. Przykłady obejmują Retrieve, RetrieveMultiple, FetchXmlToQueryExpression oraz WhoAmI.
  • Nazwa/element docelowy: jest to nazwa jednostki, której dotyczy operacja zestawu SDK.
  • Niestandardowe wymiary:
    • ClientType: typ klienta, z którego pochodzi połączenie. Możliwe wartości to Web, UCIClient i OutlookFull.
    • EntityId: unikatowy identyfikator używanej jednostki.
    • 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.

Tabela wyjątków 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ątku.
  • customWymiary:
    • clientType: typ klienta, z którego pochodzi połączenie. Możliwe wartości to Web, UCIClient i OutlookFull.
    • exceptionSource: wtyczka lub punkt, w którym został zgłoszony wyjątek.
    • entityName: nazwa używanej jednostki.
    • pluginName: nazwa wtyczki, w której został zgłoszony wyjątek.

Szczegóły atrybutów tabeli wyjątków Application Insights.

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"

Zapytanie o pobranie SDK Application Insights.

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 

Wykres czasu wydajności interfejsu API Application Insights.

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.

Szczegóły niepowodzenia Application Insights.

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

Wydajność wykorzystania wtyczek.

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ść.

Transakcja end-to-end.

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>