Перейти к основному содержимому

Трассировка и отладка GraphQL-запросов в сервисе доступа к хранилищу данных

Сервис доступа к данным поддерживает работу с GraphQL-запросами.

Трассировка GraphQL-запросов позволяет:

  • отлаживать GraphQL-запросы;
  • выявлять проблемы производительности для построения более эффективных запросов;
  • выявлять изменения модели хранилища на этапе разработки.

При включении трассировки сервис доступа к хранилищу данных вместе с данными возвращает:

  • текст GraphQL-запроса;
  • SQL-запрос, в который транслировался исходный GraphQL-запрос;
  • C#-выражение, использовавшееся для генерации SQL-запроса.

Включение трассировки через административную консоль

Чтобы включить у пользователя трассировку в административной консоли в разделе Security следует:

  • настроить права на трассировку. Для настройки права на трассировку на вкладке Namespaces административной консоли выбрать и нажать DataService, на вкладке Objects выбрать объект TraceRequest, нажать ссылку в столбце Permission, на открывшейся вкладке Permission в поле Operation Type выбрать значение Trace, в поле Permission выбрать Allow.

  • добавить два параметра в GraphQl-клиенте:

    • diagTraceId = GUID: любой GUID, например, 9967c1c7-4a39-4e09-9bd8-aae4aca10522;
    • diagTraceLevel = ‘log level’: уровень логирования с которым пишется диагностическая информация в системный лог сервиса. Может иметь следующие значения:
      • I: information;
      • D: debug;
      • T: trace.

Результаты трассировки GraphQL-запросов будут доступны после выполнения GraphQL-запроса или мутации.

Включение трассировки при вызове метода API

При работе с хранилищем через сторонних клиентов, например Altair, чтобы включить режим трассировки в GraphQL-запрос требуется добавить http-заголовки:

  • diagTraceId = GUID: идентификатор сессии трассировки, значение типа GUID
  • diagTraceLevel = ‘log level’: уровень логирования с которым пишется диагностическая информация в системный лог сервиса. Может иметь следующие значения:
    • I: information;
    • D: debug;
    • T: trace.

Затем выполнить запрос к хранилищу, например:

{
system_file(take:2) {
items {
name,
Id
}
pageInfo {
hasNextPage
hasPreviousPage
}
totalCount
}
}

В ответе на запрос будет получена дополнительная информация трассировщика:

{
"data": {
"system_file": {
"items": [
{
"name": "fake.ifc",
"Id": "6cb74db8-d711-4b94-8b98-fdff132d852a"
},
{
"name": "test_file_1 (1).txt",
"Id": "ca43049d-31b5-479c-b600-a18fbed5ef4a"
}
],
"pageInfo": {
"hasNextPage": true,
"hasPreviousPage": false
},
"totalCount": 92
}
},
"extensions": {
"traceInfo": {
//время выполнения запроса
"duration": "00:00:00.0564246",
"traceId": "F47F47AA-D34D-4788-9F68-E4882E75794B",
//GraphQL запрос
"query": "{system_file(take: 2){items {name, Id}pageInfo {hasNextPage,hasPreviousPage} totalCount}}",
//SQL запрос
"sql": "-- @__p_0='3' SELECT v.name, v.id AS \"Id\" FROM system.v_file AS v LIMIT @__p_0"
}
}
}

Трассировка при использовании методов библиотеки

Если работа с хранилищем осуществляется с помощью клиента C#, то необходимо перед отправкой запроса вызвать метод контекста context.SetDiagLevel(DiagTraceLevel.Debug. В ответе вернется информация трассировщика запросов.

предупреждение

Все данные трассировки записываются в системный лог, согласно настройке уровня логирования.