Перейти к основному содержимому

Логи

Semaphore пишет серверные логи в stdout, а логи задач и активности хранит в базе данных, централизуя ключевую информацию и избавляя от необходимости отдельно резервировать лог-файлы. Единственные данные, хранящиеся в файловой системе, — это кэш.


Серверный лог

Semaphore не пишет логи в файлы. Вместо этого все логи приложения выводятся в stdout.
Если Semaphore запущен как сервис systemd, просмотреть логи можно следующей командой:

journalctl -u semaphore.service -f

Если Semaphore запущен в контейнере Docker, просмотреть логи можно следующей командой:

docker logs -f my-semaphore-container

Это позволяет просматривать логи в реальном времени (потоково).


Лог активности

Лог активности фиксирует все действия пользователей в Semaphore, включая:

  • Добавление или удаление ресурсов (например, шаблонов, инвентарей, репозиториев).
  • Добавление или удаление участников команды.
  • Запуск или остановку задач.

Pro-версия 2.10 и новее

Semaphore Pro 2.10+ поддерживает запись лога активности и лога задач в файл. Чтобы включить эту возможность, добавьте следующую конфигурацию в ваш config.json:

{
"log": {
"events": {
"enabled": true,
"logger": {
"filename": "./events.log"
// other logger options
}
},
"tasks": {
"enabled": true,
"logger": {
"filename": "./tasks.log"
// other logger options
},
"result_logger": {
"filename": "./task_results.log"
// other logger options
}
}
}
}

Или сделайте это с помощью следующих переменных окружения:

export SEMAPHORE_EVENT_LOG_ENABLED=True
export SEMAPHORE_EVENT_LOG_LOGGER={"filename": "./events.log"}

export SEMAPHORE_TASK_LOG_ENABLED=True
export SEMAPHORE_EVENT_LOG_LOGGER={"filename": "./tasks.log"}

Параметры логирования активности (событий)

Параметры логирования активности (событий) позволяют настроить, как Semaphore записывает действия пользователей и системные события в файл. Эти настройки управляют поведением логирования событий: включено ли оно, в каком формате записываются записи и какие параметры используются логгером. Когда логирование включено, все действия пользователей (создание шаблонов, управление командами, запуск задач и т. д.) записываются в указанный лог-файл в соответствии с этими настройками.

ПараметрПеременные окруженияОписание
enabledSEMAPHORE_EVENT_LOG_ENABLEDВключить логирование событий в файл.
formatSEMAPHORE_EVENT_LOG_FORMATФормат записи лога. Может быть raw или json.
loggerSEMAPHORE_EVENT_LOG_LOGGERПараметры логгера.

Параметры логирования задач

Параметры логирования задач позволяют настроить, как Semaphore записывает сведения о выполнении задач в файл. Эти настройки управляют логированием событий, связанных с задачами: их запуск, завершение и статус выполнения. Когда логирование включено, все операции с задачами и их результаты записываются в указанный лог-файл в соответствии с этими настройками, обеспечивая подробный аудит истории выполнения задач.

ПараметрПеременные окруженияОписание
enabledSEMAPHORE_TASK_LOG_ENABLEDВключить логирование задач в файл.
formatSEMAPHORE_TASK_LOG_FORMATФормат записи лога. Может быть raw или json.
loggerSEMAPHORE_TASK_LOG_LOGGERПараметры логгера.
result_loggerSEMAPHORE_TASK_RESULT_LOGGERПараметры логгера.

Параметры логгера

ПараметрТипОписание
filenameStringПуть и имя файла, в который записываются логи. Резервные копии лог-файлов сохраняются в том же каталоге. Если значение пустое, используется processname-lumberjack.log во временном каталоге.
maxsizeIntegerМаксимальный размер лог-файла в мегабайтах, после которого выполняется ротация. По умолчанию — 100 мегабайт.
maxageIntegerМаксимальное количество дней хранения старых лог-файлов на основе метки времени в их имени. Обратите внимание: день определяется как 24 часа и может не совпадать с календарными днями из-за перехода на летнее время, високосных секунд и т. п. По умолчанию старые лог-файлы не удаляются по возрасту.
maxbackupsIntegerМаксимальное количество хранимых старых лог-файлов. По умолчанию сохраняются все старые лог-файлы (хотя MaxAge всё равно может привести к их удалению).
localtimeBooleanОпределяет, используется ли локальное время компьютера для форматирования меток времени в резервных файлах. По умолчанию используется UTC.
compressBooleanОпределяет, нужно ли сжимать ротированные лог-файлы с помощью gzip. По умолчанию сжатие не выполняется.

Каждая строка в файле имеет следующий формат:

2024-01-03 12:00:34 user=234234 object=template action=delete

История задач

Semaphore хранит информацию о выполнении задач в базе данных. История задач предоставляет подробное представление всех выполненных задач, включая их статус и логи. Вы можете отслеживать задачи в реальном времени или просматривать исторические логи через веб-интерфейс.

Настройка хранения задач

