Инструкции по очистке аудитов и журналов#

Очистка аудитов и журналов выполняется через штатную задачу Очистка таблиц CleanupJob и настройки Btk_JobCleanupSetting.

Для части журналов в системе уже есть преднастроенная очистка в CleanupJob:

  • Аудит JEXLaud.jexlexechistory, настройка зарегистрирована, но по умолчанию не активна.

  • Открытие формBtk_FormSession, настройка зарегистрирована и активна.

  • Аудит подключений к сервисам REST/SOAP/WSBtk_AuditConnectService, настройка зарегистрирована, но по умолчанию не активна.

  • Журнал пользовательских ошибокBtk_ErrorAudit, настройка зарегистрирована и активна.

  • Журнал трассировки серверных методовBtk_ServerMethodIntercept, настройка зарегистрирована и активна.

Для остальных аудитов и журналов очистку необходимо настраивать отдельно: указать таблицу или API-класс, поле даты, срок хранения и способ удаления. Если журнал имеет связанную детализацию, вложения, историю состояний или требует дополнительной бизнес-логики при удалении, лучше использовать скриптовую очистку или удаление через API, а не прямой SQL.

Настройка очистки#

Очистка аудитов и журналов выполняется через общий механизм заданий очистки данных. В настройке очистки указывается таблица или API-класс, срок хранения, поле даты, способ удаления и признак активности.

Подробное описание механизма настройки, способов удаления и регистрации настроек через код см. в разделе Задания очистки данных.

Особенности очистки журналов#

Аудит JEXL#

Аудит JEXL хранится в таблицах:

  • aud.jexlexechistory;

  • aud.jexlexechistoryDet.

Для очистки уже предусмотрен метод:

Btk_JexlScriptRunnerPkg.clearOldExec(npDaysKeep)

Штатная настройка CleanupJob регистрируется в regCleanupJob():

  • класс/таблица: aud.jexlexechistory;

  • срок хранения: 60 дней;

  • тип удаления: DeleteType.script;

  • скрипт: Btk_JexlScriptRunnerPkg.clearOldExec(nDaysKeep);;

  • активность: bpActive = 0.

Метод удаляет записи из aud.jexlexechistory по полю dEndExec и связанные строки из aud.jexlexechistoryDet.

Внимание

У метода срок по умолчанию 30 дней, а у зарегистрированной настройки — 60 дней. Если очистка запускается вручную, срок лучше передавать явно.

Аудит отчетов#

Аудит отчетов хранится в таблице Rpt_ReportAudit.

Методы Rpt_ReportAuditApi.beforeDeleteReport(...) и Rpt_ReportAuditApi.beforeDeleteReportVersion(...) обслуживают ссылки при удалении отчета или версии отчета. Это не регламентная очистка по сроку хранения.

Для регламентной очистки старых записей используйте настройку CleanupJob:

  • spClass = "Rpt_ReportAudit";

  • npDeleteType = DeleteType.sqlDelete;

  • spAttrCreateDate = "dPrint";

  • npDaysKeep — по регламенту;

  • bpActive = 1.

Аудит подключений#

Аудит подключений хранится в таблице Btk_AuditConnect.

Для очистки используйте настройку CleanupJob:

  • spClass = "Btk_AuditConnect";

  • npDeleteType = DeleteType.sqlDelete;

  • spAttrCreateDate = "dDate";

  • npDaysKeep — по регламенту;

  • bpActive = 1.

Если этот журнал используется вместе с журналом подключений к REST/SOAP/WS-сервисам, сроки хранения лучше согласовать между ними.

Аудит пользователя#

Аудит пользователя не является отдельной таблицей. Это сводная витрина, реализованная в Btk_OpenSelMonitorAvi.scala.

Витрина собирает данные из нескольких источников:

  • аудит объектов — таблицы aud.<RootClass>_dzAud;

  • открытие форм — Btk_FormSession;

  • подключения — Btk_AuditConnect;

  • отчеты — Rpt_ReportAudit.

Для очистки аудита пользователя очищаются его источники:

  1. Для вкладки по объектам — таблицы аудита данных aud.*_dzAud.

  2. Для открытия форм — Btk_FormSession.

  3. Для подключений — Btk_AuditConnect.

  4. Для отчетов — Rpt_ReportAudit.

Для Btk_FormSession настройка зарегистрирована штатно:

  • spClass = "Btk_FormSession";

  • npDaysKeep = 60;

  • npDeleteType = DeleteType.sqlDelete;

  • spAttrCreateDate = "dBegin";

  • bpActive = 1.

Внимание

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

Аудит прав доступа#

Аудит прав доступа является представлением поверх таблиц аудита данных. Логика витрины находится в Btk_AcRightsAuditAvi.scala.

В коде используются, в частности:

  • aud.Btk_User_dzAud — для изменений пользовательских назначений;

  • aud.Btk_AcProfile_dzAud — для изменений профильных назначений;

  • aud.Btk_AcRole_dzAud;

  • aud.Btk_AcObject_dzAud.

