Общие сведения
При работе приложения Dashboards TN логируются события сервисов приложения, события коннекторов приложения, а также действия пользователей в приложении.
Для сбора, хранения и отправки логов служит сервис приложения Logstash.
Логи приложения хранятся в директории, указанной в параметре POLYMATICA_LOGSTASH_REPOSITORY_PATH (для Docker-установки) либо "repository": { "path": "<path>"} (для пакетной установки). В директории хранятся следующие файлы:
- логи событий по каждому сервису и коннектору приложения (файлы типа 
manager.log или database-mssql.log); - логи действий пользователя в приложении (
user_log.log). 
Получение файлов логов через интерфейс приложения
Вы можете скачать все хранящиеся в директории логов файлы через интерфейс приложения со страницы приложения /setting/logs (раздел "Логи"). Для доступа к странице у вас должна быть роль администратора, суперпользователя или роль с доступом к логам системы.
Чтобы скачать файлы, кликните на странице кнопку «Выгрузить» и выберите в меню «Логи». По клику формируется и автоматически скачивается архив с файлами. Формирование архива для скачивания может занять некоторое время.
|  Scroll Title | 
|---|
| title-alignment | center | 
|---|
 | title | Раздел "Логи". Кнопка выгрузки логов | 
|---|
 
  | 
 
  | 
Ссылка на архив с файлами логов приходит в уведомления системы, по ней можно выгрузить архив локально. 
Структура файлов архива логов полностью повторяет структуру директории хранения логов, за исключением того, что файл логов действий пользователя называется filtered_user.log, так как при скачивании лога из интерфейса к нему применяются фильтры (поиск или фильтрация по колонкам).
|  Блок  кода | 
|---|
| language | text | 
|---|
 | title | Пример содержимого архива логов | 
|---|
 | collapse | true | 
|---|
 
  | 
//Логи сервисов приложения  
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).
 
Типы действий пользователя в приложении
В логе действий пользователя фиксируются следующие типы событий:
|  Раскрыть | 
|---|
| title | Посмотреть список (58 пунктов) | 
|---|
 
  | 
- ChangePassword – Изменение пароля
 - CommentCreate – Создание комментария
 - CommentEdit – Редактирование комментария
 - CommentDelete – Удаление комментария
 - ComponentCreate – Создание компонента
 - ComponentDelete – Удаление компонента
 - ComponentEdit – Изменение настроек компонента
 - DatasetCreate – Создание датасета
 - DatasetDelete – Удаление датасета
 - DatasetEdit – Изменение настроек датасета
 - DatasetUpdateData – Обновление данных датасета
 - DatasourceCreate – Создание источника
 - DatasourceDelete – Удаление источника
 - DatasourceEdit – Изменение настроек источника
 - DiagnosticsGet – Выгрузка диагностической информации о системе 
 - 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;
 - clientIP – IP-адрес, с которого пользователь подключился к системе;
 - instanceID – уникальный идентификатор сервиса приложения;
 - name  – наименование события;
 - params – описание события, включающее в себя ID события и измененные параметры сущности системы;
 - remote – IP и порт сервера системы;
 - serviceName – имя сервиса, однозначно определяющее его при поиске событий;
 - serviceVersion – версия сервиса;
 - tag – тэг лог-файла;
 - tag – тэг лог-сообщения;
 - time –  дата и время события;
 - userID – идентификатор пользователя;
 - userLogin – логин пользователя.
 
Пример записи о событии сервиса приложения:
|  Блок  кода | 
|---|
| language | text | 
|---|
 | title | Пример записи в логе сервиса | 
|---|
 | collapse | true | 
|---|
 
  | 
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 – идентификатор, который позволяет отследить события в разных сервисах в рамках одного входящего запроса.
 
|  Блок  кода | 
|---|
| language | plain | 
|---|
 | title | Пример записи в логе коннектора | 
|---|
 | collapse | true | 
|---|
 
  | 
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, выгруженном из интерфейса.
Одно и то же событие будет выглядеть:
- В разделе "Логи" приложения: 
 
|  Scroll Title | 
|---|
| title-alignment | center | 
|---|
 | title | Детализация действий пользователя в интерфейсе. При наведении на столбец "Сообщение" отображается детализированное тело сообщения в формате JSON | 
|---|
 
  | 
 
  | 
|  Блок  кода | 
|---|
| language | text | 
|---|
 | title | Детализация действия пользователя в user_log.log | 
|---|
 | collapse | true | 
|---|
 
  | 
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  | 
|  Блок  кода | 
|---|
| language | text | 
|---|
 | title | Детализация действия пользователя в filtered-user.log | 
|---|
 | collapse | true | 
|---|
 
  | 
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 зависят от установленного уровня логирования сервиса manager (см. Параметры конфигурации, параметр LOG_LVL), в качестве примера приведен вариант по умолчанию.
 
  | 
