Журналы аудита пользователей 
Важно
Функциональность доступна только для серверной версии ТестОпс, начиная с версии 4.23.0.
Если ваши политики безопасности требуют ведения журнала действий пользователей в системе, это можно сделать на стороне ТестОпс.
ТестОпс ведет учет следующих событий и действий пользователей:
- события, связанные с лицензией ТестОпс;
- управление учетными записями пользователей;
- действия пользователей, связанные с работой в проектах (создание, редактирование и удаление тест-кейсов и других сущностей).
Профили журналирования 
ТестОпс может вести журнал в формате JSON или как простой текст. Формат журнала определяется параметром SPRING_PROFILES_ACTIVE, который указан во всех конфигурациях ТестОпс.
В качестве значения параметра SPRING_PROFILES_ACTIVE нужно указать один или несколько профилей, разделенных запятыми.
Доступные профили:
| Профиль | Описание | 
|---|---|
| rabbit | Этот профиль указан по умолчанию для всех видов развертываний ТестОпс. Используется для выбора RabbitMQ в качестве основного брокера сообщений | 
| kubernetes | Этот профиль указан по умолчанию при развертывании ТестОпс с помощью Kubernetes. События будут выводиться в консоль (stdout) в формате JSON | 
| compose | Этот профиль указан по умолчанию при развертывании ТестОпс с помощью Docker Compose. События будут выводиться в консоль (stdout) в текстовом формате, элементы будут разделены пробелами | 
| package | Этот профиль указан по умолчанию при развертывании ТестОпс с помощью пакетных менеджеров Linux (DEB или RPM). События будут выводиться в консоль (stdout) в текстовом формате, элементы будут разделены пробелами | 
| logging-console-json | События будут выводиться в консоль (stdout) в формате JSON | 
| logging-file-json | События будут записываться в файл в формате JSON. Путь к файлу должен быть указан через переменную окружения LOG_FILE(описана ниже) | 
Уровень журналирования 
Для журнала аудита вы можете указать уровень журналирования, определяющий тип событий, которые будут в нем отражены. Уровень задается параметром LOGGING_LEVEL_ACCESSLOG:
- debug— в журнал будут записываться события с методами- POST,- DELETE,- PATCHи- PUT.- Эти методы используются для создания, изменения и удаления сущностей ТестОпс. 
- trace— журнал будут записываться события с методами- GET,- HEADи- OPTION.- В этом случае в журнале будут отражаться все действия пользователей. Это избыточный вариант журналирования. 
Запись журнала в файл 
Журнал может записываться в файл для последующей обработки сторонними приложениями (такими как Logstash).
Чтобы записывать события в файл, добавьте в конфигурацию параметр LOG_FILE, указав путь до файла, в который необходимо записывать журнал.
Полная конфигурация журналирования 
Приведенная ниже конфигурация будет выводить события с методами POST, DELETE, PATCH и PUT в формате JSON в stdout и в файл /var/log/testops/testops.log:
yaml
SPRING_PROFILES_ACTIVE: logging-console-json,logging-file-json
LOGGING_LEVEL_ACCESSLOG: debug
LOG_FILE: /var/log/testops/testops.logПоля записи журнала 
Каждая запись журнала содержит следующие поля:
- message— текст сообщения без обработки;
- logger_name— имя логгера. Для ведения журнала действий пользователей используется имя- accesslog;
- method— API-метод, вызываемый действием пользователя (например,- GET,- POST,- PUT);
- endpoint— эндпоинт;
- query— параметры запроса (например, ID проекта);
- status— статус ответа (- 2xx,- 3xx,- 4xx,- 5xx);
- user— имя пользователя;
- roles— роль пользователя;
- client— IP-адрес пользователя.
Пример записи журнала 
json
{
  "@timestamp": "2023-11-13T12:00:00.778Z",
  "@version": "1",
  "message": "status=200, method=GET, endpoint=/rs/testcasetree/leaf, query=projectId=4&treeId=8&sort=id%2Casc&size=100, client=192.168.100.4, user=admin, roles=[ROLE_ADMIN]",
  "logger_name": "accesslog",
  "thread_name": "http-nio-8081-exec-7",
  "level": "trace",
  "level_value": 5000,
  "endpoint": "/rs/testcasetree/leaf",
  "method": "GET",
  "query": "projectId=4&treeId=8&sort=id%2Casc&size=100",
  "roles": "ROLE_ADMIN",
  "client": "192.168.1.4",
  "user": "admin",
  "status": "200"
}
