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

Runbook - типовые инциденты

⚠ VPN-туннель упал

Симптомы: - В Telegram-боте /health показывает Tradex Replica: ❌ - В Metabase запросы к Tradex Replica падают - Дашборды показывают пустые значения

Диагностика:

ssh root@$SERVER_IP
systemctl status openvpn-client@tradex
ip a show tun0           # должен быть IP 195.x.x.x или подобный
ping 172.16.130.36       # должно пинговаться

Решение:

systemctl restart openvpn-client@tradex
sleep 5
ping -c 3 172.16.130.36

Если не помогает - проверить срок VPN-сертификата:

openvpn --config /etc/openvpn/client/tradex.conf --verb 4 --tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
# Лог покажет "TLS Error: TLS handshake failed" если сертификат истёк

→ Запрос CTO на обновление профиля.

⚠ Metabase не отвечает

Симптомы: - http://$SERVER_IP/ показывает 502 Bad Gateway - /healthz отвечает ok, /api/health - timeout

Диагностика:

docker compose -f /srv/tradex-analytics/docker-compose.yml ps
docker compose logs --tail=200 metabase

Часто причина - OOM (out of memory). Java heap = 2 GB на 4 GB сервере, при превышении - OOMKiller.

Решение:

docker compose restart metabase
# Если повторяется - увеличить heap или перейти на 8 GB VPS

Снижение нагрузки: проверить, нет ли «зависшего» SQL-запроса:

docker exec tradex-metabase-db psql -U metabase -d metabase -c "
SELECT pid, query, state, query_start FROM pg_stat_activity
WHERE state = 'active' ORDER BY query_start;
"

⚠ Materialized views не обновились

Симптомы: - Cohort retention показывает старые данные (>1 день) - /health от бота - Analytics DB OK, но last refresh > 24h назад

Диагностика:

journalctl -u tradex-ltv-refresh.service --since "24 hours ago"
cat /var/log/tradex-ltv-refresh.log | tail -50

Возможные причины: - VPN был down во время refresh - не успел скопировать staging - Long-running запрос держал блокировку - Disk full - copy не прошёл

Решение:

df -h /srv/tradex-analytics   # проверка места
systemctl start tradex-ltv-refresh.service  # ручной запуск
journalctl -u tradex-ltv-refresh.service -f

⚠ Telegram-бот не отвечает

Симптомы: - Команды бота не получают ответ - В Telegram - часы вращаются на сообщении

Диагностика:

docker compose logs --tail=200 tradex-analytics-bot

Часто - проблема с подключением к Tradex Replica (VPN).

Решение:

docker compose restart tradex-analytics-bot
# Если бот спамит ошибками в ALERT_CHAT_ID - временно отключить через PUBLIC_ACCESS=false

⚠ Sanity-test упал

Симптомы: - make sanity показывает FAIL - Один из автотестов в sql/sanity_tests/ вернул false

Диагностика:

Тест печатает details с актуальной vs ожидаемой цифрой. По имени теста смотрим в sql/sanity_tests/NN_*.sql и в methodology/METRIC-REGISTRY.md.

Решение:

  1. Если расхождение <10% - возможно нормальный рост / маркетинг-кампания. Обновить baseline в SQL.
  2. Если 10-30% - проверить, не изменилась ли структура БД (новый тег? новый state?).
  3. Если >30% - 🔴 серьёзный bug, не игнорировать. Возможные причины:
  4. SoftClub перетегировал большую группу юзеров
  5. Был массовый импорт / удаление в h_user
  6. Сломалась VPN, кеш Metabase показывает старые данные

⚠ Disk space - заканчивается

Симптомы: - df -h → /srv/tradex-analytics > 80% - Бэкапы не пишутся

Решение:

# Чистка старых бэкапов
find /srv/tradex-analytics/backups -mtime +90 -delete

# Чистка docker
docker system prune -af

# Если всё равно мало - увеличить диск через TimeWeb API
# или добавить external storage volume

Контакты при инциденте

  • Дмитрий (исполнитель): @dmitry_username, SLA по retainer - 1 рабочий день
  • CTO Tradex (Tradex CTO): для проблем с VPN-сертификатом и доступом

Алерты от бота приходят в ALERT_CHAT_ID (личка Дмитрия) - не дублируются в общий чат, чтобы не спамить.