Мониторить VPS обязательно. Без метрик выявление проблем — гадание по чайной гуще. Ниже — минимальная схема: node_exporter на каждой ноде + Prometheus + Grafana на управляющей ноде. За 15 минут работы.
Архитектура
3 компонента.
- node_exporter — на каждой боевой ноде. Отдаёт метрики (CPU, RAM, диск, сеть) на порту 9100.
- Prometheus — на management-ноде. Опрашивает node_exporter'ы каждые 15 сек, хранит TSDB.
- Grafana — на management-ноде. Строит графики из Prometheus.
Установка node_exporter на боевую ноду
Официальный бинарник + systemd unit.
# скачиваем актуальную версию (2026)
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.9.0/node_exporter-1.9.0.linux-amd64.tar.gz
tar xzf node_exporter-*.tar.gz
sudo mv node_exporter-*/node_exporter /usr/local/bin/
sudo useradd -rs /bin/false node_exporter
# systemd unit
sudo tee /etc/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.listen-address=127.0.0.1:9100
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
curl http://127.0.0.1:9100/metrics | head -20 # видим метрикиНа заметку
Слушаем только 127.0.0.1 — снаружи метрики не публикуем. Prometheus заберёт через SSH-tunnel или WireGuard.
Prometheus на management-ноде
Через docker-compose (быстрее apt).
# /opt/monitoring/docker-compose.yml
services:
prometheus:
image: prom/prometheus:v3.0.0
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prom-data:/prometheus
ports:
- "127.0.0.1:9090:9090"
restart: unless-stopped
grafana:
image: grafana/grafana:11.4.0
environment:
GF_SECURITY_ADMIN_PASSWORD: change_me_strong
volumes:
- grafana-data:/var/lib/grafana
ports:
- "127.0.0.1:3000:3000"
restart: unless-stopped
volumes:
prom-data:
grafana-data:prometheus.yml — targets
Указываем, кого опрашивать.
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: nodes
static_configs:
- targets:
- "10.100.0.10:9100" # боевая нода 1 (по WireGuard)
- "10.100.0.11:9100" # боевая нода 2
labels:
env: productionGrafana: готовый дашборд
Grafana → Dashboards → Import → ID: 1860 (Node Exporter Full). Один клик — 30+ панелей: CPU, RAM, диск, сеть, IO. Универсальный старт.
Что мониторить обязательно
Метрики + алерты.
- CPU load > 80 % 5 мин → warning.
- RAM used > 90 % → critical (запаса нет).
- Disk used > 85 % → warning, > 95 % → critical.
- Disk IO wait > 30 % → warning (диск не справляется).
- Sysem load average / cores > 2.0 → warning.
- Network errors / sec > 10 → warning.