SecurityFlow Кабинет лицензий , откроется в новой вкладке

Документация / Руководство по установке / Эксплуатация

Мониторинг и журналы

Обновлено 20 октября 2026

Компоненты SecurityFlow пишут журналы в stdout и stderr контейнеров. Состояние проверяется HTTP-эндпоинтами, счётчиками воркеров и длиной очередей RabbitMQ. Метрик в формате Prometheus компоненты не отдают: для графиков используйте метрики Kubernetes и брокеров.

Проверки здоровья

Компонент Запрос Доступ Ответ Что проверяет
Core: интерфейс и API GET /healthcheck/ на порту 8000 без авторизации и проверки лицензии 200, пустое тело процесс отвечает. Через фронт не проксируется
Core через фронт GET /admin/login/ без авторизации 200 фронт и процесс интерфейса и API
Core → Radar GET /api/v1/ci/health-check/ Authorization: Token <API-токен> пользователя Core; лицензия, которая открывает Radar {"is_healthy": true, "is_authenticated": true} Core достаёт до Radar, токен Radar верный
Core: задачи Celery GET /api/v1/celery/tasks/active/ право на глобальные настройки список задач: name, id, progress, time что сейчас выполняют воркеры Core
Radar GET /api/v1/health-check/ без авторизации {"is_healthy": true} Radar back отвечает
Radar: токен GET /api/v1/auth-health-check/ Authorization: Bearer <токен Radar> {"is_healthy": true} токен верный. Этот же запрос делает воркер перед каждым пайплайном
Radar: воркеры GET /api/v1/workers/total/, GET /api/v1/workers/active/ Bearer счётчики воркеров и потоков сколько воркеров подключено и сколько занято
Radar: пайплайны GET /api/v1/pipelines/stats/ Bearer число пайплайнов по статусам очередь и зависшие пайплайны

Пример ответа GET /api/v1/workers/total/:

{
  "pipeline_workers_total": 8,
  "pipeline_threads_total": 24,
  "utils_workers_total": 8,
  "utils_threads_total": 16
}

pipeline_workers_total - подключённые пайплайн-воркеры, по одному на под. pipeline_threads_total - их текущие процессы: пайплайн-воркер запускается с --autoscale 1,MAX_SCALEWORKERS_COUNT, поэтому в простое процессов меньше, чем слотов. GET /api/v1/workers/active/ возвращает pipeline_workers_active, pipeline_threads_active, utils_workers_active, utils_threads_active - сколько из них сейчас заняты.

Проверка токена изнутри пода воркера:

kubectl -n securityflow-radar exec <под воркера> -c <пайплайн-воркер> -- python3 -c \
  "import os,requests;print(requests.get(os.environ.get('AUDITOR_HOST','http://auditor:8090')+'/api/v1/auth-health-check/',headers={'Authorization':'Bearer '+os.environ['ACCESS_TOKEN']},timeout=10).status_code)"

Ожидаемый результат: 200.

Пробы Kubernetes

Пробы компонентов в Kubernetes:

Компонент Проба Примечание
Интерфейс и API Core HTTP GET /healthcheck/, порт 8000 если ALLOWED_HOSTS ограничен, проба должна передавать разрешённый заголовок Host
Приём отчётов Core TCP, порт 8001 у процесса один эндпоинт - POST /api/v1/scan/import/
Фронт Core, фронт Radar HTTP GET /, порты 80 и 8080
Radar back HTTP GET /api/v1/health-check/, порт 8090
Процессы Celery: worker и планировщик Core, разбор отчётов, помощники, воркеры Radar HTTP-проверки нет следите за перезапусками подов, счётчиками воркеров и очередями

Воркер Radar, запущенный общим скриптом entrypoint.sh, завершается с кодом 1, если остановился любой из его процессов: dockerd или один из процессов Celery. Kubernetes перезапускает контейнер.

Состояние очередей

Длина очередей показывает, справляются ли воркеры.

kubectl -n securityflow-core exec <под RabbitMQ Core> -- rabbitmqctl list_queues name messages consumers
kubectl -n securityflow-radar exec <под RabbitMQ Radar> -- rabbitmqctl list_queues name messages consumers
Очередь Брокер Кто разбирает Что значит рост
appsecpanel_worker Core worker Core не хватает реплик worker или он остановлен
importer_service Core разбор отчётов не хватает слотов разбора - см. Расчёт ресурсов
db_helper_* Core помощник БД помощник БД перегружен или остановлен
jira_helper_service Core Jira-помощник Jira недоступна или отвечает медленно
pipeline_queue Radar пайплайн-воркеры не хватает слотов сканирования
utils_queue Radar utils-воркеры utils-воркеры остановлены

Очередь с сообщениями и consumers 0 - процесс, который её разбирает, не работает.

В интерфейсе:

  • Core: "Глобальные настройки" → "Активные задачи" - задачи Celery, которые выполняются сейчас.
  • Radar: "Настройки" → "Воркеры"; на странице "Пайплайны" - "Активные Воркеры:" и "Активные Потоки:".

Журналы

Журналы контейнеров читайте через kubectl logs. При перезапуске пода журнал теряется - для хранения подключите сборщик журналов кластера.

