Общие сведения


При работе приложения 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).

Типы действий пользователя в приложении

В логе действий пользователя фиксируются следующие типы событий:

  1. ChangePassword – Изменение пароля
  2. ComponentCreate – Создание компонента
  3. ComponentDelete – Удаление компонента
  4. ComponentEdit – Изменение настроек компонента
  5. DatasetCreate – Создание датасета
  6. DatasetDelete – Удаление датасета
  7. DatasetEdit – Изменение настроек датасета
  8. DatasetUpdateData – Обновление данных датасета
  9. DatasourceCreate – Создание источника
  10. DatasourceDelete – Удаление источника
  11. DatasourceEdit – Изменение настроек источника
  12. FilterCreate – Создание фильтра
  13. FilterDelete – Удаление фильтра
  14. FilterUpdate – Изменение настроек фильтра
  15. GlobalThemeCreate – Создание глобальной темы
  16. GlobalThemeDelete – Удаление глобальной темы
  17. GlobalThemeReset – Сброс глобальной темы
  18. GlobalThemeSelect – Применение глобальной темы
  19. GlobalThemeUpdate – Обновление глобальной темы
  20. GroupCreate – Создание группы
  21. GroupDelete – Удаление группы
  22. GroupEdit – Изменение настроек группы
  23. GroupRightEdit - Изменение прав группы
  24. LayerCreate – Создание слоя
  25. LayerDelete – Удаление слоя
  26. LayerEdit – Изменение настроек слоя
  27. Login – Авторизация пользователя
  28. Logout – Выход пользователя из системы
  29. ProjectCreate – Создание проекта
  30. ProjectDelete – Удаление проекта
  31. ProjectEdit – Изменение настроек проекта
  32. ProjectViewed – Просмотр проекта
  33. RoleCreate – Создание роли
  34. RoleDelete – Удаление роли
  35. RoleEdit – Изменение настроек роли
  36. ScheduleCreate – Создание расписания автообновления данных датасета
  37. ScheduleDelete – Удаление расписания автообновления данных датасета
  38. ScheduleEdit – Изменение настроек расписания автообновления данных датасета
  39. ShareCreate - Создание ссылки с общим доступом
  40. ShareEdit - Изменение ссылки с общим доступом
  41. ShareDelete - Удаление ссылки с общим доступом
  42. SVGCreate – Создание объекта SVG
  43. SVGDelete – Удаление объекта SVG
  44. SVGEdit – Изменение настроек объекта SVG
  45. ThemeCreate – Создание темы оформления
  46. ThemeDelete –  Удаление темы оформления
  47. ThemeEdit – Изменение настроек темы оформления
  48. UserCreate – Создание пользователя
  49. UserDelete – Удаление пользователя
  50. UserEdit – Изменение настроек пользователя
  51. UserRightEdit - Изменение прав пользователя
  52. WidgetCreate – Создание виджета.
  53. WidgetDelete – Удаление виджета.
  54. WidgetEdit – Изменение настроек виджета

Детализация логируемых событий


Детализация события сервиса приложения

Для событий сервисов приложения запись о событии содержит следующие поля.

  • Datetime – метка времени события в формате Unix;
  • clientIP – IP-адрес, с которого пользователь подключился к системе;
  • instanceID – уникальный идентификатор сервиса приложения;
  • name  – наименование события;
  • params – описание события, включающее в себя ID события и измененные параметры сущности системы;
  • remote – IP и порт сервера системы;
  • serviceName – имя сервиса, однозначно определяющее его при поиске событий;
  • serviceVersion – версия сервиса;
  • tag – тэг лог-файла;
  • tag – тэг лог-сообщения;
  • time –  дата и время события;
  • userID – идентификатор пользователя;
  • userLogin – логин пользователя.

Пример записи о событии сервиса приложения:

Пример записи в логе сервиса
Datetime:1.747979320318e+12	clientIP:192.168.10.100	instanceID:24	name:DatasetCreate	params:[map[name:id value:882810] map[name:name value:Население РФ с HEX] map[name:type value:local]]	remote:0.0.0.0:9600	serviceName:manager	serviceVersion:2.9.2	sessionID:1.204814e+06	tag:user_log	tags:[Dataset Create]	time:2025-05-23 05:48:40.320716421 +0000 UTC m=+159343.232890933	userID:224997	userLogin:user8

