Поділитися через


Події телеметрії для Microsoft Dataverse

На цей час потік даних забезпечує дані продуктивності, пов’язані з вхідними викликами API Dataverse, викликами виконання компонентів plug-in Dataverse і викликами SDK Dataverse. Він також забезпечує дані для збоїв у операціях компонентів plug-in SDK Dataverse.

Вхідні виклики API Dataverse

Це виклики API Dataverse. Вони можуть надходити від єдиного інтерфейсу (UCI), успадкованого веб-клієнта, настроюваних клієнтів, які використовують SDK тощо. Вони знаходяться в таблиці запити програми Application Insights, яка має наведені далі поля.

  • Назва: Тип запиту. Вони розділяються на дві категорії.

    • Запит веб-API: запит до кінцевої точки OData v4, який зазвичай використовується єдиним інтерфейсом і сучасними клієнтами. Цей запит перетворюється на операцію, спільну як для першого, так і для других. Веб-API – це «обгортка», яка уможливлює модель програмування RESTful, але після отримання даних на сервері все є таким самим. Після повернення відповіді, вона конвертується на JSON, якщо запит надійшов від веб-API.
    • Запит до служби організації: запит до кінцевої точки API організації, яка використовується клієнтами SDK або застарілим веб-клієнтом.
  • Тривалість: час, який знадобився серверу, щоб відповісти на запит.

  • URL-адреса, на яку було здійснено дзвінок.

  • Користувацькі розміри:

    • UserAgent: Application Insights автоматично заповнює поле агента користувача на ПК , коли ці журнали надсилаються з сервера в центрі обробки даних. Application Insights не дозволяє перезаписувати поле агенту користувача. Іноді поле агента користувача недоступне для заповнення. Агента користувача, з якого здійснено виклик, можна переглянути за допомогою наведеного нижче запиту.

      requests
      | summarize count() by tostring(customDimensions.userAgent)
      

      Application Insights UserAgent CustomDimensions.

  • Operation_Name: читабельна назва операції для відображення в поданнях, таких як наскрізне транзакція подання.

Журнали виконання компонента plug-in Dataverse

Ці журнали для настроюваних компонентів plug-in, запущених для певної операції, знаходяться в таблиці залежностей. Нижче наведено приклад запиту.

dependencies
| where type == "Plugin"
| take 100

Application Insights Dataverse Журнали виконання плагінів.

  • Ім’я/Ціль: Повне ім’я типу для плагіна, що виконується.
  • Тривалість: проміжок часу, необхідний для виконання плагіна.
  • Користувацькі розміри:
    • Глибина: поточна глибина виконання в стеку викликів.
    • EntityName: Ім’я сутності, на яку впливає плагін.
    • IsolationType: значення , що вказує, чи виконується плагін у пісочниці:
      • 1: Немає
      • 2: Ізольоване середовище
      • 3: Зовнішнє
    • PluginName: зручна назва плагіна.
    • PluginType: назва типу плагіна, що виконується.
    • PluginVersion: версія опублікованого плагіна. Намір полягає в тому, щоб користуватися цією інформацією для пошуку та виправлення помилок у оновленнях версій.
    • Етап: Зіставлення з наступними значеннями:
      • PreValidation = 10
      • PreOperation = 20
      • PreOperationBeforeExternalPlugins = 15
      • PreOperationAfterExternalPlugins = 25
      • MainOperation = 30
      • PostOperationBeforeExternalPlugins = 35
      • PostOperationAfterExternalPlugins = 45
      • PostOperation = 40
      • PostOperationDeprecated = 50
    • StepName: ім’я крок обробки повідомлень SDK. Зазвичай це створюється інструментом реєстрації компонента plug-in із використанням значень параметрів PluginName, PluginType та імені операції, наприклад ErrorMessageTest.ThrowException: створення облікового запису.

Телеметрія в коді компонента plug-in

Щоб зрозуміти, що відбувається в коді вашого плагіна, ви можете включити спеціальну телеметрію з вашого плагіна за допомогою Microsoft. Xrm.Sdk.PluginTelemetry.ILogger Інтерфейс у вашому коді плагіна для запису даних телеметрії безпосередньо на ваш Application Insights ресурс. Докладніше див. у розділі: Записуйте телеметричні дані до ресурсу Application Insights із використанням ILogger (підготовча версія)

Журнали SDK Dataverse

Це журнали для операцій SDK, які ініціюються як частина вхідного запиту. Вони записуються до таблиці залежностей у Application Insights, тому що відстежуються як залежності для виконання запиту. Вони ідентифікуються за іменем типу, починаючи з SDK. Нижче наведено приклад запиту.

dependencies
| where type startswith "SDK"
| take 10

Application Insights запит SDK.

  • Тип: тип активованого запиту SDK. Приклади включають такі: «Отримати», RetrieveMultiple, FetchXmlToQueryExpression і WhoAmI.
  • Ім’я/ціль: це назва сутності, на яку націлюється операція SDK.
  • Користувацькі розміри:
    • ClientType: тип клієнта, від якого надходить дзвінок. Можливими значеннями є: «Веб», UCIClient і OutlookFull.
    • EntityId: унікальний ідентифікатор сутності, що використовується.
    • EntityName: Ім’я сутності, що використовується.