kubectl -n securityflow-core logs deployment/<компонент> --since=1h
kubectl -n securityflow-radar logs <под воркера> -c <контейнер> --since=1h
Компонент Что в журнале На что смотреть
Job подготовки базы Core миграции, создание администратора, имена сканеров строки [admin] и [scanners]. Если пароль администратора сгенерирован, он есть в этом журнале - ограничьте доступ к нему
Интерфейс и API Core gunicorn, ошибки запросов ошибки проверки лицензии: Signature verification failed., License has expired., Unable to decode the license.
Worker Core задачи Celery ошибки обращения к Radar при запуске аудита, сверка лицензии
Фронт Core доступ nginx: $remote_addr "$request" $status $body_bytes_sent rt=... urt=... rt - полное время ответа, urt - время бэкенда: видно, что тормозит
Radar back uvicorn, корневой журнал на уровне DEBUG Running Alembic migrations..., Starting Uvicorn server..., ACCESS_TOKEN is not set. Skipping periodic curl.
Пайплайн-воркер loguru Worker start pipeline with uuid: ..., Aborting the pipeline ..., Pipeline have been finished
Utils-воркер loguru Cleaner will delete N old volumes out of M total. - ежедневная очистка

Ошибки запуска сканов из Core

Если Core не смог передать задание в Radar, он пишет ошибку в журнал worker, а аудит в интерфейсе остаётся без находок. Если аудит пустой, проверьте журнал worker Core и список пайплайнов в Radar.

Фоновые проверки Radar back

Проверку таймаутов и сбор статистики Radar back запускает при старте, только если задан ACCESS_TOKEN. Если токен в переменной не принят Radar, эти циклы останавливаются, а API продолжает работать. Признак - пайплайны не закрываются по таймауту. Исправьте ACCESS_TOKEN и перезапустите Radar back.

Сверка лицензии

Worker Core пишет результат сверки с сервером лицензий:

Сообщение Что значит
Лицензия: сервер недоступен (...), решение не меняем нет связи с сервером лицензий, лицензия действует
Лицензия: сервер ответил <код>, вердикта нет, решение не меняем ответ без вердикта, например 403 белого списка или 5xx; лицензия действует
Лицензия: ответ сервера не JSON, решение не меняем неожиданный ответ, лицензия действует
Лицензия снята: <причина> сервер ответил, что лицензия недействительна: отозвана, истекла или не найдена. Core покажет экран активации

Подробнее - Лицензирование.

Журналы джоб Radar

  • Пока джоба идёт, её лог копится в Redis. После завершения лог переносится в базу Radar.
  • В интерфейсе: "Пайплайны" → "Логи". Поиск пайплайнов по тексту логов - поле "Поиск пайплайнов по логам джоб..".
  • API: GET /api/v1/jobs-instances/<id>/logs/.
  • В начале лога печатаются видимые переменные джобы. Значения скрытых переменных заменяются на ***MASKED***.
  • Логи удаляются вместе с пайплайном - по умолчанию через сутки. Срок задаётся в настройке очистки, см. Очистка Radar.

Фоновые задачи

Компонент Задача Расписание Что делает
Планировщик Core сверка лицензии раз в LICENSE_CHECK_INTERVAL_SECONDS, по умолчанию 300 с; дополнительно от запросов пользователей, не чаще раза в 60 с на процесс спрашивает сервер лицензий, действует ли лицензия
Планировщик Core пересчёт метрик по расписанию кэша метрик, если он включён пересчитывает метрики продуктов и ассетов
Планировщик Core расписания аудитов по расписаниям в "Radar" → "Расписание" запускает аудиты
Планировщик Core расписания уведомлений по расписаниям уведомлений отправляет уведомления по сохранённому фильтру
Планировщик Core сканирование реестров по расписанию интеграции с реестром ищет новые теги образов и запускает их сканирование
Планировщик Core celery.backend_cleanup штатное расписание Celery очищает результаты задач Celery
Помощник БД автовалидатор, дедупликатор, расчёт CVSS постоянный цикл с паузой из настроек, не меньше 40 с применяют правила к находкам
Radar back проверка таймаутов раз в 10 с, если задан ACCESS_TOKEN закрывает джобы и пайплайны по таймауту
Radar back статистика раз в час, если задан ACCESS_TOKEN минимум, максимум и среднее время джоб за 24 часа; из него считается "Ожидаемое" время
Планировщик Radar очистка ежедневно в 00:00 UTC по расписанию Celery удаляет старые тома Docker и пайплайны - см. Очистка Radar

Порядок полей в расписаниях Core

Выражение расписания в API Core (crontab_expr) - 5 полей в порядке минута час день_недели день_месяца месяц. В обычном cron третье поле - день месяца. Например, 0 3 1 * * в Core - каждый понедельник в 03:00, время по UTC.

Метрики

Компоненты SecurityFlow не отдают метрики Prometheus. Для мониторинга используйте:

  • эндпоинты из раздела Проверки здоровья - как внешние HTTP-проверки;
  • счётчики GET /api/v1/workers/total/ и GET /api/v1/workers/active/ - загрузка слотов сканирования;
  • длину очередей RabbitMQ;
  • метрики Kubernetes: перезапуски подов, CPU и память против limit, заполнение дисков узлов scan;
  • статистику длительности джоб Radar: GET /api/v1/statistics/ и GET /api/v1/statistics/all/?size=10 с токеном Radar.