Детализация события коннектора приложения

  • Datetime – метка времени события в формате Unix;
  • instanceID – уникальный идентификатор коннектора приложения;
  • logLevel – уровень логирования;
  • message – описание события, включающее в себя тип события, продолжительность выполнения запроса, код статуса запроса StatusCode, используемый метод запроса Method, адрес метода URL и тело ответа ResponseBody, если его запись в лог настроена при конфигурации сервиса Logstash;
  • serviceName – имя коннектора, однозначно определяющее его при поиске событий;
  • serviceVersion – версия коннектора;
  • tag – тэг лог-файла;
  • time –  дата и время события;
  • traceId – идентификатор, который позволяет отследить события в разных сервисах в рамках одного входящего запроса.


Пример записи в логе коннектора
Datetime:1747979320319	instanceID:6	logLevel:info	message:client request | Duration=718.928µs | Status=200 OK | Method=GET | URL=http://service-storage:9608/api/module/v1/storage/a4089ab7-9ab1-4419-b2c5-c7ff9151fa1c/8e4bf89c-7974-4d38-bea2-5171672f2abb.xlsx?zip=false	serviceName:file-xlsx	serviceVersion:2.8.1	tag:system_log	time:2025-05-23 05:48:40.321223283 +0000 UTC m=+159343.233397782	traceId:0312e2aa2dcfbf243fbc58c709414602

Детализация действия пользователя

Детализация действий пользователя по-разному происходит в интерфейсе приложения, в общем user_log.log в директории /logstash и в filtered-user.log, выгруженном из интерфейса.

Одно и то же событие будет выглядеть:

  • В разделе "Логи" приложения: 


Детализация действий пользователя в интерфейсе. При наведении на столбец "Сообщение" отображается детализированное тело сообщения в формате JSON
  • В общем user_log.log:


Детализация действия пользователя в user_log.log
Datetime:1.747979320318e+12	clientIP:192.168.10.100	instanceID:24	name:DatasetCreate	params:[map[name:id value:882810] map[name:name value:Население РФ с HEX] map[name:type value:local]]	remote:0.0.0.0:9600	serviceName:manager	serviceVersion:2.9.2	sessionID:1.204814e+06	tag:user_log	tags:[Dataset Create]	time:2025-05-23 05:48:40.320716421 +0000 UTC m=+159343.232890933	userID:224997	userLogin:user8


  • В filtered-user.log:


Детализация действия пользователя в filtered-user.log
action:DatasetCreate 	client_ip:		create_date:2025-05-23T05:48:40.320716Z		id:9.447515e+06	params:<nil>	remote:0.0.0.0:9600	section:dataset		section_translation:	session_id:	user_id:224997


Обратите внимание, что:

  • данные для отображения лога в интерфейсе берутся из общего user_log.log;
  • пустые поля в filtered-user.log зависят от установленного уровня логирования, в качестве примера приведен вариант по умолчанию.


Конфигурирование сервиса в части сбора, хранения и отправки логов


По умолчанию сбор, хранение и отправка логов конфигурируются в файле конфигурации приложения.

При необходимости можно произвести детальную конфигурацию в файле/etc/polymatica/platform/service/logstash/pipeline-config.json.

Файл pipeline-config.json

Общий формат файла конфигурации логирования:

Формат файла pipeline-config
{
  "inputs": [
    ...
  ],
  "parsers": [
    ...
  ],
  "outputs": [
    ...
  ]
}

Лог-сообщение попадает в сервис logstash через input, парсится в пары ключ-значение через parser, затем к полученным парам ключ-значение применяются соответствующие outputs.

Проходя через input, лог-сообщение получает тэг, который задается в параметрах массива input. Тэг определяет, какую последовательность parsers и outputs пройдет лог-сообщение. Каждое лог-сообщение должно иметь тэг.

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

Inputs

Для логов Polymatica Dashboards TN доступен только один input - rabbitmq.

Для настройки rabbitmq в файле pipeline-config можно задать следующие параметры в формате JSON:



