Журнал трассировки серверных методов#

Журнал трассировки серверных методов предназначен для технической диагностики выполнения серверных методов и связанных SQL-запросов в рамках отдельной сессии трассировки.

Журнал используется для:

  • анализа выполнения серверной логики;

  • выявления узких мест по времени выполнения;

  • диагностики ошибок и некорректного поведения;

  • анализа SQL-запросов, выполняемых внутри методов.

Журнал является техническим и используется преимущественно разработчиками и администраторами системы.

Журнал доступен по пути: Настройка системы > Аудит > Журнал трассировки серверных методов.

О запуске трассировки, типах трассировки, остановке записи, просмотре отчета и передаче SQL-запросов в Grafana см. в разделе «Трассировка серверных вызовов и запросов».

Интерфейс журнала#

Интерфейс журнала используется для просмотра сохраненных сессий трассировки и перехода к детализации вызовов методов и SQL-запросов.

Форма общего журнала трассировок работает в режиме просмотра и содержит:

  • панель фильтрации;

  • список сессий трассировки;

  • переход к открытому отчету трассировки.

Панель фильтрации#

В общем журнале трассировок Journal доступны фильтры:

Поле

Описание

flt_idBtkClassHL

Класс объекта трассировки

flt_sGidObject

Глобальный идентификатор объекта трассировки

flt_dBegin, flt_dEnd

Время записи с / по

Явной проверки обязательности фильтров нет. Если даты не заданы, журнал строит выборку без ограничения по периоду.

Примечание

Для рабочей базы рекомендуется задавать период, чтобы ограничивать объем выборки и ускорять построение списка трассировок.

Список сессий трассировки#

В основной таблице отображаются сохраненные сессии трассировки.

Колонка

Описание

Дополнительная информация

Служебная информация о сессии трассировки

Наименование объекта трассировки

Объект, для которого была запущена трассировка

Дата записи отчета

Дата и время записи отчета трассировки

Идентификатор трассировки

Идентификатор сессии трассировки

Наименование класса

Класс объекта трассировки

Открытый отчет трассировки#

Внутри открытого отчета трассировки доступны фильтры для поиска по детализации методов и SQL-запросов.

Поле

Описание

flt_sNameMethod или flt_sName

Имя метода или SQL-запроса

flt_dBegin, flt_dEnd

Период выполнения

Фильтры позволяют ограничить детализацию трассировки по времени выполнения и найти конкретный метод или SQL-запрос внутри выбранной сессии.

Настройка журнала#

Журнал не имеет пользовательских настроек состава полей. Его наполнение зависит от включения трассировки.

Трассировка может быть запущена:

  • для пользовательской серверной сессии через монитор серверных сессий;

  • для фонового задания через соответствующий признак.

В коде используются методы:

  • startMethodIntercept(...) — запускает трассировку;

  • stopMethodIntercept() — останавливает трассировку.

Структура хранения создается install-скриптом Btk_ServerMethodInterceptPkg.pkg.xml.

События формирования записей#

Записи в журнале создаются только при включенной трассировке.

Журнал фиксирует:

  • начало и окончание вызова серверных методов;

  • аргументы и результаты выполнения;

  • ошибки выполнения;

  • SQL-запросы, выполненные внутри методов;

  • временные характеристики выполнения.

Хранение данных#

Данные хранятся в трех связанных таблицах:

  • Btk_ServerMethodIntercept — заголовок сессии трассировки;

  • Btk_ServerMethodInterceptDet — детализация вызовов методов;

  • Btk_ServerMethodInterceptDetSQL — детализация SQL-запросов.

Особенности хранения:

  • при удалении заголовка сессии трассировки удаляется вся связанная детализация: вызовы методов и SQL-запросы;

  • удалить заголовок сессии через пользовательский интерфейс журнала нельзя, форма работает только в режиме просмотра;

  • если заголовок сессии будет удален напрямую на уровне БД или через серверную логику, связанная детализация также исчезнет;

  • для таблиц создаются индексы по времени начала и окончания выполнения;

  • запись данных выполняется с буферизацией.

Для буферизации используется порог BUFFER_SIZE_TO_FLASH = 3000. При достижении порога данные принудительно сохраняются в базу.

Хранимые поля#

Заголовок сессии#

Поле

Описание

id

Идентификатор сессии трассировки

dDate

Дата и время создания

gidObject

Глобальный идентификатор объекта

sInfo

Служебная информация

Детализация методов#

Поле

Описание

id

Идентификатор записи

idParent

Родительский вызов

idTrace

Ссылка на сессию трассировки

sMethodName

Полное имя метода

jArgs

Аргументы метода в JSON

jResult

Результат выполнения в JSON

jMeta

Метаданные контекста

bError

Признак ошибки

dStart

Время начала выполнения

dEnd

Время окончания выполнения

methodTime

Время выполнения метода

selfTime

Собственное время метода

traceTime

Суммарное время ветки вызовов

Детализация SQL#

Поле

Описание

id

Идентификатор записи

idParent

Родительский метод

idTrace

Ссылка на сессию трассировки

sSQLText

Текст SQL-запроса

jArgs

Параметры SQL в JSON

jResult

Результат SQL в JSON

jMeta

Метаданные контекста

bError

Признак ошибки

dStart

Время начала выполнения

dEnd

Время окончания выполнения

queryTime

Время выполнения SQL-запроса

Программные интерфейсы#

Основная логика реализована в:

  • Btk_ServerMethodInterceptPkg;

  • MethodIntercept.

Ключевые функции:

  • запуск и остановка трассировки;

  • регистрация вызовов методов;

  • регистрация SQL-запросов;

  • запись данных в базу;

  • управление буферизацией.

Для очистки используются:

  • regCleanupJob() — регистрирует задание очистки;

  • clearOld() — удаляет устаревшие записи.

Особенности эксплуатации#

Журнал не ведется постоянно. Записи появляются только при активной трассировке.

Требования к безопасной настройке журналов, разграничению доступа, хранению и использованию журналов при расследовании инцидентов описаны в документе «Логирование, аудит и управление инцидентами», в разделах «Защита журналов» и «Аудит пользовательской активности».

Объем данных зависит от:

  • количества вызовов методов;

  • глубины вложенности вызовов;

  • количества SQL-запросов;

  • размера JSON-полей jArgs, jResult, jMeta.

Основной рост приходится на таблицы детализации Btk_ServerMethodInterceptDet и Btk_ServerMethodInterceptDetSQL, а не на заголовки сессий.

Хранение и очистка#

Журнал является техническим и может быстро расти, поэтому для рабочей базы рекомендуется короткий срок хранения: 7–30 дней.

Очистка выполняется методом:

Btk_ServerMethodInterceptPkg.clearOld()

Метод удаляет master-записи старше 30 дней. Детализация удаляется каскадно.

Рекомендуется:

  • анализировать рост всех трех таблиц;

  • выявлять наиболее ресурсоемкие сессии;

  • использовать clearOld() через задание очистки;

  • при необходимости удалять старые трассировки раньше стандартного срока.

Внимание

Метод clearOld() жестко хранит 30 дней и не принимает срок хранения параметром. Если нужно сделать срок настраиваемым, необходимо изменить метод очистки или зарегистрировать другой скрипт очистки.