Перейти к содержанию

Раздел 4. Проблемы и их решение

Раздел описывает порядок первичной диагностики и типовые способы устранения сбоев в промышленном контуре BOX5-DIT-MGSN. Действия выполняются от наименее вмешивающихся проверок к перезапускам и восстановлению. До изменения конфигурации, очистки данных или перезапуска домена администратор фиксирует исходное состояние и сохраняет диагностически важные логи.

Не публикуются в тикетах и общих каналах: полные .env-файлы, пароли, токены, JWT, дампы БД, лицензионные файлы, приватные URL, фрагменты логов с чувствительной информацией и персональные данные пользователей.

4.1. Типовые проблемы и способы их устранения

Первичная диагностика выполняется с узла поставки:

cd ~/CODE/box3

date -Is
compose.sh status all
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}'
curl -fsS http://localhost/api/base/ping/
df -h / /data
nvidia-smi

Если ошибка локализована в одном домене, штатное действие восстановления - перезапуск домена через compose.sh restart <domain>. Перезапуск одиночного контейнера используется только после проверки compose-проекта, .env, сети, зависимостей и имени сервиса.

Проблема Признаки Проверка Действие администратора
Web-интерфейс недоступен Браузер не открывает /login, curl к внешнему URL возвращает ошибку или пустой ответ. compose.sh status ui-rest, docker logs ui-rest-ui-nginx-1 --tail 100, curl -fsS http://localhost/api/base/ping/. Проверить ui-nginx, ui-react, ui-rest-to-gprc, свободное место и nginx-конфигурацию; перезапустить ui-rest; при изменении config.json выполнить жёсткое обновление страницы в браузере.
API-шлюз не отвечает UI загружается частично, но API-запросы падают, GET /api/base/ping/ не возвращает pong. Логи ui-rest-to-gprc, состояние downstream-сервисов, Kafka/ClickHouse/MinIO-соединения gateway. Проверить зависимости gateway и переменные JWT_*, CUSTOM_DOMAINS, KAFKA_*; перезапустить ui-rest; при повторении эскалировать как отказ API-шлюза.
Пользователь не входит в систему Ошибка входа через Keycloak, отсутствует локальная сессия, auth/me возвращает ошибку. GET /config.json, логи st-auth и ui-rest-to-gprc, состояние внешнего Keycloak/OIDC. Проверить доступность внешнего контура авторизации, настройки redirect/OIDC и st-auth; не менять роли и JWT-параметры без согласования.
Пользователь вошёл, но не видит камеры или события UI пустой для пользователя, хотя камеры и события есть у администратора. auth/me, access/privileges/{user_id}, группы доступа, роль пользователя, площадки в Keycloak. Проверить роль, объектные права и группы доступа; при массовом изменении прав выполнить штатную пересборку кэша st-access.
Роль или пункт меню отображаются некорректно Пользователь видит лишние или недоступные страницы, вкладки или действия. UI Ролевая модель, /api/statistics/auth/roles-v2/, ADMIN_ROLE_ID_LIST в runtime-конфигурации UI. Сверить роль в st-auth, права в роли, UI feature flags и конфигурацию Keycloak; после изменения проверить вход новой сессией.
Камера отсутствует в мониторинге Камера есть в справочнике, но не отображается или не запускается в inference. st-camera-storage, inf-load-balancer/info2, monitoring/light, Kafka topics camera_*. Проверить, что камера включена, не отключён inference, назначен сценарий и объектные права; при необходимости обновить камеру и проверить доставку в load-balancer.
Live-видео, preview или HLS не показываются Карточка камеры открывается без видео, HLS playlist отдаёт 404, preview не обновляется. Логи inf-load-balancer, inf-mediaserver, monitoring/light, GET /api/inference/load-balancer/info2/, df -h, состояние /dev/shm. Проверить доступность RTSP/видеофайла, медиасервер, балансировку, свободное место и IPC/tmpfs; перезапустить домен inference; попросить пользователя выполнить Ctrl+F5, если после обновлений остаётся browser cache.
Камера находится в отказе мониторинга В UI камера помечена как недоступная, monitoring возвращает дефект или отсутствие heartbeat. POST /api/inference/monitoring/light, логи inf-monitoring, inf-mediaserver, inf-load-balancer. Проверить источник видео, сетевую доступность камеры, назначение на медиасервер и heartbeat; после восстановления потока дождаться обновления monitoring.
Новые события не появляются Видео идёт, но нарушения не создаются. Логи inf-nri-inference, KAFKA_TOPIC_INFERENCE_SEND_EVENT, st-event-storage, svr-models-registry, активный сценарий камеры. Проверить активный сценарий, наличие модели и producing-блока NRI, Kafka, EventSender и st-event-storage; при сбое runtime перезапустить inference.
Событие есть, но нет изображения, видео или отчёта Карточка события открывается без медиа, ссылка /api/s3/* не читается, отчёт не скачивается. ds-minio, ds-data-temporary-storage, логи st-event-storage, st-report-pdf-xlsx-generator, /api/s3/. Проверить MinIO, DTS/Redis, bucket/prefix, свободное место и связность БД с объектом; не удалять MinIO и БД отдельно друг от друга.
Отчёт PDF/XLSX не формируется Запрос отчёта зависает или возвращает ошибку. Логи st-report-pdf-xlsx-generator, st-report-email, st-event-storage, состояние PostgreSQL/MinIO. Проверить доступность событий, файлового каталога отчётов, MinIO и свободного места; перезапустить затронутый statistics-сервис или домен statistics.
Audit-журнал пустой или не обновляется Действия пользователя не появляются в журнале. GET /api/statistics/audit/services/, GET /api/statistics/audit/logs/, логи st-audit, Kafka topic add_audit_record. Проверить st-audit, ui-rest-to-gprc, Kafka и PostgreSQL st-audit; после восстановления выполнить контрольное действие в UI.
Kafka недоступна или растёт lag Несколько сервисов одновременно теряют события, команды или heartbeat. Логи inf-kafka, docker ps, kafka-consumer-groups, дисковое место каталога Kafka. Проверить брокер, tmpfs/диск, сетевую доступность inf-kafka:9092; перезапустить kafka-domain только после оценки влияния на consumers.
PostgreSQL-сервис не стартует Приложение падает на миграциях или подключении к БД, контейнер *-postgres перезапускается. docker logs <postgres_container> --tail 100, df -h, соответствие версии кода и БД. Не удалять PGDATA; проверить место, права, WAL/миграции и версию поставки; при повреждении выполнить восстановление по разделу 3.
ClickHouse-запросы или витрины не работают События открываются медленно, статистика и графики возвращают ошибку. Логи ClickHouse и st-event-statistic, состояние USE_CLICKHOUSE, свободное место. Проверить ClickHouse-контейнеры, таблицы и backfill; при повреждении восстанавливать вместе с PostgreSQL/MinIO одного backup_id.
MinIO или DTS недоступны Ошибки S3, временные UUID не читаются, медиа не сохраняются. ds-minio health endpoints, ds-data-temporary-storage /metrics, Redis PING, df -h /data. Восстановить data-storage; проверить MINIO_*, DATA_LIFE_TIME, Redis и свободное место; временные UUID после истечения TTL не восстанавливаются.
Недостаточно места на диске Контейнеры падают, Kafka/ClickHouse/PostgreSQL/MinIO пишут ошибки записи. df -h / /data, du -xh --max-depth=2 /data | sort -h | tail, docker system df. Зафиксировать источник роста; очищать только согласованные логи, старые backup или временные HLS/IPC-файлы; не запускать docker system prune на PROD без оценки образов.
GPU или NVIDIA runtime недоступны nvidia-smi не видит GPU, inference не стартует или модели не загружаются на GPU. nvidia-smi, /etc/docker/daemon.json, логи inf-nri-inference, inf-mediaserver, docker info. Проверить драйвер, NVIDIA Container Toolkit, runtime Docker и права на GPU; после исправления перезапустить inference.
Модели отсутствуют или не загружаются API-группа models-storage не возвращает нужную модель, NRI пишет ошибки загрузки/конвертации. GET /api/inference/models-storage/, каталоги /models, /converted, MODEL_REGISTRIES_PRIORITY, VLFLOW_*, MLFLOW_*. Проверить svr-models-registry, права каталогов и конвертеры YOLO/MMLab; при необходимости восстановить модели из backup и перезапустить inference.
Лицензия Guardant не подтверждается Балансировщик ограничивает камеры, сервис лицензии пишет ошибки активации. Логи inf-guardant-control-center, наличие ${COMPOSE_DATA}/guardant, порт 19191, LICENSE_KEY_SERIAL. Восстановить каталог Guardant из backup; при необходимости выполнить оффлайн-активацию по И2; не очищать license runtime без копии.
Ошибка передачи статуса в ПК-КОТ в PROD Событие подтверждено, но внешний статус не доставлен. Логи svr-severstal-integration, параметры PK_KOT_*, очередь повторных отправок, ответ внешнего endpoint. Проверить доступность ПК-КОТ, параметры интеграции, retry-очередь и формат события; эскалировать, если внешний endpoint недоступен или отклоняет payload.
Нет данных АСУ ТП Сценарии, завязанные на технологические сигналы, не получают _meta или _data. svr-asutp, svr-asutp-kafka, Schema Registry, Redis, логи ASUTP collector. Проверить подключение к dedicated Kafka АСУ ТП, схемы, consumer и публикацию в основной контур; после восстановления сверить сценарий.
Песочница Node-RED недоступна Iframe /sandbox/ не открывается, сессии не создаются, конвертация в sandbox не запускается. cd ~/CODE/node-red-sandbox && docker compose ps, логи nr-sbx-*, services/frontend/config.json, NGINX_HOST_PORT. Проверить sandbox .env, volumes, Redis/Celery/Node-RED, published port; перезапустить sandbox compose. Отказ sandbox не должен останавливать промышленную обработку видеопотоков.
Резервная копия не создаётся или не проходит проверку Нет свежего latest.psql.gz, gzip -t завершается ошибкой. Контейнеры st-auth-postgres-backup, st-access-postgres-backup, /backup, cron-логи. Не начинать обновление PROD; выполнить ручной backup, проверить место, права и gzip; при ошибке использовать предыдущую пригодную копию и оформить инцидент.
Восстановление не возвращает работоспособность Контейнеры стартуют, но UI/API/события/медиа не работают. Контроль успешности восстановления из раздела 3. Проверить, что восстановлены связанные PostgreSQL, ClickHouse, MinIO, файловые каталоги и конфигурация одного backup_id; при расхождении остановить работы и эскалировать.

4.2. Порядок локализации сбоя

  1. Зафиксировать время, окружение, пользователя или сервис, симптом и затронутый бизнес-процесс.
  2. Проверить внешний признак: UI, /api/base/ping/, доступность камеры, отчёта, события или интеграции.
  3. Проверить состояние домена через compose.sh status <domain> и docker ps.
  4. Проверить свободное место, GPU, Kafka и состояние хранилищ, если сбой затрагивает несколько сервисов.
  5. Посмотреть последние логи проблемного контейнера. Логи сохраняются до перезапуска, если это не увеличивает ущерб.
  6. Определить, является ли сбой прикладным, инфраструктурным, интеграционным или связанным с данными.
  7. Выполнить минимальное действие восстановления: исправить конфигурацию, восстановить зависимость, перезапустить домен, выполнить ручную синхронизацию или запустить восстановление по разделу 3.
  8. После восстановления выполнить smoke-проверку UI/API/inference и записать результат в журнал эксплуатации.

Минимальный набор логов для анализа:

docker logs <container> --since 30m --tail 300
docker inspect <container> \
  --format '{{index .Config.Labels "com.docker.compose.project.working_dir"}}'
docker inspect <container> \
  --format '{{range .Mounts}}{{.Source}} -> {{.Destination}}{{println}}{{end}}'

Если на одном сервере есть несколько каталогов /data/compose-data*, путь к логам и данным определяется фактическими mount-ами контейнера и переменными домена, а не названием похожего каталога на диске.

4.3. Действия, требующие отдельного согласования

Следующие действия не выполняются как рядовое устранение проблемы:

  • удаление или пересоздание PGDATA, ClickHouse, MinIO, Kafka и каталогов моделей;
  • docker system prune или массовое удаление Docker volumes на PROD;
  • очистка /dev/shm, IPC и HLS-каталогов без понимания текущих consumers;
  • изменение .env, domains.conf, config.json, settings.json, интеграционных URL, JWT и license-параметров без фиксации исходного состояния;
  • восстановление БД, ClickHouse или MinIO из разных backup_id;
  • перенос результатов TEST в PROD без утверждённого плана;
  • отключение доменов или изменение DISABLED_DOMAINS без проверки влияния на UI, роли, nginx-маршруты и зависимости.

4.4. Эскалация

Сбой эскалируется ответственному DevOps/VizorLabs или владельцу интеграции, если:

  • отказ затрагивает PROD и не локализован за один рабочий цикл диагностики;
  • потеряны или повреждены данные PostgreSQL, ClickHouse, MinIO или модели;
  • последняя пригодная резервная копия отсутствует или восстановление не возвращает систему в рабочее состояние;
  • не подтверждается Guardant-лицензия или недоступна штатная процедура оффлайн-активации;
  • ПК-КОТ, CSVN/VMS, АСУ ТП или Keycloak недоступны со стороны внешнего контура;
  • после перезапуска домена повторяется один и тот же сбой модели, сценария, Kafka-потребителя или migration;
  • проблема требует изменения кода, Docker-образа, схемы БД или ветки поставки.

В обращении указываются:

  • окружение и время возникновения;
  • затронутый домен и контейнеры;
  • выполненные команды и результат;
  • вывод compose.sh status all, docker ps, df -h, nvidia-smi;
  • короткие отредактированные фрагменты логов;
  • версия поставки или Docker-образов;
  • наличие актуального backup и границы возможной потери данных.

Чувствительные значения передаются только по утверждённому закрытому каналу и не включаются в открытую документацию, комментарии задач и общие чаты.