НазваниеЗначение по умолчаниюТип данныхОписание
host*stringIP хоста, на котором развернуто ПО RabbitMQ
port*stringПорт подключения к серверу RabbitMQ
user*stringИмя пользователя RabbitMQ
password*stringПароль пользователя RabbitMQ
vhost*stringПространство имен, в котором будут объявляться точка обмена сообщениями и очередь лог-сообщений.
routing_key!stringКлюч, по которому связываются точка обмена сообщениями и очередь лог-сообщений.
queue.nameслучайное значениеstringИмя объявляемой очереди лог-сообщений.
queue.durable falseboolЕсли true, то объявленная очередь переживет перезагрузку сервера.
queue.auto_delete falsebool Очередь будет удалена сервером через короткое время, когда последний потребитель будет отменен или канал последнего потребителя будет закрыт.
queue.exclusive falseboolЕсли true, то очереди будут эксклюзивными: доступными только для соединения, которое их объявляет, и будут удалены при закрытии соединения.
queue.no_waitfalseboolЕсли true, то не ждать от сервера подтверждения об объявлении очереди.
exchange.name !stringНазвание объявляемой точки обмена сообщениями.
exchange.durable falseboolЕсли true, то объявленная точка обмена переживет перезагрузку сервера.
exchange.kind "topic"boolТип объявляемой точки обмена.
exchange.internal falseboolЕсли true, то к такой точке обмена нельзя привязать приложения, которые публикуют сообщения.
exchange.no_wait falseboolЕсли true, то не ждать от сервера подтверждения об объявлении точки обмена.
qos.prefetch_count 500intМаксимальное количество сообщений, которое будет передано потребителям до получения подтверждений.
qos.prefetch_size 0intМаксимальное количество байт, которое сервер доставит потребителям до получения подтверждений.

Parsers

Для логов Polymatica Dashboards TN доступно три парсера:

  • json. Данный парсер обрабатывает лог-сообщения в формате  json. Парсер не принимает никаких параметров.
  • ltsv. Данный парсер обрабатывает сообщения в формате "ключ-значение" и принимает следующие параметры:


НазваниеЗначение по умолчаниюТип данныхОписание
pairs_delimiter":"stringРазделитель для элементов пары "ключ-значение" во входящем сообщении.
value_delimiter "\t"stringРазделитель пар "ключ-значение" во входящем сообщении.
typesnulljsonСтруктура, которая определяет тип значения в структуре лога по ключу. Значение структуры может быть "integer", "float" или "bool".
  • regex. Данный парсер обрабатывает сообщения в формате, заданном регулярным выражением и принимает один параметр "format", в котором содержится регулярное выражение.

Outputs

Для логов Polymatica Dashboards TN доступно четыре способа вывода логов. Перед выводом в лог сообщения могут быть обработаны одним из двух форматтеров: json или ltsv. Параметры форматтеров идентичны параметрам парсеров.

Четыре outputs для логов:


  • file - сохранение логов в файл. Для сохранения в файл необходимо указать следующие параметры:


НазваниеЗначение по умолчаниюТип данныхОписание
path*stringПуть к директории, где будет сохраняться файл. Если оставить пустым, будет браться значение по умолчанию /usr/share/polymatica/platform/logstash/.
max_size 100intМаксимальный размер лог-файла МБ перед ротацией логов.
max_backups 3intМаксимальное количество хранимых файлов с логами. При превышении порога, самый ранний файл будет удален.
max_age 28intСрок хранения файлов логов.
compresstrueboolЕсли true, файл логов будет сжат.
file_name_from_field ""stringПоле, по значению которого выбирается файл для записи логов.


  • http - отправка логов по HTTP/HTTPS. Для настройки отправки необходимо указать следующие параметры:


НазваниеЗначение по умолчаниюТип данныхОписание
scheme"http"stringhttp/https
host!stringIP хоста, куда отправляются логи.
port-stringПорт сервера для приема логов.
URI-stringURL-адрес сервера для отправки логов.
method"post"stringМетод, в теле которого будут отправляться логи.


  • stdout - вывод логов в стандартный вывод Linux.
  • postgres - запись логов в базу данных PostgreSQL с указанными колонками.


НазваниеЗначение по умолчаниюТип данныхОписание
table!stringНазвание таблицы, в которой будет сохранен лог. 
columns!jsonJson-структура, проецирующая ключ лог-сообщения в название колонки. 
connection.dsn *stringПараметры DSN для подключения к БД.
connection.max_opened_connections *intМаксимальное количество открытых соединений.
connection.max_idle_connections *intМаксимальное количество неактивных соединений.
associationsnulljsonJson-структура, которая позволяет сохранить значение лога, имеющее формат списка объектов, в отдельную таблицу и создать связь между родительским и дочерним логом.

Пример настройки логирования

Разбор полной конфигурации файла pipeline-config
{
// Откуда поступает сообщение
   "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"
      }
    }
  ]
}

  • Нет меток