Если допустимо чистить весь аудит соответствующих root-классов, настройте CleanupJob для нужных таблиц aud.*_dzAud по полю dDate.

Если нужно удалить только историю прав доступа, а остальной аудит этих объектов оставить, используйте отдельную скриптовую настройку DeleteType.script или SQL с фильтром по idClass.

Для регламентной очистки лучше оформить такой SQL в отдельный пакетный метод и зарегистрировать его в CleanupJob как DeleteType.script.

Журнал аудита данных#

Журнал аудита данных хранит изменения бизнес-объектов в отдельных аудит-таблицах вида:

aud.<RootClass>_dzAud

Очистка настраивается отдельно для каждой нужной таблицы аудита.

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

  • spClass = "aud.<RootClass>_dzAud";

  • npDeleteType = DeleteType.sqlDelete;

  • spAttrCreateDate = "dDate";

  • npDaysKeep — по регламенту;

  • bpActive = 1.

Журнал аудита подключений к сервисам REST/SOAP/WS#

Журнал хранится в таблице Btk_AuditConnectService.

Штатная регистрация очистки уже предусмотрена:

  • spClass = "Btk_AuditConnectService";

  • npDaysKeep = 30;

  • npDeleteType = DeleteType.sqlDelete;

  • bpActive = 0.

Поле даты явно не задано, поэтому используется значение по умолчанию dCreateDate_dz.

В ODM у журнала есть фактическая дата подключения dConnect и индекс по dConnect. Если регламент должен считать срок хранения от фактической даты подключения, в настройке нужно указать поле dConnect.

Журнал входящих HTTP-запросов#

Журнал входящих HTTP-запросов хранится в таблице Bts_HttpInRequest.

Очистка выполняется через настройку CleanupJob.

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

  • spClass = "Bts_HttpInRequest";

  • npDeleteType = DeleteType.sqlDelete`;

  • spAttrCreateDate = "dCreateDate_dz";

  • npDaysKeep — по регламенту;

  • bpActive = 1.

Журнал пользовательских ошибок#

Журнал пользовательских ошибок хранится в таблице aud.btk_errorAudit.

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

Btk_ErrorAuditPkg.clearOld(npDaysKeep)

Штатная настройка CleanupJob уже зарегистрирована и активна:

  • spClass = "Btk_ErrorAudit";

  • npDaysKeep = 30;

  • npDeleteType = DeleteType.script;

  • spAttrCreateDate = "";

  • скрипт: Btk_ErrorAuditPkg.clearOld(nDaysKeep);;

  • bpActive = 1.

Внимание

Очистка сравнивает DATE(dDate), то есть работает по календарной дате, а не по точному времени события.

Журнал построения отчетов#

Журнал построения отчетов хранится в таблице Rpt_EntityExec.

В системе есть штатная задача:

Rpt_ClearStuckReports

Она запускает:

Rpt_EntityPkg.clearForSchedulePrinting();

Эта задача не удаляет старый журнал построения отчетов. Она прерывает фоновые и регламентные отчеты, которые зависли больше чем на 24 часа: переводит их в состояние ошибки и чистит связанные Btk_JobEvent и Btk_BackgroundTaskJournal.

Для удаления записей Rpt_EntityExec используется метод:

Rpt_EntityApi.deleteEntityExecByChunk(rop)

При удалении одной записи Rpt_EntityExec через API удаляются вложения, история состояний и ручные коллекции. Поэтому для регламентной очистки старых записей лучше использовать DeleteType.apiDelete, а не прямой SQL.

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

  • spClass = "Rpt_EntityExec";

  • npDeleteType = DeleteType.apiDelete;

  • spAttrCreateDate = "dCreate";

  • npDaysKeep — по регламенту;

  • bpActive = 1.

Перед включением желательно проверить выборку старых записей и при необходимости ограничить очистку завершенными или ошибочными состояниями через отдельный скриптовый метод. Базовый CleanupJob удаляет только по дате и не добавляет фильтр по состоянию.

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

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

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

  • btk_servermethodintercept;

  • btk_servermethodinterceptdet;

  • Btk_ServerMethodInterceptDetSQL.

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

Btk_ServerMethodInterceptPkg.clearOld()

Штатная настройка CleanupJob уже зарегистрирована и активна:

  • spClass = "Btk_ServerMethodIntercept";

  • npDaysKeep = 30;

  • npDeleteType = DeleteType.script;

  • spAttrCreateDate = "";

  • скрипт: Btk_ServerMethodInterceptPkg.clearOld();;

  • bpActive = 1.

Detail-таблицы связаны с master-таблицей внешними ключами ON DELETE CASCADE, поэтому при удалении master-записей детали удаляются каскадно.

Внимание

Текущий метод жестко хранит 30 дней и не принимает nDaysKeep. Изменение nDaysKeep в настройке CleanupJob не изменит срок хранения. Чтобы сделать срок настраиваемым, нужно изменить метод clearOld или зарегистрировать другой скрипт очистки.