Технические аспекты журналирования в PolyAnalyst Grid

Все процессы PolyAnalyst Grid (padbservice, paserver, paworker, palogarch) регистрируются в журналах, которые находятся в директории data/logs/.

Файлы журналов

Имена соответствующих файлов генерируются по следующей схеме: [имя процесса] [идентификатор процесса ID (PID)] [автоматически сгенерированный UUID]; файлы имеют расширение .log:

padbservice.23548.ff797760-1d87-48f4-b8c7-fb2660865f9e.log

Файлы журналов имеют формат JSON Lines (по одному JSON объекту на строку) в кодировке UTF-8-BOM. В каждый файл сохраняется не более 10 тыс. записей. Далее, законченный файл закрывается; при этом создается новый файл журнала с другим UUID-ом. После записи каждой строчки в журнал к файлу применяется метод flush, чтобы сбросить содержимое кэша операционной системы на диск. Данное действие гарантирует вывод последней записи в журнал даже при аварийном завершении процесса.

Процесс журналирования

PolyAnalyst Grid предоставляет сервис для централизованного хранения записей журналов в базе данных PostgreSQL. Данный процесс активируется параметром logarch в конфигурационном файле padbservice.cfg.

На каждом узле кластера запускается по одному процессу palogarch, который раз в секунду сканирует директорию data/logs/ на наличие новых строчек в файлах журнала и отправляет их в базу данных. Файлы, дописанные до конца и более не удерживаемые другими процессами, окончательно удаляются с диска. После записи в базу и удаления всех файлов в директории (т.е., когда остальные процессы PolyAnalyst Grid уже не работают) процессы palogarch завершаются автоматически.

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

Также PolyAnalyst Grid предлагает средства автоматической очистки старых записей журнала. Вы можете ограничить период хранения записей журнала (в днях) в настройках кластера. Дополнительно, если параметр logarch выключен, вы можете ограничить количество файлов для хранения в директории data/logs, а если параметр logarch включен, вы можете ограничить количество записей журнала в таблице базы данных. По таймеру один раз в час выполняется проверка на переполнение журнала и удаление самых старых записей (файлов).

Структура записи журнала

Каждая запись журнала представляет собой JSON документ со следующими стандартными полями:

  • priority - приоритет события:

    • 1 - Debug (различная отладочная информация);

    • 2 - Notice (события, носящие характер уведомления);

    • 3 - Warning (события, носящие характер предупреждения);

    • 4 - Error (все ошибки);

    • 5 - Critical (критически важное событие).

В записи журнала попадают события с приоритетом большим или равным приоритету, указанному в параметре log_level соответствующей конфигурации.

  • category - идентификатор категории события:

    • 1 - Audit (события, связанные с действиями пользователей);

    • 2 - System (различные системные события);

    • 3 - Security (события, связанные с безопасностью);

    • 4 - Filesystem (события, связанные с файловой системой);

    • 5 - Database (события, связанные с базой данных);

    • 6 - Common (различные события, не вошедшие в другие категории);

    • 7 - Nodes (события, связанные с аналитическими узлами).

  • audit_scope - только для событий категории Audit:

    • 1 - Nodes - аудит действий с аналитическими узлами:

      • "View node" - просмотр результатов аналитического узла;

      • "Configure node" - изменение параметров аналитического узла;

      • "Remove nodes" - удаление аналитических узлов.

    • 2 - Scripts - аудит действий со скриптами, ветками, папками:

      • "Move script" - перемещение скрипта;

      • "Move branch" - перемещение ветки;

      • "Move folder" - перемещение папки;

      • "Remove script" - удаление скрипта;

      • "Remove branch" - удаление ветки;

      • "Remove folder" - удаление папки;

      • "Remove publication" - удаление публикации.

    • 3 - Dictionaries - аудит действий с лингвистическими словарями:

      • "View dictionary" - просмотр содержимого словаря;

      • "Edit dictionary" - редактирование содержимого словаря;

      • "Remove dictionaries" - удаление словаря;

      • "Remove dictionary folder" - удаление папки словарей.

    • 4 - Scheduler - аудит действий в Планировщике задач:

      • Будет добавлено позже.

    • 5 - Rights - аудит изменений прав доступа:

      • "Change access rights" - изменение прав доступа для объекта и субъектов.

    • 6 - Users - аудит операций с пользователями:

      • "User login" - успешный вход пользователя;

      • "User logout" - выход пользователя;

      • "Drop users" - принудительное завершение всех сессий пользователя;

      • "Block users" - блокировка пользователя с автоматическим завершением его сессий;

      • "Unblock users" - разблокировка пользователя;

      • "Remove users" - удаление данных пользователя из базы (не запрещает его вход в систему);

      • "Grant licenses" - выдача лицензий пользователям.

  • timestamp - время события в формате GMT.

  • message - описание события.

  • process - идентификатор процесса (PID).

  • thread - идентификатор потока (TID).

  • server_id - идентификатор сервера (paserver или padbservice).

  • worker_id - идентификатор рабочего процесса (paworker) или нули.

  • user_id - идентификатор пользователя или нули, если событие произошло не от имени пользователя.

  • user_name - имя пользователя или "System", если событие произошло не от имени пользователя.

  • location - отладочная информация, содержащая имя файла исходного кода и номер строки в нем.

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

При добавлении записи журнала в базу данных у нее появляются дополнительные атрибуты:

  • id - идентификатор записи как автоинкрементальный счетчик;

    Счетчик указывает только порядок добавления записей в базу, но не их фактическую хронологию. При выводе журнала в просмотре событий записи сортируются в соответствии с их временными метками.
  • fileid - UUID файла журнала, из которого пришла данная запись;

  • byteoffset - байтовое смещение записи в данном файле журнала;

  • timelabel - временная метка события в Unix Time с указанием миллисекунд;

  • logjsonb - индексированное представление JSON для быстрого поиска и фильтрации.