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


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

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

Управление логированием


Логирование событий сервисов приложения можно конфигурировать отдельно для каждого сервиса, посредством следующих параметров.

  • LOG_LVL – уровень логирования действий сервиса. Параметр принимает значения:
    • 0 – Panic level
    • 1 – Fatal level
    • 2 – Error level
    • 3 – Warning level
    • 4 – Info level
    • 5 – Debug level
    • 6 – Trace level
      По умолчанию используется значение «4».
  • LOG_WITH_RESPONSE – логирование тела полученного ответа. Параметр доступен только для сервисов Manager и Dashboard. По умолчанию используется значение false.
Логирование событий в приложении не конфигурируется.

 Сервис Logstash конфигурируется следующими параметрами.

  • POLYMATICA_LOGSTASH_REPOSITORY_PATH – директория хранения файлов логов. По умолчанию используется значение /usr/share/polymatica/platform/logstash/
  • POLYMATICA_LOGSTASH_PIPELINE_CONFIG_PATH – директория с файлом конфигурации сервиса в части сбора, хранения и отправки логов. По умолчанию используется значение /etc/polymatica/platform/service/logstash/.

Типы логируемых событий


Типы событий сервисов приложения

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

  • outgoing 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. LayerCreate – слой создан.
  24. LayerDelete – слой удалён.
  25. LayerEdit – настройки слоя изменены.
  26. Login – пользователь авторизовался.
  27. Logout – пользователь вышел.
  28. ProjectCreate – проект создан.
  29. ProjectDelete – проект удалён.
  30. ProjectEdit – настройки проекта изменены
  31. RoleCreate – роль создана.
  32. RoleDelete – роль удалена.
  33. RoleEdit – настройки роли изменены.
  34. ScheduleCreate – расписание автообновления данных датасета создано.
  35. ScheduleDelete – расписание автообновления данных датасета удалено.
  36. ScheduleEdit – настройки расписания автообновления данных датасета изменены.
  37. SVGCreate – объект SVG создан.
  38. SVGDelete – объект SVG удалён.
  39. SVGEdit – настройки объекта SVG изменены.
  40. ThemeCreate – тема оформления создана.
  41. ThemeDelete –  тема оформления удалена.
  42. ThemeEdit – настройки темы оформления изменены.
  43. UserCreate – пользователь создан.
  44. UserDelete – пользователь удалён.
  45. UserEdit – настройки пользователя изменены.
  46. WidgetCreate – виджет создан.
  47. WidgetDelete – виджет удалён.
  48. WidgetEdit – настройки виджета изменены

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


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

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

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

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

time="2023-10-19 06:14:08" logLevel=info message="outgoing request | StatusCode=200 | Method=PUT | URL=http://discovery:9610/api/v1/discovery/database-postgres | Duration=947.52µs" Datetime=1697696048237 instanceID=12 serviceName=database-postgres serviceVersion="1.5.0\n" traceId=04b4ec8e6b0253b857df7eb0fb7991fc

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

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

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

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

Datetime:1.697452592544e+12     instanceID:23   name:RoleEdit   params:[map[Name:id Value:1] map[Name:name Value:Первый уровень]]       remote:0.0.0.0:9600     serviceName:manager     serviceVersion:1.12.0
        tag:user_log    tags:[Role Edit]        time:2023-10-16 10:36:32.545802177 +0000 UTC m=+20833.309123274 userID:1        userLogin:admin

Конфигурирование Logstash


Сервис конфигурируется файлом POLYMATICA_LOGSTASH_PIPELINE_CONFIG_PATH/pipeline-config.json.

Сохранение логов в файлы

Сохранение логов событий в файлы определяется в файле конфигурации, в массиве "outputs": [].

При установке используется конфигурация:

{
  "name": "file",
  "tag": "user_log",
  "format": {
    "name": "ltsv"
  }
},
{
  "name": "file",
  "tag": "system_log",
  "format": {
    "name": "ltsv"
  }
}

где tag – тип логов: system_log – лог событий сервисов приложения, user_log – лог событий в приложении.

По умолчанию логи событий сервисов приложения и событий в приложении сохраняются раздельно в файлы:

  • POLYMATICA_LOGSTASH_REPOSITORY_PATH/system_log.log – для логов событий сервисов;
  • POLYMATICA_LOGSTASH_REPOSITORY_PATH/user_log.log – для логов событий в приложении.

