Сервер DOWN в Grafana¶
Grafana показывает VPN-сервер в статусе DOWN или срабатывает алерт «VPN Server Down». Важно сначала понять — сервер реально упал или это ложная тревога из-за node_exporter/мониторинга.
Симптомы¶
- Алерт в Telegram от Grafana:
VPN Server Down — SERVER_NAME (SERVER_IP) - На дашборде «VPN Servers» статус
DOWN(красный) - Метрика
up{job="vpn-servers"}= 0 для данного сервера - В отчётах: онлайн-сессии на сервере резко упали до 0
Диагностика — отличить DOWN от UNREACHABLE¶
Различать важно: сервер может быть физически жив, но node_exporter или Prometheus scrape сломан.
1. Проверить TCP-доступность VPN-порта¶
# С backend сервера (10.99.87.249), который является точкой сбора метрик
./scripts/ssh-internal.sh 10.99.87.249 \
"timeout 5 nc -zv SERVER_IP VPN_PORT && echo OPEN || echo CLOSED"
Если VPN-порт открыт — xray жив, проблема в мониторинге, не в VPN.
2. Проверить node_exporter (порт 9100)¶
./scripts/ssh-internal.sh 10.99.87.249 \
"curl -s --connect-timeout 5 http://SERVER_IP:9100/metrics | head -5"
- Ответ с метриками → node_exporter жив, проблема в Prometheus / Grafana datasource
- Connection refused / timeout → node_exporter не работает или firewall закрыл 9100
3. SSH на сервер¶
| Результат | Статус |
|---|---|
| Uptime получен, xray running | Сервер жив, проблема в мониторинге |
| Uptime получен, xray exited | xray упал — нужен restart |
| SSH timeout | Сервер недоступен — P1 инцидент |
4. Проверить docker ps на сервере (node_exporter)¶
node_exporter на VPN-серверах развёрнут через Docker + nginx с basic auth (порт 9100).
5. Prometheus target status¶
Открыть Grafana → Connections → Data sources → Prometheus → Explore:
Если up = 0 при живом node_exporter — проблема в Prometheus scrape (сеть, auth, таймаут).
Различие статусов¶
| Статус | Значение | Действие |
|---|---|---|
| DOWN | Prometheus не получает метрики от node_exporter | Проверить node_exporter и сеть до 9100 |
| UNREACHABLE | VPN-порт недоступен (xray не слушает) | Проверить xray, перезапустить |
| DEGRADED | Высокое время отклика / частичные ошибки | Проверить нагрузку, логи xray |
Исправление¶
node_exporter не работает — перезапустить¶
./scripts/ssh-internal.sh SERVER_IP "docker restart node-exporter && sleep 3 && docker ps | grep node"
nginx (ssl-прокси для node_exporter) упал¶
xray упал — перезапустить¶
Firewall закрыл порт 9100¶
Порт 9100 и basic auth
node_exporter слушает через nginx с basic auth. Prometheus scrape config должен содержать credentials. Если nginx перезапустился с новым конфигом без auth — scrape начнёт получать 401.
Проверить после исправления¶
# Подождать 1-2 минуты (интервал scrape Prometheus)
./scripts/ssh-internal.sh 10.99.87.249 \
"curl -s http://SERVER_IP:9100/metrics | grep '^node_load1'"
Ложные алерты (false positive)¶
Возможные причины:
- Сервер перезагружался (плановое обслуживание хостера) — кратковременный DOWN до 5 мин
- Prometheus scrape timeout из-за высокой нагрузки на сам Prometheus (10.99.87.5)
- Grafana alerting rule с коротким
for(срабатывает при одной пропущенной точке)
Если алерт пришёл и сразу прошёл (resolved через 2-3 мин) — вероятно false positive, сервер логировать не нужно.
Эскалация¶
- P1: SSH на сервер недоступен + ping не идёт → открыть тикет у хостера
- Провайдер каждого сервера:
ansible/shiva-ansible/inventory/servers.ini→ имя хоста (vpn-<провайдер>-<страна>-<номер>) - Множественные DOWN одновременно → возможна проблема с Prometheus, не с серверами
См. также: Мониторинг · VPN сервер не работает · DevOps скрипты → check_vpn_server · Инвентарь серверов