События телеметрии для Microsoft Dataverse
Поток данных в настоящее время предоставляет данные о производительности, связанные с входящие вызовы API Dataverse, вызовы выполнения подключаемого модуля Dataverse и вызовы SDK Dataverse. Он также предоставляет данные о сбоях в подключаемый модуль и операциях SDK Dataverse.
Входящие вызовы API Dataverse
Это вызовы выполнены к API Dataverse. Это могут быть единый интерфейс (UCI), устаревший веб-клиент, настраиваемые клиенты, использующие SDK, и т.д. Их можно найти в таблица Запросы в Application Insights, которая имеет следующие поля.
Имя: Тип запроса. Они делятся на две категории:
- Запрос веб-API: запрос к OData v4 конечная точка, который обычно используется единый интерфейс и современными клиентами. Этот запрос преобразуется в операцию, общую для обоих. Веб-API — это "программа-оболочка" для включения модели программирования RESTful, но после получения данных на сервере все становится таким же. Когда ответ возвращается, он преобразуется в JSON, если запрос поступил из веб-API.
- Запрос на обслуживание организации: запрос к API организации конечная точка, используемый клиентами SDK или устаревшим веб-клиентом.
Длительность: время, которое потребовалось серверу для ответа на запрос.
Url: URL-адрес, на который был совершен вызов.
Пользовательские размеры:
UserAgent: Application Insights автоматически заполняет поле агента пользователя значением ПК , поскольку эти журналы передаются с сервера в центре обработки данных. Application Insights не позволяет переопределить поле агента пользователя. Иногда поле агента пользователя недоступно для заполнения. Агент пользователя, из которого был сделан вызов, можно просмотреть с помощью следующего запроса:
requests | summarize count() by tostring(customDimensions.userAgent)
Operation_Name: читаемое имя операции для отображения в представлениях, например в представлении сквозной транзакции.
Журналы выполнения подключаемых модулей Dataverse
Эти журналы для настраиваемых подключаемых модулей, работающих для данной операции, находятся в таблице зависимость. Ниже приводится пример запроса:
dependencies
| where type == "Plugin"
| take 100
- Имя/Цель: Полное имя типа для исполняемого подключаемого модуля.
- Длительность: количество времени, которое потребовалось для выполнения плагина.
- Пользовательские размеры:
- Глубина: Текущая глубина выполнения в стеке вызовов.
- 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 шаг. Обычно это генерируется инструментом регистрации подключаемого модуля с использованием информации о PluginName, PluginType и название операции — например ErrorMessageTest.ThrowException: создание учетной записи.
Телеметрия в коде вашего подключаемого модуля
Чтобы понять, что происходит внутри кода вашего плагина, вы можете включить пользовательскую телеметрию из вашего плагина, используя интерфейс Microsoft.Xrm.Sdk.PluginTelemetry.ILogger в вашем коде плагина для записи данных телеметрии непосредственно в ваш Application Insights ресурс. Дополнительные сведения: Запишите телеметрию на ваш Application Insights ресурс с использованием ILogger (предварительная версия)
Журналы SDK Dataverse
Это журналы для операций SDK, запущенных как часть входящего запроса. Они регистрируются в таблице зависимость в Application Insights, потому что они отслеживаются как зависимости для выполняемого запроса. Они идентифицируются по имени типа, начиная с SDK. Ниже приводится пример запроса:
dependencies
| where type startswith "SDK"
| take 10
- Тип: Тип инициированного запроса SDK. Примеры включают Retrieve, RetrieveMultiple, FetchXmlToQueryExpression и WhoAmI.
- Имя/Цель: Это имя сущности, на которую нацелена операция SDK.
- Пользовательские размеры:
- ClientType: тип клиента, от которого поступает вызов. Некоторые возможные значения: Web, UCIClient и OutlookFull.
- EntityId: уникальный идентификатор используемой сущности.
- EntityName: Имя используемой сущности.
Исключения
Вы увидите сведения о сбоях в подключаемый модуль и операциях SDK в Application Insights. В таблице исключения в Application Insights приводит в действие панель Сбои. Эти сведения об ошибках коррелируют с остальными событиями в подключаемый модуль и вызовах SDK в сквозном представлении. Вся доступная информация по возможности добавляется в столбцы и в customDimensions когда нет точного совпадения столбца.
Вы заметите, что некоторые поля в таблица исключения не заполнены. Это потому, что эти поля могут быть заданы только в том случае, если SDK Application Insights используется для отправки журналов из источника. Эта функция собирает телеметрию платформы и затем помещает ее в Application Insights в соответствии с схема Application Insights.
exceptions
| take 10
Этот запрос вернет все сведения об атрибутах из таблицы исключение.
- problemId/type: Тип исключения.
- outerMessage: Сообщение об исключении.
- пользовательскиеРазмеры:
- clientType: тип клиента, от которого поступает вызов. Некоторые возможные значения: Web, UCIClient и OutlookFull.
- exceptionSource: плагин или точка, где было выдано исключение.
- entityName: Имя используемой сущности.
- pluginName: Имя плагина, в котором возникло исключение.
Если пользователь сообщает об ошибке, вы можете использовать ИД пользователя (ИД Microsoft Entra ID), чтобы проанализировать сведения из таблицы исключений.
exceptions
| where user_Id == '00aa00aa-bb11-cc22-dd33-44ee44ee44ee'
ИД и имя сущности доступны в customDimensions в таблице зависимость.
dependencies
| where type == "SDK Retrieve"
Часто задаваемые вопросы (FAQ)
Ниже приведены некоторые часто задаваемые вопросы, связанные с событиями телеметрии для Dataverse.
Как я могу определить, вызвало ли обновление моего подключаемого модуля снижение производительности?
dependencies
| where ['type'] == "Plugin"
| where name startswith "[InsertYourPluginName]"
| summarize avg(duration) by name
Имя подключаемого модуля также должно содержать версию для настраиваемых подключаемых модулей.
Насколько работал API до появления сообщения о проблеме, в зависимости от времени суток или расположения? Ухудшение API было постепенным или внезапным?
requests
| where url == "https://<URLHere>"
| summarize avg(duration), count() by bin(timestamp, 1h)
| render timechart
На этой диаграмме мы можем увидеть производительность конечной точки API за период времени в зависимости от количества сделанных запросов.
Вы также можете настроить оповещение на основе производительности конкретного API здесь, в Application Insights.
Могу ли я выполнить детализацию об ошибках или сбоях в определенное время или для конкретных пользователей, чтобы понять стек вызовов?
Взгляд на панель Сбои дает обзор сбоев за определенный период времени. Затем вы можете сузить поиск до определенного сбоя на основе вызова API или типа зависимости, чтобы увидеть сквозное представление.
Могу ли я создавать настраиваемые информационные панели?
Да. Вы можете построить настраиваемые информационные панели с помощью Application Insights.
Могу ли я определить производительность использования подключаемого модуля (время отклика) и частоту отказов во время пикового использования?
Да. См. следующий пример запроса, чтобы понять, как работают ваши подключаемые модули.
dependencies
| where ['type'] == "Plugin"
| where name == "[Plugin name here]"
| summarize avg(duration) by bin(timestamp, 1h)
| render timechart
Будет ли у этой телеметрии регулирование количества запросов?
Да. В настоящее время представлены сведения об основной ошибке 429.
Могу ли я понять пути выполнения? Вызовы, выполняемые подключаемым модулем, замедляют работу подключаемого модуля?
Да. Вы можете просмотреть все сообщения и подключаемые модули, которые выполняются по любому запросу.
Регистрируется продолжительность выполнения всех сообщений и подключаемых модулей. Если какой-либо подключаемый модуль требует больше времени, вы можете идентифицировать этот подключаемый модуль. Если подключаемый модуль выполняет обратный вызов Dataverse, длительность этого вызова регистрируется. Дополнительные сведения о подключаемых модулях планируется развернуть в будущем.
Любой исходящий вызов, сделанный подключаемым модулем, автоматически регистрируется как зависимость.
Могу ли я просмотреть телеметрию по конкретному запросу?
Dataverse возвращает x-ms-service-requestId в отклике заголовка на все запросы. Используя этот requestId, вы можете запрашивать всю телеметрию.
union *
| where operation_ParentId contains <requestId>