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


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

Для сбора, хранения и отправки логов служит сервис приложения Logstash.

По умолчанию все логи приложения хранятся в папке /usr/share/polymatica/platform/logstash/. В директории хранятся следующие файлы:

  • логи событий по каждому сервису приложения (файлы вида dashboard.log);
  • логи событий по каждому коннектору, подключающему к приложению источники (файлы типа file-xslx.log или database-mssql.log);
  • логи действий пользователя в приложении (user_log.log).

Получение файлов логов через интерфейс приложения


Вы можете скачать все хранящиеся в /usr/share/polymatica/platform/logstash/ файлы через интерфейс приложения со страницы приложения /setting/logs (раздел "Логи"). Для доступа к странице у вас должна быть роль суперпользователя или роль с доступом к логированию действий.

Чтобы скачать файлы, кликните на странице кнопку «Скачать логи». По клику формируется и автоматически скачивается архив с файлами. Формирование архива для скачивания может занять некоторое время.

Раздел "Логи". Кнопка загрузки логов

Структура файлов архива логов полностью повторяет структуру директории /usr/share/polymatica/platform/logstash/, за исключением того, что файл логов действий пользователя называется filtered_user.log, так как при скачивании лога из интерфейса к нему применяются фильтры (по времени, по модулю, по пользователю).

Пример содержимого архива логов
//Логи сервисов приложения  

dashboard.log
data-transformer.log
discovery.log
entity-cache.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;
  • 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, выгруженном из интерфейса.

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

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


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


Детализация действия пользователя в user_log.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


  • В filtered-user.log:


Детализация действия пользователя в filtered-user.log
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;
  • сокращенное отображение лога, выгруженного из интерфейса, является временным и будет исправлено в будущих версиях приложения.


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


Параметры конфигурации сервиса Logstash приведены в разделе Параметры конфигурации приложения, подраздел "Сервис logstash".

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

Файл pipeline-config.json

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

Формат файла pipeline-confiig
{
  "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"
      }
    }
  ]
}

  • Нет меток