Инструкции по очистке аудитов и журналов#
Очистка аудитов и журналов выполняется через штатную задачу Очистка таблиц CleanupJob и настройки Btk_JobCleanupSetting.
Для части журналов в системе уже есть преднастроенная очистка в CleanupJob:
Аудит JEXL —
aud.jexlexechistory, настройка зарегистрирована, но по умолчанию не активна.Открытие форм —
Btk_FormSession, настройка зарегистрирована и активна.Аудит подключений к сервисам REST/SOAP/WS —
Btk_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.
Для очистки аудита пользователя очищаются его источники:
Для вкладки по объектам — таблицы аудита данных
aud.*_dzAud.Для открытия форм —
Btk_FormSession.Для подключений —
Btk_AuditConnect.Для отчетов —
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 или зарегистрировать другой скрипт очистки.