Винятки

Ви побачите докладні відомості про збої в компонентах plug-in і операціях SDK у Application Insights. Таблиця винятків у Application Insights є основою панелі Збої. Ці відомості про збої зіставляються з рештою подій у компоненті plug-in і викликах SDK у комплексному поданні. Уся доступна інформація додається до стовпців за можливості та до customDimensions, коли точної відповідності стовпців немає.

Ви помітите, що деякі стовпці в таблиці винятків не заповнені. Причина полягає в тому, що ці поля можуть задаватися лише при використанні SDK Application Insights для випуску журналів із джерела. Ця функція збирає телеметричні дані платформи, а потім передає їх до Application Insights відповідно до схеми Application Insights.

Application Insights Таблиця винятків.

exceptions
| take 10

Цей запит поверне докладні відомості атрибуту з таблиці винятків.

  • problemId/type: Тип винятку.
  • outerMessage: Повідомлення про винятки.
  • користувальницькі розміри:
    • clientType: тип клієнта, від якого надходить дзвінок. Можливими значеннями є: «Веб», UCIClient і OutlookFull.
    • exceptionSource: плагін або точка, де було згенеровано виняток.
    • entityName: Ім’я сутності, що використовується.
    • pluginName: Ім’я плагіна, де було згенеровано виняток.

Application Insights Деталі атрибутів таблиці винятків.

Якщо користувач повідомляє про помилку, ви можете використовувати ідентифікатор користувача (Microsoft Entra ID ID), щоб розуміти деталі з таблиці винятків .

exceptions
| where user_Id == '00aa00aa-bb11-cc22-dd33-44ee44ee44ee'

Ідентифікатор сутності та ім’я сутності доступні в customDimensions у таблиці залежностей.

dependencies
| where type == "SDK Retrieve"

Application Insights Запит на отримання SDK.

Запитання й відповіді (FAQ)

Далі наведено найбільш часті запитання стосовно подій телеметрії в Dataverse.

Як визначити, чи призведе оновлення компонента plug-in до погіршення продуктивності?

dependencies
| where ['type'] == "Plugin"
| where name startswith "[InsertYourPluginName]"
| summarize avg(duration) by name

Ім’я компонента plug-in також має містити версію для настроюваних компонентів plug-in.

Якою була продуктивність API до повідомленої проблеми, виходячи з часу дня або розташування? Чи було погіршення продуктивності API поступовим або раптовим?

requests
| where url == "https://<URLHere>"
| summarize avg(duration), count() by bin(timestamp, 1h)
| render timechart 

Application Insights Графік часу роботи API.

Ви можете бачити на цій діаграмі продуктивність кінцевої точки API протягом періоду часу, коли відбулася певна кількість запитів.

Тут ви також можете налаштувати оповіщення на основі конкретного API у Application Insights.

Чи можу я деталізувати помилки або збої в конкретні моменти часу або для конкретних користувачів, щоб забезпечити їхнє розуміння та стек викликів?

Погляд на панельПомилок надає огляд помилок протягом окремого періоду часу. Потім можна звузити аналіз до конкретної помилки на основі викликів API або типу залежності, щоб побачити комплексне подання.

Application Insights подробиці збоїв.

Чи можу я створювати настроювані приладні дошки?

Так. Ви можете створювати настроювані приладні дошки за допомогою Application Insights.

Чи можу я визначити продуктивність використання компонента plug-in (час відгуку) і частоту помилок під час періодів пікового використання?

Так. Для розуміння продуктивності свого компонента plug-in див наведений далі зразок запиту.

dependencies
| where ['type'] == "Plugin"
| where name == "[Plugin name here]"
| summarize avg(duration) by bin(timestamp, 1h)
| render timechart

Продуктивність використання плагіна.

Чи передбачатиме ця телеметрія обмеження кількості подій?

Так. Наразі надається базова кількість подій 429 подій.

Чи можу я зрозуміти шляхи виконання? Чи виконуються виклики таким чином, що один компонент plug-in уповільнює інший компонент plug-in?

Так. Ви можете переглянути всі повідомлення і компоненти plug-in, які виконуються за будь-яким запитом.

Тривалість усіх повідомлень і виконання компонентів plug-in записується в журналі. Якщо будь-який компонент plug-in потребує більше часу, ви можете визначити цей компонент plug-in. Якщо компонент plug-in виконує зворотний виклик Dataverse, тривалість цього виклику реєструється в журналі. Додаткові відомості про компоненти plug-in заплановані для подальшого розгортання.

Усі вихідні виклики, зроблені компонентом plug-in, автоматично реєструються в журналі як залежності.

Наскрізна транзакція.

Чи можна переглянути телеметрію для певного запиту?

Програма Dataverse повертає x-ms-service-requestId у заголовку відповідей на всі запити. Із використанням requestId ви можете запитувати всі телеметричні дані.

union *
| where operation_ParentId contains <requestId>