По умолчанию Semaphore хранит все задачи в базе данных. Если вы запускаете большое количество задач, они могут занимать значительный объём дискового пространства.

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

  1. Переменная окружения
    SEMAPHORE_MAX_TASKS_PER_TEMPLATE=30
  2. Параметр в config.json
    {
    "max_tasks_per_template": 30
    }

Когда количество задач превышает этот лимит, самые старые логи задач автоматически удаляются.


Поддержка протокола syslog

Semaphore может пересылать записи лога активности и лога задач во внешний коллектор syslog для долгосрочного хранения или централизованного мониторинга. По умолчанию пересылка в syslog отключена.

Настройте поддержку syslog в config.json:

"syslog": {
"enabled": true,
"network": "udp",
"address": "logs.example.com:514",
"tag": "semaphore"
}

Те же параметры доступны через переменные окружения, если вы предпочитаете не редактировать JSON-файл:

SEMAPHORE_SYSLOG_ENABLED=true
SEMAPHORE_SYSLOG_NETWORK=udp
SEMAPHORE_SYSLOG_ADDRESS=logs.example.com:514
SEMAPHORE_SYSLOG_TAG=semaphore

Параметры syslog

ПараметрПеременные окруженияОписание
enabledSEMAPHORE_SYSLOG_ENABLEDВключить или выключить пересылку в syslog.
networkSEMAPHORE_SYSLOG_NETWORKПротокол для подключения к коллектору, например udp или tcp.
addressSEMAPHORE_SYSLOG_ADDRESSАдрес коллектора в формате host:port.
tagSEMAPHORE_SYSLOG_TAGНеобязательный идентификатор, добавляемый в начало каждого сообщения.

После изменения этих значений перезапустите сервис Semaphore, чтобы применилось новое назначение syslog.


Интеграция с SIEM

Semaphore 2.20+ ведёт журнал аудита безопасности, пригодный для пересылки в SIEM (Splunk, Elastic Security, QRadar, Wazuh и т. д.).

Каждое событие аудита содержит действие (create, update, delete, login_success, login_fail, logout), IP-адрес клиента и user agent, а также пользователя, выполнившего действие, и затронутый объект. Помимо изменений ресурсов, Semaphore логирует:

  • Успешные входы (по паролю, через LDAP и OpenID), выходы, неудачные попытки входа и неудачные проверки MFA.
  • Создание, изменение, удаление учётных записей пользователей и смену паролей.
  • Создание и удаление API-токенов (логируется только короткий префикс токена, никогда — сам секрет).

Есть три способа доставки событий аудита в вашу SIEM:

  1. Pull: читайте /api/events (см. документацию API).
  2. Файловый коллектор: включите запись лога активности в файл (Pro, см. выше) и отправляйте events.log (рекомендуется формат JSON) с помощью Filebeat, Fluentd или Splunk Universal Forwarder.
  3. Webhook аудита (Pro): отправляйте события в реальном времени по HTTPS — на универсальный JSON-эндпоинт или в Splunk HTTP Event Collector.

Webhook аудита

{
"log": {
"audit_webhook": {
"enabled": true,
"url": "https://splunk.example.com:8088/services/collector/event",
"format": "splunk_hec",
"headers": {
"Authorization": "Splunk <your-hec-token>"
}
}
}
}

Или с помощью переменных окружения:

SEMAPHORE_AUDIT_WEBHOOK_ENABLED=true
SEMAPHORE_AUDIT_WEBHOOK_URL=https://splunk.example.com:8088/services/collector/event
SEMAPHORE_AUDIT_WEBHOOK_FORMAT=splunk_hec

Параметры webhook аудита

ПараметрПеременные окруженияОписание
enabledSEMAPHORE_AUDIT_WEBHOOK_ENABLEDВключить или выключить пересылку событий аудита.
urlSEMAPHORE_AUDIT_WEBHOOK_URLПолный URL эндпоинта-получателя.
formatSEMAPHORE_AUDIT_WEBHOOK_FORMATФормат полезной нагрузки: пусто для обычного JSON или splunk_hec для обёртки Splunk HEC.
headersSEMAPHORE_AUDIT_WEBHOOK_HEADERSДополнительные HTTP-заголовки, например токен HEC: {"Authorization": "Splunk <token>"}.

Доставка асинхронная: события ставятся в очередь в памяти и повторно отправляются до трёх раз с нарастающей задержкой, поэтому недоступный получатель никогда не замедляет и не ломает пользовательские запросы. Если получатель остаётся недоступным, события из очереди отбрасываются с предупреждением в серверном логе.

Итоги

  • Серверный лог: пишется в stdout; при работе под systemd доступен через journalctl.
  • Лог активности и задач: отслеживает все действия пользователей. Опционально Pro 2.10+ может записывать их в файл.
  • История задач: хранит логи выполнения задач в реальном времени и исторические. Срок хранения настраивается для каждого шаблона.

Следование этим рекомендациям обеспечивает надлежащую прозрачность работы Semaphore UI при контроле использования хранилища и срока хранения логов.