Общие сведения
При работе приложения Dashboards TN логируются события сервисов приложения, события коннекторов приложения, а также действия пользователей в приложении.
Для сбора, хранения и отправки логов служит сервис приложения Logstash.
Логи приложения хранятся в директории, указанной в параметре POLYMATICA_LOGSTASH_REPOSITORY_PATH (для Docker-установки) либо "repository": { "path": "<path>"} (для пакетной установки). В директории хранятся следующие файлы:
- логи событий по каждому сервису и коннектору приложения (файлы типа
manager
.
log
или database-mssql.log
); - логи действий пользователя в приложении (
user_log.log
).
Получение файлов логов через интерфейс приложения
Вы можете скачать все хранящиеся в директории логов файлы через интерфейс приложения со страницы приложения /setting/logs
(раздел "Логи"). Для доступа к странице у вас должна быть роль суперпользователя или роль с доступом к логированию действий.
Чтобы скачать файлы, кликните на странице кнопку «Скачать логи». По клику формируется и автоматически скачивается архив с файлами. Формирование архива для скачивания может занять некоторое время.
Структура файлов архива логов полностью повторяет структуру директории хранения логов, за исключением того, что файл логов действий пользователя называется filtered_user.log
, так как при скачивании лога из интерфейса к нему применяются фильтры (по времени, по модулю, по пользователю).
//Логи сервисов приложения
data-transformer.log
discovery.log
file-storage.log
gateway.log
logstash.log
manager.log
notifications.log
renderer.log
//Логи коннекторов к БД
database-clickhouse.log
database-mssql.log
database-mysql.log
database-oracle.log
database-postgres.log
database-vertica.log
database-ydb.log
//Логи коннекторов к файловым источникам
file-csv.log
file-json.log
file-xlsx.log
file-xml.log
//Логи коннектора к источнику Polymatica Analytics
polymatica-analytics.log
//Логи коннектора к источнику Р7-Office
r7-office.log
//Лог действий пользователей в приложении
filtered_user.log |
Типы логируемых событий
Типы событий сервисов приложения
В логах событий сервисов приложения фиксируются следующие типы событий:
- исходящие запросы, который сервис в своей работе отправляет другому сервису (outgoing request);
- входящие запросы, который сервис в своей работе принимает от другого сервиса (incoming request).
Типы событий коннекторов
Для коннекторов к источникам приложения фиксируются следующие типы событий:
- запрос данных через коннектор (client-request);
- запрос от БД на передачу данных в приложение (incoming request).
Типы действий пользователя в приложении
В логе действий пользователя фиксируются следующие типы событий:
- ChangePassword – Изменение пароля
- ComponentCreate – Создание компонента
- ComponentDelete – Удаление компонента
- ComponentEdit – Изменение настроек компонента
- DatasetCreate – Создание датасета
- DatasetDelete – Удаление датасета
- DatasetEdit – Изменение настроек датасета
- DatasetUpdateData – Обновление данных датасета
- DatasourceCreate – Создание источника
- DatasourceDelete – Удаление источника
- DatasourceEdit – Изменение настроек источника
- FilterCreate – Создание фильтра
- FilterDelete – Удаление фильтра
- FilterUpdate – Изменение настроек фильтра
- GlobalThemeCreate – Создание глобальной темы
- GlobalThemeDelete – Удаление глобальной темы
- GlobalThemeReset – Сброс глобальной темы
- GlobalThemeSelect – Применение глобальной темы
- GlobalThemeUpdate – Обновление глобальной темы
- GroupCreate – Создание группы
- GroupDelete – Удаление группы
- GroupEdit – Изменение настроек группы
- GroupRightEdit - Изменение прав группы
- LayerCreate – Создание слоя
- LayerDelete – Удаление слоя
- LayerEdit – Изменение настроек слоя
- Login – Авторизация пользователя
- Logout – Выход пользователя из системы
- ProjectCreate – Создание проекта
- ProjectDelete – Удаление проекта
- ProjectEdit – Изменение настроек проекта
- ProjectViewed – Просмотр проекта
- RoleCreate – Создание роли
- RoleDelete – Удаление роли
- RoleEdit – Изменение настроек роли
- ScheduleCreate – Создание расписания автообновления данных датасета
- ScheduleDelete – Удаление расписания автообновления данных датасета
- ScheduleEdit – Изменение настроек расписания автообновления данных датасета
- ShareCreate - Создание ссылки с общим доступом
- ShareEdit - Изменение ссылки с общим доступом
- ShareDelete - Удаление ссылки с общим доступом
- SVGCreate – Создание объекта SVG
- SVGDelete – Удаление объекта SVG
- SVGEdit – Изменение настроек объекта SVG
- ThemeCreate – Создание темы оформления
- ThemeDelete – Удаление темы оформления
- ThemeEdit – Изменение настроек темы оформления
- UserCreate – Создание пользователя
- UserDelete – Удаление пользователя
- UserEdit – Изменение настроек пользователя
- UserRightEdit - Изменение прав пользователя
- WidgetCreate – Создание виджета.
- WidgetDelete – Удаление виджета.
- WidgetEdit – Изменение настроек виджета
|
Детализация логируемых событий
Детализация события сервиса приложения
Для событий сервисов приложения запись о событии содержит следующие поля.
- Datetime – метка времени события в формате Unix;
- instanceID – уникальный идентификатор сервиса приложения;
- logLevel – уровень логирования;
- message – описание события, включающее в себя тип события, код статуса запроса StatusCode, используемый метод запроса Method и адрес метода Path;
- serviceName – имя сервиса, однозначно определяющее его при поиске событий;
- serviceVersion – версия сервиса;
- tag - тэг лог-сообщения, задаваемый в настройках логирования;
- time – дата и время события;
- traceId – идентификатор, который позволяет отследить события в разных сервисах в рамках одного входящего запроса.
Пример записи о событии сервиса приложения:
Datetime:1733382611414 instanceID:25 logLevel:info message:incoming request | StatusCode=200 | Method=POST | Path=/api/module/v1/authentication serviceName:manager serviceVersion:2.4.0 tag:system_log time:2024-12-05 07:10:11.41618714 +0000 UTC m=+154977.985449348 traceId:ed976b3433a11c5054d20de3afb40ea7 |
Детализация события коннектора приложения
- Datetime – метка времени события в формате Unix;
- instanceID – уникальный идентификатор сервиса приложения;
- logLevel – уровень логирования;
- message – описание события, включающее в себя тип события, продолжительность выполнения запроса, код статуса запроса StatusCode, IP-адрес, откуда поступил запрос RemoteAddr, используемый метод запроса Method и адрес метода Path и тело ответа ResponseBody, если его запись в лог настроена при конфигурации сервиса Logstash;
- serviceName – имя сервиса, однозначно определяющее его при поиске событий;
- serviceVersion – версия сервиса;
- tag - тэг лог-сообщения, задаваемый в настройках логирования;
- time – дата и время события;
- traceId – идентификатор, который позволяет отследить события в разных сервисах в рамках одного входящего запроса.
Datetime:1733356806764 instanceID:25 logLevel:info message: client request | Duration=948.301µs | Status=200 OK | RemoteAddr=0.0.0.0:9600 | Method=PUT | URL=http://discovery:9610/api/module/v1/discovery/database-mssql | ResponseBody= serviceName:database-mssql serviceVersion:2.7.0 tag:system_log time:2024-12-05 00:00:06.765309546 +0000 UTC m=+129173.334571722 traceId:02ffe00a93d6c685a44a5bba25a7cec4 |
Детализация действия пользователя
Детализация действий пользователя по-разному происходит в интерфейсе приложения, в общем user_log.log
в директории /logstash
и в filtered-user.log
, выгруженном из интерфейса.
Одно и то же событие будет выглядеть:
- В разделе "Логи" приложения:
Datetime:1.733382611425e+12 clientIP:192.168.10.100 instanceID:25 name:UserRightEdit params:[map[name:action_author value:kasyanovalo] map[name:get_access_user_id value:224997] map[name:get_access_user_login value:kasyanovalo] map[name:entity_id value:123716] map[name:entity_type value:project] map[name:entity_name value:Исходный проект] map[name:access_right value:2]] remote:0.0.0.0:9600 serviceName:manager serviceVersion:2.4.0 sessionID:600952 tag:user_log tags:[Username Right] time:2024-12-05 07:10:11.426164833 +0000 UTC m=+154977.995427012 userID:224997 userLogin:kasyanovalo |
action:UserRightEdit client_ip: create_date:2024-12-05T07:10:11.426164Z id:6.976287e+06 module_name:manager params:<nil> remote:0.0.0.0:9600 session_id: user_id:224997 |
Обратите внимание, что: - данные для отображения лога в интерфейса берутся из общего
user_log.log ; - сокращенное отображение лога, выгруженного из интерфейса, является временным и будет исправлено в будущих версиях приложения.
|
Конфигурирование сервиса в части сбора, хранения и отправки логов
По умолчанию сбор, хранение и отправка логов не конфигурируются в файле конфигурации приложения.
Однако, при необходимости возможно произвести конфигурацию в файле/etc/polymatica/platform/service/logstash/pipeline-config.json
.
Файл pipeline-config.json
Общий формат файла конфигурации логирования:
{
"inputs": [
...
],
"parsers": [
...
],
"outputs": [
...
]
} |
Лог-сообщение попадает в сервис logstash
через input
, парсится в пары ключ-значение через parser
, затем к полученным парам ключ-значение применяются соответствующие outputs
.
Проходя через input
, лог-сообщение получает тэг, который задается в параметрах массива input
. Тэг определяет, какую последовательность parsers
и outputs
пройдет лог-сообщение. Каждое лог-сообщение должно иметь тэг.
В массиве outputs
указываются форматтеры, которые будут обрабатывать файл сообщения для вывода, и места вывода логов.
Inputs
Для логов Polymatica Dashboards TN доступен только один input - rabbitmq.
Для настройки rabbitmq в файле pipeline-config
можно задать следующие параметры в формате JSON:
Название | Значение по умолчанию | Тип данных | Описание |
---|
host | * | string | IP хоста, на котором развернуто ПО RabbitMQ | port | * | string | Порт подключения к серверу RabbitMQ | user | * | string | Имя пользователя RabbitMQ | password | * | string | Пароль пользователя RabbitMQ | vhost | * | string | Пространство имен, в котором будут объявляться точка обмена сообщениями и очередь лог-сообщений. | routing_key | ! | string | Ключ, по которому связываются точка обмена сообщениями и очередь лог-сообщений. | queue.name | случайное значение | string | Имя объявляемой очереди лог-сообщений. | queue.durable | false | bool | Если true, то объявленная очередь переживет перезагрузку сервера. | queue.auto_delete | false | bool | Очередь будет удалена сервером через короткое время, когда последний потребитель будет отменен или канал последнего потребителя будет закрыт. | queue.exclusive | false | bool | Если true, то очереди будут эксклюзивными: доступными только для соединения, которое их объявляет, и будут удалены при закрытии соединения. | queue.no_wait | false | bool | Если true, то не ждать от сервера подтверждения об объявлении очереди. | exchange.name | ! | string | Название объявляемой точки обмена сообщениями. | exchange.durable | false | bool | Если true, то объявленная точка обмена переживет перезагрузку сервера. | exchange.kind | "topic" | bool | Тип объявляемой точки обмена. | exchange.internal | false | bool | Если true, то к такой точке обмена нельзя привязать приложения, которые публикуют сообщения. | exchange.no_wait | false | bool | Если true, то не ждать от сервера подтверждения об объявлении точки обмена. | qos.prefetch_count | 500 | int | Максимальное количество сообщений, которое будет передано потребителям до получения подтверждений. | qos.prefetch_size | 0 | int | Максимальное количество байт, которое сервер доставит потребителям до получения подтверждений. |
|
Parsers
Для логов Polymatica Dashboards TN доступно три парсера:
- json. Данный парсер обрабатывает лог-сообщения в формате json. Парсер не принимает никаких параметров.
- ltsv. Данный парсер обрабатывает сообщения в формате "ключ-значение" и принимает следующие параметры:
Название | Значение по умолчанию | Тип данных | Описание |
---|
pairs_delimiter | ":" | string | Разделитель для элементов пары "ключ-значение" во входящем сообщении. | value_delimiter | "\t" | string | Разделитель пар "ключ-значение" во входящем сообщении. | types | null | json | Структура, которая определяет тип значения в структуре лога по ключу. Значение структуры может быть "integer", "float" или "bool". |
|
Outputs
Для логов Polymatica Dashboards TN доступно четыре способа вывода логов. Перед выводом в лог сообщения могут быть обработаны одним из двух форматтеров: json или ltsv. Параметры форматтеров идентичны параметрам парсеров.
Четыре outputs для логов:
- file - сохранение логов в файл. Для сохранения в файл необходимо указать следующие параметры:
Название | Значение по умолчанию | Тип данных | Описание |
---|
path | * | string | Путь к директории, где будет сохраняться файл. Если оставить пустым, будет браться значение по умолчанию /usr/share/polymatica/platform/logstash/ . | max_size | 100 | int | Максимальный размер лог-файла МБ перед ротацией логов. | max_backups | 3 | int | Максимальное количество хранимых файлов с логами. При превышении порога, самый ранний файл будет удален. | max_age | 28 | int | Срок хранения файлов логов. | compress | true | bool | Если true, файл логов будет сжат. | file_name_from_field | "" | string | Поле, по значению которого выбирается файл для записи логов. |
|
- http - отправка логов по HTTP/HTTPS. Для настройки отправки необходимо указать следующие параметры:
Название | Значение по умолчанию | Тип данных | Описание |
---|
scheme | "http" | string | http/https | host | ! | string | IP хоста, куда отправляются логи. | port | - | string | Порт сервера для приема логов. | URI | - | string | URL-адрес сервера для отправки логов. | method | "post" | string | Метод, в теле которого будут отправляться логи. |
|
- stdout - вывод логов в стандартный вывод Linux.
- postgres - запись логов в базу данных PostgreSQL с указанными колонками.
Название | Значение по умолчанию | Тип данных | Описание |
---|
table | ! | string | Название таблицы, в которой будет сохранен лог. | columns | ! | json | Json-структура, проецирующая ключ лог-сообщения в название колонки. | connection.dsn | * | string | Параметры DSN для подключения к БД. | connection.max_opened_connections | * | int | Максимальное количество открытых соединений. | connection.max_idle_connections | * | int | Максимальное количество неактивных соединений. | associations | null | json | Json-структура, которая позволяет сохранить значение лога, имеющее формат списка объектов, в отдельную таблицу и создать связь между родительским и дочерним логом. |
|
Пример настройки логирования
{
// Откуда поступает сообщение
"inputs": [
{
"name": "rabbitmq", // Сообщение поступает из ПО RabbitMQ
"tag": "user_log", // Сообщению присваивается тэг user_log
// Сообщение передается сервису logstash для записи в лог действий пользователя
"queue": {
"name": "logstash.service.users"
},
"exchange": {
"name": "logstash"
},
"routing_key": "logstash.*.users"
},
{
"name": "rabbitmq", // Сообщение поступает из ПО RabbitMQ
"tag": "system_log", // Сообщению присваивается тэг system_log
//Сообщение передается сервису logstash для записи в лог действий сервисов/коннекторов
"queue": {
"name": "logstash.service.system"
},
"exchange": {
"name": "logstash"
},
"routing_key": "logstash.*.system"
}
],
// Чем обрабатывается сообщение
"parsers": [
// Сообщение с тэгом system_log обрабатывается регулярным выражением, приведенным в поле "format"
{
"name": "regex",
"tag": "system_log",
"format": "time=\"$_\" logLevel=$logLevel message=\"$message\" Datetime=$Datetime instanceID=$instanceID serviceName=$serviceName serviceVersion=$serviceVersion traceId=$traceId"
},
// Сообщение с тэгом user_log обрабатывается парсером JSON
{
"name": "json",
"tag": "user_log"
}
],
// Куда и в каком виде выводится сообщение
"outputs": [
{
"name": "stdout",
"tag": "system_log",
"format": {
"name": "ltsv",
"pairs_delimiter": ":",
"value_delimiter": "\t" // Сообщения с тэгом system_log будут выводиться в стандартный вывод Linux после обработки форматтером ltsv. Пары ключ-значение разделяются ":", отделяются друг от друга табуляцией.
}
},
{
"name": "file",
"tag": "user_log",
"format": {
"name": "ltsv" // Сообщение с тэгом user_log будет выводиться в файл после обработки форматтером ltsv.
}
},
{
"name": "file",
"tag": "system_log",
"file_name_from_field": "serviceName", // Cообщения с тэгом system_log также будут выводиться в файл, для чего форматтер ltsv будет брать имя сервиса из поля serviceName.
"format": {
"name": "ltsv"
}
},
{
"name": "postgresql", // Сообщения с тэгом user_log также будут записаны в таблицу PostgreSQL с нижеуказанными колонками.
"tag": "user_log",
"table": "logging",
"columns": {
"time": "create_date",
"serviceName": "module_name",
"name": "action",
"remote": "remote",
"userID": "user_id",
"params": "params",
"clientIP": "client_ip",
"sessionID": "session_id"
}
}
]
} |