Журнал трассировки серверных методов#
Журнал трассировки серверных методов предназначен для технической диагностики выполнения серверных методов и связанных SQL-запросов в рамках отдельной сессии трассировки.
Журнал используется для:
анализа выполнения серверной логики;
выявления узких мест по времени выполнения;
диагностики ошибок и некорректного поведения;
анализа SQL-запросов, выполняемых внутри методов.
Журнал является техническим и используется преимущественно разработчиками и администраторами системы.
Журнал доступен по пути: Настройка системы > Аудит > Журнал трассировки серверных методов.
О запуске трассировки, типах трассировки, остановке записи, просмотре отчета и передаче SQL-запросов в Grafana см. в разделе «Трассировка серверных вызовов и запросов».
Интерфейс журнала#
Интерфейс журнала используется для просмотра сохраненных сессий трассировки и перехода к детализации вызовов методов и SQL-запросов.
Форма общего журнала трассировок работает в режиме просмотра и содержит:
панель фильтрации;
список сессий трассировки;
переход к открытому отчету трассировки.

Панель фильтрации#
В общем журнале трассировок Journal доступны фильтры:
Поле |
Описание |
|---|---|
|
Класс объекта трассировки |
|
Глобальный идентификатор объекта трассировки |
|
Время записи с / по |
Явной проверки обязательности фильтров нет. Если даты не заданы, журнал строит выборку без ограничения по периоду.
Примечание
Для рабочей базы рекомендуется задавать период, чтобы ограничивать объем выборки и ускорять построение списка трассировок.
Список сессий трассировки#
В основной таблице отображаются сохраненные сессии трассировки.
Колонка |
Описание |
|---|---|
Дополнительная информация |
Служебная информация о сессии трассировки |
Наименование объекта трассировки |
Объект, для которого была запущена трассировка |
Дата записи отчета |
Дата и время записи отчета трассировки |
Идентификатор трассировки |
Идентификатор сессии трассировки |
Наименование класса |
Класс объекта трассировки |
Открытый отчет трассировки#
Внутри открытого отчета трассировки доступны фильтры для поиска по детализации методов и SQL-запросов.
Поле |
Описание |
|---|---|
|
Имя метода или SQL-запроса |
|
Период выполнения |
Фильтры позволяют ограничить детализацию трассировки по времени выполнения и найти конкретный метод или SQL-запрос внутри выбранной сессии.
Настройка журнала#
Журнал не имеет пользовательских настроек состава полей. Его наполнение зависит от включения трассировки.
Трассировка может быть запущена:
для пользовательской серверной сессии через монитор серверных сессий;
для фонового задания через соответствующий признак.
В коде используются методы:
startMethodIntercept(...)— запускает трассировку;stopMethodIntercept()— останавливает трассировку.
Структура хранения создается install-скриптом Btk_ServerMethodInterceptPkg.pkg.xml.
События формирования записей#
Записи в журнале создаются только при включенной трассировке.
Журнал фиксирует:
начало и окончание вызова серверных методов;
аргументы и результаты выполнения;
ошибки выполнения;
SQL-запросы, выполненные внутри методов;
временные характеристики выполнения.
Хранение данных#
Данные хранятся в трех связанных таблицах:
Btk_ServerMethodIntercept— заголовок сессии трассировки;Btk_ServerMethodInterceptDet— детализация вызовов методов;Btk_ServerMethodInterceptDetSQL— детализация SQL-запросов.
Особенности хранения:
при удалении заголовка сессии трассировки удаляется вся связанная детализация: вызовы методов и SQL-запросы;
удалить заголовок сессии через пользовательский интерфейс журнала нельзя, форма работает только в режиме просмотра;
если заголовок сессии будет удален напрямую на уровне БД или через серверную логику, связанная детализация также исчезнет;
для таблиц создаются индексы по времени начала и окончания выполнения;
запись данных выполняется с буферизацией.
Для буферизации используется порог BUFFER_SIZE_TO_FLASH = 3000. При достижении порога данные принудительно сохраняются в базу.
Хранимые поля#
Заголовок сессии#
Поле |
Описание |
|---|---|
|
Идентификатор сессии трассировки |
|
Дата и время создания |
|
Глобальный идентификатор объекта |
|
Служебная информация |
Детализация методов#
Поле |
Описание |
|---|---|
|
Идентификатор записи |
|
Родительский вызов |
|
Ссылка на сессию трассировки |
|
Полное имя метода |
|
Аргументы метода в JSON |
|
Результат выполнения в JSON |
|
Метаданные контекста |
|
Признак ошибки |
|
Время начала выполнения |
|
Время окончания выполнения |
|
Время выполнения метода |
|
Собственное время метода |
|
Суммарное время ветки вызовов |
Детализация SQL#
Поле |
Описание |
|---|---|
|
Идентификатор записи |
|
Родительский метод |
|
Ссылка на сессию трассировки |
|
Текст SQL-запроса |
|
Параметры SQL в JSON |
|
Результат SQL в JSON |
|
Метаданные контекста |
|
Признак ошибки |
|
Время начала выполнения |
|
Время окончания выполнения |
|
Время выполнения 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 дней и не принимает срок хранения параметром. Если нужно сделать срок настраиваемым, необходимо изменить метод очистки или зарегистрировать другой скрипт очистки.