Журнал обновлений#
Журнал обновлений предназначен для контроля сессий обновления базы данных.
Журнал позволяет отследить:
какие модули обновлялись;
какой комплект сборки был установлен;
какие скрипты выполнялись;
какие миграционные задачи запускались;
были ли ошибки при обновлении схемы;
какой лог был записан во время сессии обновления;
какие отложенные скрипты были зарегистрированы и были ли ошибки при их выполнении.
Форма просмотра реализована в Btk_ReleaseMonitorAvi. Данные создаются и обновляются инфраструктурой обновления базы данных, в том числе через:
Btk_DbUpgradeSessionPkg;DatabaseUpgrader;DbGenerator;DbSchemaUpdater;Btk_DbInstallerPkg;Btk_DelayedScriptPkg;Btk_MigrationPkg.
Журнал доступен по пути: Приложение «Настройка системы» > Аудит > Журнал обновлений.
Интерфейс журнала#
Основная форма Btk_ReleaseMonitorAvi.list() работает в режиме просмотра. Основные данные сессии берутся из Btk_DbUpgradeSession, а сведения о наличии и ошибках отложенных скриптов — из Btk_DelayedScriptLog.
В верхней части формы расположен фильтр по дате обновления:
Дата с — начало периода;
по — окончание периода.
При открытии формы метод beforeOpen() автоматически устанавливает начальную дату фильтра:
если текущий день месяца больше 10 — первый день текущего месяца;
если текущий день месяца 10 или меньше — первый день предыдущего месяца.
Основная таблица сортируется по dDate DESC.
Колонка |
Описание |
|---|---|
id сессии обновления |
Идентификатор сессии обновления |
Дата обновления |
Дата и время обновления |
Обновленные модули |
Модули, которые были обновлены в рамках сессии |
Установленный комплект сборки |
Комплект сборки, установленный при обновлении |
Скрипты обновления схемы и данных |
Признак выполнения скриптов обновления схемы и данных |
Обновление схемы |
Признак выполнения обновления схемы |
Скрипты до обновления схемы |
Признак выполнения скриптов до обновления схемы |
Скрипты после обновления схемы |
Признак выполнения скриптов после обновления схемы |
Миграционные задачи |
Признак выполнения миграционных задач |
Отложенные скрипты |
Признак регистрации отложенных скриптов в рамках сессии. Если среди них есть скрипты с ошибками выполнения, признак отображается красным |
Для выбранной сессии доступны вкладки детализации:
Обновление модулей — список обновленных модулей и модулей без изменений.
Обновление схемы — DDL-операции обновления схемы и ошибки их выполнения.
Скрипты обновления схемы и данных — скрипты, выполненные в рамках обновления.
Отложенные скрипты — скрипты, зарегистрированные для последующего выполнения, их тип, дата выполнения и текст ошибки при наличии.
Лог обновления — текстовый лог сессии обновления.
Скрипты, выполненные до обновления схемы — скрипты, выполненные перед изменением схемы.
Скрипты, выполненные после обновления схемы — скрипты, выполненные после изменения схемы.
Миграционные задачи upTask — миграционные задачи прямого применения.
Миграционные задачи downTask — миграционные задачи отката.
На вкладке Обновление модулей отображается дерево модулей. В нем показываются:
обновленные модули;
модули без изменений.
Для каждого модуля отображаются новая и предыдущая версии модуля, а также новая и предыдущая версии комплекта сборки.
На вкладке Отложенные скрипты отображаются сведения об отложенных скриптах, связанных с выбранной сессией обновления:
наименование скрипта;
тип скрипта;
текст ошибки, если выполнение завершилось с ошибкой;
дата выполнения.
Если отложенный скрипт зарегистрирован, но еще не выполнен, результат его выполнения в журнале еще не заполнен.
Журнал доступен только для просмотра. Данные в форме не создаются и не редактируются вручную.
Настройка журнала#
Таблицы журнала создаются программно методом:
Btk_DbUpgradeSessionPkg.registerTables(connection)
Метод вызывается в контуре обновления базы данных, например из DatabaseUpgrader.
При создании структуры формируются:
таблица сессий обновления
Btk_DbUpgradeSession;связанные таблицы детализации;
индекс
Btk_DbUpgradeSession_dDate_desc_idxпоdDate DESC;последовательность
Btk_DbUpgradeSession_seq.
Детальные таблицы ссылаются на Btk_DbUpgradeSession(id).
События формирования записей#
Журнал заполняется автоматически при выполнении обновления базы данных.
Новая сессия создается через:
Btk_DbUpgradeSessionPkg.getNewSession(...)
Дальнейшие этапы обновления записывают результаты в связанные таблицы.
Заполнение журнала подключено к процессам обновления:
DatabaseUpgraderсоздает сессии обновления и записывает лог;DbGeneratorзаписывает строки вBtk_UpdateDbSchemaи обновляет признакbUpdSchema;Btk_DbInstallerPkgрегистрирует DbData-скрипты;при регистрации отложенных скриптов создаются записи в
Btk_DelayedScriptLog, связанные с текущей сессией поidSession;после фактического выполнения отложенного скрипта связанная запись дополняется датой выполнения и текстом ошибки при наличии;
Btk_MigrationPkgрегистрирует миграционные задачиupTaskиdownTask.
Форма Btk_ReleaseMonitorAvi сама данные не создает. Она читает уже записанные таблицы и отображает их в основной форме и детализациях.
Если обновление выполнялось вне штатного процесса или без idUpdateSession, записи в журнале обновлений могут быть неполными или отсутствовать.
Хранение данных#
Журнал хранится не в одной таблице, а в нескольких связанных таблицах.
Btk_DbUpgradeSession хранит заголовок сессии обновления:
идентификатор;
дату;
список обновленных модулей;
установленный KIT;
признаки выполнения этапов обновления;
цветовые признаки ошибок;
текстовый лог
sLogContext.
Btk_ReleaseModule хранит сведения о версиях модулей в рамках сессии. В форме данные отображаются деревом с двумя группами:
обновленные модули;
модули без изменений.
Btk_UpdateDbSchema хранит DDL-операции обновления схемы и текст ошибки, если операция завершилась неуспешно.
Btk_DbUpgradeSessionTask хранит задачи сессии:
DbData-скрипты;
migration
upTask;migration
downTask.
Для задач сохраняются новая и старая версии, JSON-параметры и текст ошибки.
Btk_DbSchemaVersionScript используется формой для просмотра скриптов, выполненных до и после обновления схемы. В Btk_ReleaseMonitorAvi данные читаются по idSession и sScriptType.
Btk_DelayedScriptLog хранит сведения об отложенных скриптах, зарегистрированных в рамках сессии обновления, и связан с Btk_DbUpgradeSession по idSession.
Хранимые поля#
Сессия обновления#
Основные поля Btk_DbUpgradeSession:
Поле |
Назначение |
|---|---|
|
Идентификатор сессии обновления |
|
Дата и время начала сессии |
|
Список обновленных модулей |
|
Установленный комплект сборки |
|
Признак выполнения скриптов обновления схемы и данных |
|
Признак выполнения обновления схемы |
|
Признак выполнения скриптов до обновления схемы |
|
Признак выполнения скриптов после обновления схемы |
|
Признак выполнения миграционных задач |
|
Текстовый лог сессии обновления |
|
Цветовой признак ошибок скриптов обновления схемы и данных |
|
Цветовой признак ошибок обновления схемы |
|
Цветовой признак ошибок скриптов до обновления схемы |
|
Цветовой признак ошибок скриптов после обновления схемы |
|
Цветовой признак ошибок миграционных задач |
Признаки отложенных скриптов bDelayedScript и sColorDelayedScript вычисляются в SQL-запросе выборки журнала по данным Btk_DelayedScriptLog:
bDelayedScript— признак наличия отложенных скриптов для сессии. Устанавливается, если вBtk_DelayedScriptLogесть хотя бы одна запись с соответствующимidSession;sColorDelayedScript— цветовой признак ошибок отложенных скриптов.
Цветовые признаки sColor..., используемые в журнале обновлений, работают одинаково: если для соответствующего этапа или скрипта зафиксирована ошибка, признак принимает значение GDS_ResType_Error; если ошибок нет, значение не задается.
Модули релиза#
Поля Btk_ReleaseModule:
Поле |
Назначение |
|---|---|
|
Ссылка на сессию обновления |
|
Наименование модуля |
|
Новая версия модуля |
|
Предыдущая версия модуля |
|
Новая версия KIT |
|
Предыдущая версия KIT |
Обновление схемы#
Поля Btk_UpdateDbSchema:
Поле |
Назначение |
|---|---|
|
Ссылка на сессию обновления |
|
Текст DDL-операции |
|
Текст ошибки DDL-операции |
Задачи сессии#
Поля Btk_DbUpgradeSessionTask:
Поле |
Назначение |
|---|---|
|
Ссылка на сессию обновления |
|
Наименование задачи или скрипта |
|
Тип задачи: |
|
Человекочитаемое отображение типа в форме |
|
Новая версия |
|
Предыдущая версия |
|
JSON-параметры задачи |
|
Текст ошибки |
Отложенные скрипты#
Btk_DelayedScriptLog хранит данные отложенного скрипта, связанные с сессией обновления. Для работы журнала используются:
Данные |
Назначение |
|---|---|
|
Ссылка на сессию обновления |
Наименование скрипта |
Позволяет определить зарегистрированный отложенный скрипт |
Тип скрипта |
Тип зарегистрированного отложенного скрипта |
Дата выполнения |
Записывается после фактического выполнения скрипта |
|
Текст ошибки выполнения, если она возникла |
Скрипты схемы#
Поля Btk_DbSchemaVersionScript, используемые формой:
Поле |
Назначение |
|---|---|
|
Ссылка на сессию обновления |
|
Модуль |
|
Наименование скрипта |
|
Версия |
|
Тип скрипта: до или после обновления схемы |
Программные интерфейсы#
Основная логика регистрации данных сессии находится в Btk_DbUpgradeSessionPkg. Регистрация и обновление сведений об отложенных скриптах выполняются через Btk_DelayedScriptPkg.
Ключевые методы:
registerTables(connection)— создает таблицы, индекс и последовательность;getNewSession(connection)— создает новую сессию обновления и возвращает ееid;registerDbDataScript(...)— регистрирует выполненный DbData-скрипт;registerMigrationUpTask(...)— регистрирует миграционную задачуupTask;registerMigrationDownTask(...)— регистрирует миграционную задачуdownTask;updateTask(...)— пересчитывает признаки и цвет ошибки для миграционных задач;updateScript(...)— пересчитывает признаки по скриптам до и после обновления, а также по DbData-скриптам;setLog(...)— дописывает текст вBtk_DbUpgradeSession.sLogContext;resetUpgrade(...)— сбрасывает версии задач к состоянию выбранной сессии.
Для отложенных скриптов используются:
Btk_DelayedScriptPkg.registerS— регистрирует отложенный скрипт инсталляции вBtk_DelayedScriptLog;Btk_DelayedScriptPkg.registerC— регистрирует отложенный скрипт объекта схемы вBtk_DelayedScriptLog;Btk_DelayedScriptPkg.updateDelayedScriptLog— записывает дату выполнения и текст ошибки в связанную запись журнала после выполнения скрипта.
Для отчета генератора Btk_DbInstallerPkg.loadDbData формирует данные по обычным скриптам и отдельную карту отложенных скриптов с ошибками.
Ошибки отложенных скриптов в отчете генератора#
Если у отложенных скриптов есть ошибки выполнения, в отчете генератора выводится отдельный блок Ошибки отложенных скриптов.
Для каждой ошибки указываются:
имя скрипта;
дата исполнения;
текст ошибки.
Блок формируется только для записей с непустым текстом ошибки. Данные об отложенных скриптах с ошибками собираются в Btk_DbInstallerPkg.loadDbData.
Особенности эксплуатации#
Журнал ведется автоматически при выполнении штатного обновления базы данных.
Требования к безопасной настройке журналов, разграничению доступа, хранению и использованию журналов при расследовании инцидентов описаны в документе «Логирование, аудит и управление инцидентами», в разделах Защита журналов и Аудит пользовательской активности.
Ошибки в форме подсвечиваются через служебные и вычисляемые признаки sColor.... Они определяются по наличию ошибок:
в скриптах;
в DDL-операциях;
в миграционных задачах;
в отложенных скриптах.
Журнал обновлений обычно ценнее обычных технических логов, так как показывает историю обновлений и помогает разбирать проблемы применения релизов.
Объем журнала зависит не только от количества сессий, но и от детализации внутри каждой сессии.
Основной объем могут давать текстовые поля:
sLogContext;sTextDDL;sErrorDDL;sError;jData.
Для оценки роста рекомендуется анализировать:
количество строк в
Btk_UpdateDbSchemaна одну сессию;количество задач в
Btk_DbUpgradeSessionTask;количество строк в
Btk_DbSchemaVersionScript;размер полей
sLogContext,sTextDDL,sErrorDDL,sErrorиjData;частоту обновлений с ошибками;
самые объемные сессии обновления.
Хранение и очистка#
Для рабочей базы рекомендуется начинать со срока хранения журнала обновлений 180–365 дней. Для контуров с редкими релизами или повышенными требованиями к прослеживаемости журнал можно хранить дольше.
Для Btk_DelayedScriptLog предусмотрена отдельная очистка. Метод Btk_DelayedScriptPkg.clearOldDelayedScriptLogs(<количество дней>) удаляет записи старше указанного количества дней и зарегистрирован в CleanupJob. По умолчанию срок хранения составляет 30 дней.
Для остальных данных журнала обновлений штатной регламентной очистки в коде нет.
Удалять только строки Btk_DbUpgradeSession прямым SQL нежелательно, потому что у журнала есть связанные таблицы, а внешние ключи в текущей структуре не описаны как ON DELETE CASCADE.
Рекомендуемый вариант — оформить отдельный скриптовый метод очистки и зарегистрировать его в CleanupJob как DeleteType.script.
Перед удалением сессий из Btk_DbUpgradeSession необходимо удалить связанные записи отложенных скриптов. Для этого можно вызвать Btk_DelayedScriptPkg.clearOldDelayedScriptLogs(...) с тем же сроком хранения, который используется для удаления сессий журнала.
После этого данные по Btk_DbUpgradeSession.dDate удаляются в следующем порядке:
Btk_DbSchemaVersionScriptпо старымidSession, если таблица используется в контуре.Btk_DbUpgradeSessionTask.Btk_UpdateDbSchema.Btk_ReleaseModule.Btk_DbUpgradeSession.
SQL-ориентир для ручной проверки старых сессий:
select id
from Btk_DbUpgradeSession
where dDate < current_timestamp - interval '365 days';
Примечание
По умолчанию записи Btk_DelayedScriptLog хранятся 30 дней. Если сессии журнала обновлений хранятся дольше, сведения об отложенных скриптах для старых сессий могут быть удалены раньше самой сессии.