При работе приложения 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).
Типы действий пользователя в приложении
В логе действий пользователя фиксируются следующие типы событий:
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 – Изменение настроек виджета
Детализация логируемых событий
Детализация события сервиса приложения
Для событий сервисов приложения запись о событии содержит следующие поля.
message– описание события, включающее в себя тип события, продолжительность выполнения запроса, код статуса запросаStatusCode, IP-адрес, откуда поступил запрос RemoteAddr, используемый метод запросаMethodи адрес методаPath и тело ответа ResponseBody, если его запись в лог настроена при конфигурации сервиса Logstash;
serviceName – имя сервиса, однозначно определяющее его при поиске событий;
serviceVersion– версия сервиса;
tag - тэг лог-сообщения, задаваемый в настройках логирования;
time – дата и время события;
traceId – идентификатор, который позволяет отследить события в разных сервисах в рамках одного входящего запроса.
Пример записи в логе коннектораРазвернуть исходный код
Детализация действий пользователя по-разному происходит в интерфейсе приложения, в общем user_log.log в директории /logstash и в filtered-user.log, выгруженном из интерфейса.
Одно и то же событие будет выглядеть:
В разделе "Логи" приложения:
Детализация действий пользователя в интерфейсе. При наведении на столбец "Сообщение" отображается детализированное тело сообщения в формате JSON
В общем user_log.log:
Детализация действия пользователя в user_log.logРазвернуть исходный код
Лог-сообщение попадает в сервис 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".
regex. Данный парсер обрабатывает сообщения в формате, заданном регулярным выражением и принимает один параметр "format", в котором содержится регулярное выражение.
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-структура, которая позволяет сохранить значение лога, имеющее формат списка объектов, в отдельную таблицу и создать связь между родительским и дочерним логом.
Пример настройки логирования
Разбор полной конфигурации файла 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"
}
}
]
}