# Структуры аудита Система Global предоставляет множество инструментов по контролю за изменением данных, позволяющих отслеживать - Добавление, изменение и удаление данных - Блокировки и ошибки при работе БД - Исполнение периодических работ - Изменение размера таблиц - Открытие выборок и выполнение операций - Исполнение JEXL-скриптов Все таблицы аудита хранятся в табличном пространстве, указанном в `Btk_AuditPkg().schema`. По умолчанию это `AUD`. В этом разделе документации представлена информация по большинству из них ## Аудит классов Содержит информацию об создании экземпляров класса, изменении атрибутов, выполнении операций. Позволяет отследить взаимодействия с данными вплоть до конкретного пользователя, секунды и рабочего места. Пользовательский интерфейс доступен в `Настройка системы > Аудит \ Аудит открытия форм и выполнения операций`. Записи аудита хранятся в таблицах отдельных для каждого класса-шапки бизнес-объекта. Названия таблиц формируются следующим образом: ```{admonition} Формирование названий таблиц аудита классов **${cистемное имя класса-шапки бизнес-объекта}_dzaud**: - `Btk_User_dzaud` - `Bs_Goods_dzaud` ``` Изменения обрабатываются в `SessionImpl#flush()`. Сбор информации о значении атрибутов происходит до и после применения изменений сессии к базе данных. Запись в аудит - после [Подробнее об аудите классов](https://help.global-system.ru/global_server_app_guide_v1/html/030_class/070_%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0.html#id36) ```{admonition} Хранимые поля - `idrootclass` - id класса-шапки бизнес-объекта - `gidrootobj` - gid класса-шапки бизнес-объекта - `srootobjhl` - наименование класса-шапки бизнес-объекта - `idclass` - id класса - `gidobj` - - `sobjhl` - - `idaction` - id действия пользователя \ один из `Btk_AuditAction`: "Создание", "Изменение", "Удаление" - `joldvalue` - **JSON**-объект \ хранящий значения атрибутов объекта до изменений - `jnewvalue` - **JSON**-объект \ хранящий новые значения изменённых атрибутов - `joldvaluehl` - **JSON**-объект \ хранящий наименования ссылочных атрибутов до изменений - `jnewvaluehl` - **JSON**-объект \ хранящий новые наименования изменённых ссылочных атрибутов - `ddate` - время и дата изменения - `sremark` - примечание - `suser` - имя пользователя - `sclienthostip` - IP-адрес - `joperinfo` - ``` ## Журнал блокировок базы данных `btk_dblockshistory` Отображает дерево блокировок сессий БД. [Подробнее...](http://helpcenter.gs.local/global_server_app_guide_v1/html/080_addition/100_%D0%BC%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3.html#id9) ## Журнал аудита сторонних систем `btk_idextaudit` Содержит историю изменения идентификатора внешних систем. Выполняется на каждую установку значения в сеттере `Btk_ExtSystemAvi.ListMaster#setsKey` ```{admonition} Хранимые поля - `gidObj` - объект, к которому подключена внешняя система - `sOldValue` - предыдущее значение - `sNewValue` - изменённое значение - `idExtSystem` - идентификатор внешней системы - `idExtSystemHL` - наименование внешней системы - `dDate` - когда произошло изменение - `sUser` - кем было произведено изменение - `sClientHostIP` - IP-адрес \ Адрес, с которого была инициирована процедура изменения ``` ### Скрипты взаимодействия с таблицой #### Регистрация ```Java Btk_JIdExtPkg.installTable(); ``` #### Добавление записи ```Java insertAudInfo( gidObj: NGid, idExtSystem: NLong, sOldValue: NString, sNewValue: NString ); ``` ## Журнал выполнения работ `btk_jobexechistory` Содержит историю исполнения регулярно выполняемых работ `Quartz Scheduler`. Позволяет анализировать исполнение работ: длительность, время запуска и его корректность. Обновляется каждые 15 минут работой `Btk_SlowQueryHistoryUpdate` ```{admonition} Хранимые поля - `idJobEvent` - идентификатор события - `sScript` - текст исполняемого JEXL-скрипта - `nPeriod` - время исполнения [минуты] - `bSlow` - длительная работа \ Признак для работ, выполняющихся более 15-ти минут - `bNight` - ночная работа \ Признак для работ, выполняющихся с 22:00 до 08:00 ``` ### Скрипты взаимодействия с таблицой #### Регистрация ```Java Btk_MonitorDBActivityPkg.dataInstall(); ``` #### Обновление ```Java Btk_MonitorDBActivityPkg.updateSlowQueryHistory(); ``` ## Журнал информации о работе БД `btk_monitordbactivityaud` Содержит в себе предупреждения и ошибки работы с базой данных. Обновляется каждые 15 минут с помощью работы `Btk_SlowQueryHistoryUpdate`. [Подробнее...](http://helpcenter.gs.local/global_server_app_guide_v1/html/080_addition/100_%D0%BC%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3.html#id10) ```{admonition} Хранимые поля - `dcreate` - дата и время события - `stype` - тип предупреждения \ из `Btk_MonitorDBActivityPkg.DBAlertTypes`: \ "DBBloat", "AutoVacuumOff", "SlowTransaction", "SlowQuery", "FastGrowSize", "NotInScheduleJob" - `sfrom` - источник - `stypefrom` - тип источника - `sshortinfo` - сообщение - `sdescription` - описание - `squery` - запрос ``` ### Скрипты взаимодействия с таблицой #### Регистрация ```Java Btk_MonitorDBActivityPkg.dataInstall(); ``` #### Обновление ```Java Btk_MonitorDBActivityPkg.updateSlowQueryHistory(); ``` ## Журнал выполнения медленных задач `btk_slowqueryhistory` Журнал SQL-запросов, выполняющихся дольше 15 минут (время, определяющее какой запрос будет считаться долго выполняющимся определяется в `Btk_MonitorDBActivityPkg#getIntervalToAcceptAsSlowQuery`). Обновляется каждые 15 минут с помощью работы `Btk_SlowQueryHistoryUpdate`. ```{admonition} Хранимые поля - `usename` - имя пользователя - `dcreate` - дата создания записи аудита - `query` - текст SQL-запроса - `nduration` - длительность [минут] - `state` - состояние выполнения \ - `idle` - сессия БД находится в режиме ожидания. Т.е. подключение к БД есть, но в данный момент никаких запросов не выполняется. Стандартное ожидание для неактивных подключений, которые находятся в пуле подключений сервера приложений - `active` - сессия БД в данный момент выполняет запрос. - `idle in transaction` - сессия БД находится в режиме ожидания, но есть открытая транзакция. Опасное состояние сессии, т.к. длинные открытые транзакции отрицательно влияют на производительность `postgresql`. Наличие такой сессии сигнализирует о проблеме. - `sclienthostip` - IP-адрес источника запроса - `sappname` - название главной выборки - `sform` - название формы \ отображение, выборка, наименование - `sclusternode` - кластерный узел - `ssid` - sid сеанса - `stack` - трассировка стека - `saction` - действие \ Эта колонка будет заполнена, если: - сессия принадлежит выполняемому фоновому заданию, в том числе интеграция - выполняется построение печатной формы ``` ### Скрипты взаимодействия с таблицой #### Регистрация ```Java Btk_MonitorDBActivityPkg.dataInstall(); ``` #### Обновление ```Java Btk_MonitorDBActivityPkg.updateSlowQueryHistory(); ``` ## Журнал размера таблиц основных классов `btk_tablesizehistory` История размера таблиц PostgreSQL и системных классов. Позволяет отслеживать изменения размеров таблиц и индексов к ним во времени. Обновляется каждые 20 часов с помощью работы `Btk_TableSizeHistoryUpdate` ```{admonition} Хранимые поля - `dcreate` - дата и время - `sname` - название таблицы - `stablespace` - табличное пространство - `nsize` - собственный размер таблицы [байт] - `nindexsize` - размер индексов [байт]к - `ntotalsize` - общий размер [байт] ``` ### Скрипты взаимодействия с таблицой #### Регистрация ```Java Btk_MonitorDBActivityPkg.dataInstall(); ``` #### Обновление ```Java Btk_MonitorDBActivityPkg.updateTableSizeHistory(); ``` ## Журнал открытия выборок и выполнения операций `selopenhistory` Это настраиваемая система, позволяющая вести расширенный аудит действий пользователя при открытии форм и элементов внутри формы. Пользовательский интерфейс доступен в `Настройка системы > Аудит \ Аудит открытия форм и выполнения операций`. Для каждой конкретной формы можно включить\отключить аудит, настроить какие взаимодействия будут сохраняться: - `Btk_SelSettingAudTypeApi#sFullAud` - признак ведения полного аудита - `Btk_SelSettingAudTypeApi#sOnlySuccess` - признак ведения аудита успешно выполненных действий Существует несколько событий, создающих запись аудита: - при открытии формы - `EntityAvi#onShow()` - успешное открытие формы - в `EntityAvi#onLoadMeta()` подписка на события неудачных открытий форм - `EntityAvi#beforeCloseForm()` - закрытие формы - при вызове операции - в `EntityAvi#onLoadMeta()` подписка на события исполнения операций [Подробнее об аудите открытия форм и выполнения операция](http://helpcenter.gs.local/global_server_app_guide_v1/html/040_selection/230_%D0%B0%D1%83%D0%B4%D0%B8%D1%82_%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D1%8F.html) ```{admonition} Хранимые поля - `id` - ИД записи в аудите для текущей выборки - `suser` - имя пользователя - `ssel` - выборка - `srep` - отображение - `scaption` - наименование отображения - `dstart` - время открытия - `dend` - время закрытия - `gidobject` - глобальный идентификатор объекта взаимодействия - `stype` - тип взаимодействия, `Btk_SelAuditPkg.SelAuditType` \ одно из списка: "Главная выборка", "Операция", "Детальная выборка" - `sparam` - параметры, с которыми открывалась выборка - `sresult` - результат взаимодействия `SelAuditResult` \ одно из списка: "Успешно", "Ошибка прикладного кода", "Ошибка доступа" - `soper` - операция - `sopercaption` - наименование операции - `serrortext` - текст ошибки ``` ### Скрипты взаимодействия с таблицой #### Регистрация ```Java Btk_SelAuditPkg.dataInstall() ``` #### Добавление записи ```Java Btk_SelAuditPkg.audInsert( idSession: NLong, id: NLong, idParent: NLong, sSel: NString, sRep: NString, sCaption: NString, gidObject: NGid, sParam: NString, sType: NString, sResult: NString = SelAuditResult.sSuccess, sOper: NString, sOperCaption: NString, sErrorText: NString ) ``` ## Журнал аудита JEXL `jexlexechistory` Содержит информацию о запуске и результате выполнения скриптов на языке JEXL.Пользовательский интерфейс доступен в `Настройка системы > Аудит \ Аудит JEXL`. Операции, которые вызывают создании записи в таблице аудита: - `Btk_JexlScriptLibraryAvi.Card_Script#execScriptwithSettings()` - `Btk_JexlScriptRunnerAvi.Card#execScript()` ```{admonition} Хранимые поля - `id` - уникальный ключ записи аудита - `suser` - имя пользователя - `dstartexec` - начало исполнения - `dendexec` - конец исполнения - `sjexl` - текст скрипта - `nresult` - результат выполнения \ **1** - успех, **0** - ошибка - `sstacktrace` - трассировка стека ошибки - `gidsrc` - объект, из которого выполнялся вызов скрипта - `saudinfo` - ``` ### Скрипты взаимодействия с таблицой #### Регистрация ```Java Btk_JexlScriptRunnerPkg.audDataInstal(); ``` #### Добавление записи ```Java Btk_JexlScriptRunnerPkg.audInsert( dpStartExec: NDate ,dEndExec: NDate ,spJexl: NString ,npResult: NNumber ,spStackTrace: NString = None.ns ,gidpSrc: NGid = None.ng ); ```