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

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

Где брать логи

Backend (Spring Boot)

# Последние логи (проверь активный контейнер: vpn-back-blue или vpn-back-green)
./scripts/ssh-internal.sh 10.99.87.249 "docker logs vpn-back-blue --tail 100"

# Ошибки
./scripts/ssh-internal.sh 10.99.87.249 "docker logs vpn-back-blue 2>&1 | grep ERROR | tail 20"

# Follow (в реальном времени)
./scripts/ssh-internal.sh 10.99.87.249 "docker logs vpn-back-blue -f --tail 10"

Blue-green deploy

Активный контейнер: vpn-back-blue (:8080) или vpn-back-green (:8081). Проверь: docker ps --filter name=vpn-back Текущее состояние: cat /opt/deploy/.deploy-state

Health check:

./scripts/ssh-internal.sh 10.99.87.249 "curl -s http://localhost:8080/actuator/health"
# Ожидаем: {"status":"UP"}

VPN Config Service (FastAPI)

# API процесс
./scripts/ssh-internal.sh 10.99.87.249 \
  "cd /opt/vpn-config-service && docker compose logs vpn-config-service --tail 100"

# Worker процесс
./scripts/ssh-internal.sh 10.99.87.249 \
  "cd /opt/vpn-config-service && docker compose logs vpn-config-worker --tail 100"

Health check:

./scripts/ssh-internal.sh 10.99.87.249 "curl -s http://localhost:8000/health"
# Возвращает: DB, Redis, worker sync age, servers_with_errors
# HTTP 503 если unhealthy

MySQL

# Slow query log
./scripts/ssh-internal.sh 10.99.87.62 \
  "docker exec vpn-db mysql -uvpn -p'$(см. Vaultwarden  Databases)' -e 'SHOW STATUS LIKE \"Slow_queries\"'"

# Текущие процессы
./scripts/ssh-internal.sh 10.99.87.62 \
  "docker exec vpn-db mysql -uvpn -p'$(см. Vaultwarden  Databases)' -e 'SHOW PROCESSLIST'"

# Контейнер
./scripts/ssh-internal.sh 10.99.87.62 "docker logs vpn-db --tail 50"

Nginx (API proxy)

# Логи прокси (212.70.189.60)
ssh -p 2255 root@212.70.189.60 "tail -100 /var/log/nginx/access.log"
ssh -p 2255 root@212.70.189.60 "tail -100 /var/log/nginx/error.log"

# Проверка конфигурации
ssh -p 2255 root@212.70.189.60 "nginx -t"

XUI (VPN серверы)

# XRAY логи
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519_shivavpn root@<IP> \
  "docker logs xray --tail 50"

# X-UI panel логи
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519_shivavpn root@<IP> \
  "journalctl -u x-ui --tail 50"

# Статус сервиса
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519_shivavpn root@<IP> \
  "systemctl status xray; ss -tlnp | grep 443"

Remnawave ноды

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519_hiddify root@<IP> \
  "docker logs remnanode --tail 50"

Audit Bot

./scripts/ssh-internal.sh 10.99.87.5 \
  "cd /opt/shivavpn-bot && docker compose logs --tail 30"

Grafana / Prometheus

./scripts/ssh-internal.sh 10.99.87.5 "docker logs grafana --tail 50"
./scripts/ssh-internal.sh 10.99.87.5 "docker logs grafana-prometheus-1 --tail 50"

Prometheus порт

Prometheus слушает на порту 9091 (не 9090): docker port grafana-prometheus-1. При curl с Grafana-сервера добавляй no_proxy=localhost чтобы обойти squid.

Диагностические скрипты

Полный каталог: DevOps скрипты.

Ключевые для диагностики:

Скрипт Описание
audit_account.py Полный аудит аккаунта: MySQL + VPN configs + VUSA + devices
audit_wl_proxies.py Аудит WL прокси: MySQL vs nftables конфиг
check_backend_configs.py Что бэкенд API возвращает для пользователя
check_panel_configs.py Что XUI панели имеют для пользователя

Быстрая диагностика

API не отвечает

# 1. Тест каждого слоя
curl -I https://api.shivavpn.io/api/v1/config/ping  # Внешний
curl -I https://212.70.189.60                         # Proxy
# 2. Backend напрямую (через SSH)
./scripts/ssh-internal.sh 10.99.87.249 \
  "curl -s http://localhost:8080/actuator/health"
# 3. Логи (проверь активный контейнер: blue или green)
./scripts/ssh-internal.sh 10.99.87.249 "docker logs vpn-back-blue --tail 50"

VPN сервер не работает

SERVER_IP=<IP>
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519_shivavpn root@$SERVER_IP
# Проверки:
systemctl status xray
ss -tlnp | grep 443
journalctl -u xray --tail 50
docker logs xray --tail 50

Пользователь не может подключиться

# 1. Проверить аккаунт (DevOps инструмент, monorepo: scripts/audit_account.py)
# python3 scripts/audit_account.py <ACCOUNT_NUMBER>

# 2. Принудительный sync
TOKEN=$(curl -s -X POST http://10.99.87.249:8080/api/auth/login/admin \
  -H "Content-Type: application/json" \
  -d '{"login":"admin@shivavpn.io","password":"<Vaultwarden → Infrastructure → Admin Panel>"}' | jq -r .accessToken)

curl -X POST \
  "http://10.99.87.249:8080/api/admin/maintenance/sync/account/by-login/<ACCOUNT>" \
  -H "Authorization: Bearer $TOKEN"

Централизованный мониторинг

  • Grafana: https://monitor.karmann.tech (порт 3001)
  • Prometheus: метрики с backend (/actuator/prometheus), VPN Config Service (/metrics), node_exporter
  • Loki: логи через Promtail/Fluent-Bit

Подробнее: см. Мониторинг (будет добавлен).