Раздел 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. Порядок локализации сбоя¶
- Зафиксировать время, окружение, пользователя или сервис, симптом и затронутый бизнес-процесс.
- Проверить внешний признак: UI,
/api/base/ping/, доступность камеры, отчёта, события или интеграции. - Проверить состояние домена через
compose.sh status <domain>иdocker ps. - Проверить свободное место, GPU, Kafka и состояние хранилищ, если сбой затрагивает несколько сервисов.
- Посмотреть последние логи проблемного контейнера. Логи сохраняются до перезапуска, если это не увеличивает ущерб.
- Определить, является ли сбой прикладным, инфраструктурным, интеграционным или связанным с данными.
- Выполнить минимальное действие восстановления: исправить конфигурацию, восстановить зависимость, перезапустить домен, выполнить ручную синхронизацию или запустить восстановление по разделу 3.
- После восстановления выполнить 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 и границы возможной потери данных.
Чувствительные значения передаются только по утверждённому закрытому каналу и не включаются в открытую документацию, комментарии задач и общие чаты.