Сохранение логов в файлы управляется следующими параметрами.

  • tag – тип сохраняемых логов;
  • file_name_from_field – параметр принимает название поля записи события. Когда указан, записи событий сохраняются в файлы соответственно значениям указанного поля.
    Например, в логе user_log существует поле userLogin. Укажем это поле в значении параметра для user_log:

    {
      "name": "file",
      "tag": "user_log",
      "file_name_from_field": "userLogin",   
      "format": {
        "name": "ltsv"
      }
    }

    В результате такой конфигурации логи user_log станут сохраняться, вместо файла по умолчанию, раздельно в файлы userLogin.log, например, admin.log, user1.log и т. п..

  • path – параметр переопределяет POLYMATICA_LOGSTASH_REPOSITORY_PATH. Это может быть полезным для разделения сохраненных файлов.
    Например, настроим сохранение логов user_log в отдельные файлы и отдельную директорию, а также оставим запись user_log в файл по умолчанию:

    {
      "name": "file",
      "tag": "user_log",
      "format": {
        "name": "ltsv"
      }
    },
    {
      "path": "/usr/share/polymatica/platform/logstash/by_login",
      "name": "file",
      "tag": "user_log",
      "file_name_from_field": "userLogin",   
      "format": {
        "name": "ltsv"
      }
    }

    В результате такой конфигурации логи user_log станут сохраняться в файл по умолчанию и раздельно в файлы userLogin.log в директорию /usr/share/polymatica/platform/logstash/by_login.

  • "format":{"name":} – параметр определяет формат сохранения логов и принимает значения ltsv и json.
    Одна конфигурация сохранения в файл может использовать только один формат.
    Правильно:

    {
      "name": "file",
      "tag": "user_log",
      "format": {
        "name": "ltsv"
      }
    },
    {
      "path": "/usr/share/polymatica/platform/logstash/json",
      "name": "file",
      "tag": "user_log", 
      "format": {
        "name": "json"
      }
    }

    Правильно:

    {
      "name": "file",
      "tag": "user_log",
      "format": {
        "name": "ltsv"
      }
    },
    {
      "name": "file",
      "tag": "user_log",
      "file_name_from_field": "userLogin",   
      "format": {
        "name": "json"
      }
    }

    Неправильно, логи будут сохраняться некорректно:

    {
      "name": "file",
      "tag": "user_log",
      "format": {
        "name": "ltsv"
      }
    },
    {
      "name": "file",
      "tag": "user_log", 
      "format": {
        "name": "json"
      }
    }

    Неправильно, будет использовано только значение json:

    {
      "name": "file",
      "tag": "user_log", 
      "format": {
        "name": "ltsv",
        "name": "json"
      }
    }

Хранение и ротация файлов логов

Ротация сохраняемых файлов логов управляется следующими параметрами.

  • max_size – размер файла в мегабайтах. По достижении заданного размера создается новый файл. По умолчанию используется значение «100».
  • max_backups – максимальное количество сохраняемых при ротации предыдущих файлов. Когда значение параметра больше нуля, по достижении max_size создается файл {имя_файла}-{метка времени}.log. При превышении max_backups файл с самой ранней меткой удаляется. По умолчанию используется значение «3».
  • max_age –  время хранения сохраняемых при ротации предыдущих файлов в днях. Когда значение параметра больше нуля, и значение max_backups больше нуля, при превышении max_age меткой времени файла, файл удаляется. По умолчанию используется значение «28».
  • compress – архивация сохраняемых при ротации предыдущих файлов. По умолчанию используется значение true.

Пример записи в файле конфигурации:

{
	"name": "file",
	"tag": "user_log",
    "max_size": "100",
    "max_backups": "3",
    "max_age": "28",
    "compress": "true", 
    "format": {
		"name": "ltsv"
	}
}

Сохранение логов в базу данных

Сохранение логов событий в БД определяется в файле конфигурации, в массиве "outputs": [].

При установке используется конфигурация для сохранения логов в базу данных, используемую по умолчанию для работы приложения:

{
  "name": "postgresql",
  "tag": "user_log",
  "table": "logging",
  "columns": {
    "time": "create_date",
    "serviceName": "module_name",
    "name": "action",
    "remote": "remote",
    "userID": "user_id"
  },
  "associations": {
    "params": {
      "type": "one2many",
      "table": "logging_param",
      "foreign_column": "logging_id",
      "columns": {
        "Name": "name",
        "Value": "value"
      }
    }
  }
}

где name – вид СУБД (в настоящее время поддерживается только postgresql);

      tag – тип логов: system_log – лог событий сервисов приложения, user_log – лог событий в приложении;

      table – таблица для записи лога;

      columns – отображение (маппинг) полей записи события на колонки таблицы: название поля – название колонки;

      associations – отображение (маппинг) полей массива params[] на колонки дополнительной таблицы для записи деталей события:

    • type – тип связи между таблицами;
    • table – таблица для записи;
    • foreign_column – внешний ключ (колонка, по которой следует устанавливать связь);
    • columns – отображение (маппинг) полей записи события на колонки таблицы: название поля – название колонки.

Сохранение логов в базы данных управляется следующими параметрами.

  • nameвид СУБД (в настоящее время поддерживается только postgresql);
  • connection – параметры соединения, когда не задан, используется БД по умолчанию:
    • dsnописание соединения с источником данных;
    • max_opened_connections – максимальное количество параллельных соединений;
    • max_idle_connections – максимальное количество неактивных соединений;
  • tag – тип сохраняемых логов;
  • table – таблица для записи лога (таблица должна существовать в указанной БД);
  • columns – отображение (маппинг) полей записи события на колонки таблицы: название поля – название колонки (колонки должны существовать в указанной таблице);
  • associations – отображение (маппинг) полей массива params[] на колонки дополнительной таблицы для записи деталей события (только для user_log).

