Технические аспекты журналирования в PolyAnalyst Grid
Все процессы PolyAnalyst Grid (padbservice
, paserver
, paworker
, palogarch
) регистрируются в журналах, которые находятся в директории data/logs/
.
Файлы журналов
Имена соответствующих файлов генерируются по следующей схеме: [имя процесса] [идентификатор процесса ID (PID)] [автоматически сгенерированный UUID]; файлы имеют расширение .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 для быстрого поиска и фильтрации.