Конфигурирование сервиса в части сбора, хранения и отправки логов
По умолчанию сбор, хранение и отправка логов конфигурируются в файле конфигурации приложения.
При необходимости можно произвести детальную конфигурацию в файле/etc/polymatica/platform/service/logstash/pipeline-config.json.
Файл pipeline-config.json
Общий формат файла конфигурации логирования:
|  Блок  кода | 
|---|
| language | java | 
|---|
 | title | Формат файла pipeline-config | 
|---|
 | collapse | true | 
|---|
 
  | 
{
  "inputs": [
    ...
  ],
  "parsers": [
    ...
  ],
  "outputs": [
    ...
  ]
} | 
Лог-сообщение попадает в сервис logstash через input, парсится в пары ключ-значение через parser, затем к полученным парам ключ-значение применяются соответствующие outputs.
Проходя через input, лог-сообщение получает тэг, который задается в параметрах массива input. Тэг определяет, какую последовательность parsers и outputs пройдет лог-сообщение. Каждое лог-сообщение должно иметь тэг.
В массиве outputs указываются форматтеры, которые будут обрабатывать файл сообщения для вывода, и места вывода логов.
Для логов Polymatica Dashboards TN доступен только один input - rabbitmq.
Для настройки rabbitmq в файле pipeline-config можно задать следующие параметры в формате JSON:
|  Раскрыть | 
|---|
| title | Нажмите здесь для просмотра всех параметров настройки | 
|---|
 
  | 
 
 | Название | Значение по умолчанию | Тип данных | Описание | 
|---|
 | 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. Данный парсер обрабатывает сообщения в формате "ключ-значение" и принимает следующие параметры:
 
|  Раскрыть | 
|---|
| title | Параметры парсера ltsv | 
|---|
 
  | 
| Название | Значение по умолчанию | Тип данных | Описание | 
|---|
 | pairs_delimiter | ":" | string | Разделитель для элементов пары "ключ-значение" во входящем сообщении. |  | value_delimiter  | "\t" | string | Разделитель пар "ключ-значение" во входящем сообщении. |  | types | null | json | Структура, которая определяет тип значения в структуре лога по ключу. Значение структуры может быть "integer", "float" или "bool". |  
  | 
Outputs
Для логов Polymatica Dashboards TN доступно четыре способа вывода логов. Перед выводом в лог сообщения могут быть обработаны одним из двух форматтеров: json или ltsv. Параметры форматтеров идентичны параметрам парсеров.
Четыре outputs для логов:
- file - сохранение логов в файл. Для сохранения в файл необходимо указать следующие параметры:
 
|  Раскрыть | 
|---|
| title | Параметры вывода логов в файл | 
|---|
 
  | 
| Название | Значение по умолчанию | Тип данных | Описание | 
|---|
 | 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. Для настройки отправки необходимо указать следующие параметры:
 
|  Раскрыть | 
|---|
| title | Параметры отправки логов | 
|---|
 
  | 
| Название | Значение по умолчанию | Тип данных | Описание | 
|---|
 | scheme | "http" | string | http/https |  | host | ! | string | IP хоста, куда отправляются логи. |  | port | - | string | Порт сервера для приема логов. |  | URI | - | string | URL-адрес сервера для отправки логов. |  | method | "post" | string | Метод, в теле которого будут отправляться логи. |  
  | 
- stdout - вывод логов в стандартный вывод Linux.
 
- postgres - запись логов в базу данных PostgreSQL с указанными колонками.
 
|  Раскрыть | 
|---|
| title | Параметры записи логов в БД | 
|---|
 
  | 
| Название | Значение по умолчанию | Тип данных | Описание | 
|---|
 | table | ! | string | Название таблицы, в которой будет сохранен лог.  |  | columns | ! | json | Json-структура, проецирующая ключ лог-сообщения в название колонки.  |  | connection.dsn  | * | string | Параметры DSN для подключения к БД. |  | connection.max_opened_connections  | * | int | Максимальное количество открытых соединений. |  | connection.max_idle_connections  | * | int | Максимальное количество неактивных соединений. |  | associations | null | json | Json-структура, которая позволяет сохранить значение лога, имеющее формат списка объектов, в отдельную таблицу и создать связь между родительским и дочерним логом. |  
  | 
Пример настройки логирования
|  Блок  кода | 
|---|
| language | java | 
|---|
 | title | Разбор полной конфигурации файла pipeline-config | 
|---|
 | collapse | true | 
|---|
 
  | 
{
// Откуда поступает сообщение
   "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",
        "name": "action",
        "remote": "remote",
        "userID": "user_id",
        "params": "params",
        "clientIP": "client_ip",
        "sessionID": "session_id"
      }
    }
  ]
} |