Для примера, настроим сохранение лога system_log во внешнюю базу данных:

{
  "name": "postgresql",
  "connection": {
    "dsn": "postgres://логин:пароль@адрес:порт/название_базы_данных"
  },
  "tag": "system_log",
  "table": "название_таблицы",
  "columns": {
    "time": "create_date",
    "serviceName": "module_name",
    "traceId": "trace_id",
    "logLevel": "log_level",
    "message": "message"
  }
}


Проверим, что лог записывается в базу данных.


Прямое подключение к БД из Polymatica


Отправка логов по HTTP и HTTPS

Настройка отправки логов

Вы можете настроить отправку логов с использованием POST-запросов. Запрос отправляется при каждой новой записи о событии. Отправка логов определяется в файле конфигурации, в массиве "outputs": [].

Чтобы настроить отправку логов по протоколу HTTP, добавьте в массив запись вида:

{
  "name": "http",
  "tag": "файл_логов",
  "host": "хост",
  "port": "порт",
  "uri": "метод",
  "format": {
    "name": "json"
  }
}

Для настройки отправки по протоколу HTTPS, добавьте в массив запись вида:

{
  "name": "http",
  "scheme": "https"
  "tag": "файл_логов",
  "host": "хост",
  "port": "порт",
  "uri": "метод",
  "format": {
    "name": "json"
  }
}

где  tag – тип логов: system_log – лог событий сервисов приложения, user_log – лог событий в приложении;

       host – IP-адрес или DNS-имя хоста сервиса;

       port – номер порта;

       uri – метод сервиса, который следует вызвать.

Пример записи:

"outputs": [
  {
    "name": "http",
    "tag": "user_log",
    "host": "192.168.10.201",
    "port": "9180",
    "uri": "/castlemock/mock/rest/project/JYdd1Z/application/vPIsVb/user_log",
    "format": {
      "name": "json"
    }
  },

Примеры сообщений

Пример сообщения из лога действий сервисов:

{
  "Datetime": "1696244685146",
  "instanceID": "21",
  "logLevel": "info",
  "message": " client request | Duration=718.758µs | Status=200 OK | RemoteAddr= | Method=PUT | URL=http://discovery:9610/api/v1/discovery/file-xlsx | ResponseBody= ",
  "serviceName": "file-xlsx",
  "serviceVersion": "\"1.3.0\\n\"",
  "tag": "system_log",
  "time": "2023-10-02T11:04:45.147694123Z",
  "traceId": "da9cd7d22c1ecb065d9532285e452645"
}

где Datetime – метка времени события в формате Unix;

      instanceID – уникальный идентификатор экземпляра Сервиса;

      logLevel – уровень логирования;

      message – текст события;

      serviceName – имя сервиса, однозначно определяющее его при поиске событий;

      serviceVersion – версия сервиса;

      tag – тип логов;

      time –  дата и время события  в формате ISO 8601;

      traceId – идентификатор, который позволяет отследить события в разных сервисах в рамках одного входящего запроса.

Пример сообщения из лога действий пользователей:

{
    "Datetime": 1696245020187,
    "instanceID": "25",
    "name": "ProjectCreate",
    "params": [
        {
            "Name": "id",
            "Value": "3"
        },
        {
            "Name": "name",
            "Value": "Проект"
        }
    ],
    "remote": "0.0.0.0:9602",
    "serviceName": "dashboard",
    "serviceVersion": "1.11.0\n",
    "tag": "user_log",
    "tags": [
        "Create",
        "Project"
    ],
    "time": "2023-10-02T11:10:20.188560062Z",
    "userID": 1,
    "userLogin": "admin"
}

где Datetime – метка времени события в формате Unix;

      instanceID – уникальный идентификатор экземпляра Сервиса;

      name – тип события;

      params – детали события;

      serviceName – имя сервиса, однозначно определяющее его при поиске событий;

      serviceVersion – версия сервиса;

      tag – тип логов;

      tags – ключевые метки события;

      time –  дата и время события  в формате ISO 8601;

      userID – уникальный идентификатор пользователя;

      userLogin – логин пользователя.

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


Вы можете скачать все хранящиеся в POLYMATICA_LOGSTASH_REPOSITORY_PATH файлы через интерфейс приложения, со страницы приложения /setting/logs. Для доступа к странице у вас должна быть роль суперпользователя или роль с доступом к логированию действий.

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


Кнопка «Скачать логи» на странице приложения «Логи» модуля «Менеджер»


Подробнее о странице «Логи» см. Руководство пользователя модуля Manager, страница «Руководство пользователя/Настройки/Логи».

  • Нет меток