«Сервер тормозит» — бесполезный баг-репорт. Если только вы не можете открыть график и увидеть, что память три дня ползла вверх перед падением. Именно это дают Prometheus и Grafana: CPU, RAM, диск и сеть каждого сервера, записанные каждые 15 секунд и нарисованные графиками, которые можно отмотать назад. Поставьте их на отдельный маленький VPS — и они продолжат следить, даже когда боевая машина падает.
Из чего состоит
- node_exporter на каждом наблюдаемом сервере — отдаёт системные метрики на порту 9100.
- Prometheus на VPS мониторинга — забирает (скрейпит) эти метрики и хранит их.
- Grafana — дашборды, за HTTPS.
- По желанию Alertmanager или алерты Grafana, чтобы вам приходило сообщение, когда что-то пересекает порог.
Что понадобится
- Micro-IP ($10/мес, 2 vCPU, 2 ГБ RAM, 25 ГБ) следит за одним-двумя десятками серверов. Больше хостов, свои метрики приложений или месяцы хранения — Small-IP.
- Выделенный IPv4 для сервера мониторинга — Grafana отдаётся по HTTPS, а наблюдаемые серверы могут открыть порт 9100 для одного стабильного адреса.
1. node_exporter на каждом сервере
apt install -y prometheus-node-exporter
# allow only the monitoring server to scrape it
ufw allow from 203.0.113.10 to any port 9100 proto tcp
Замените 203.0.113.10 на адрес вашего VPS мониторинга. Никогда не оставляйте 9100 открытым всему миру — он многое рассказывает о сервере.
2. Prometheus и Grafana на VPS мониторинга
apt update && apt install -y docker.io docker-compose-v2 caddy
mkdir -p /opt/monitoring && cd /opt/monitoring
cat > prometheus.yml <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: nodes
static_configs:
- targets: ['198.51.100.21:9100', '198.51.100.22:9100']
EOF
cat > compose.yml <<'EOF'
services:
prometheus:
image: prom/prometheus
volumes: [ "./prometheus.yml:/etc/prometheus/prometheus.yml:ro", "prom:/prometheus" ]
command: [ "--config.file=/etc/prometheus/prometheus.yml", "--storage.tsdb.retention.time=15d", "--web.enable-remote-write-receiver" ]
ports: [ "127.0.0.1:9090:9090" ]
restart: unless-stopped
grafana:
image: grafana/grafana
volumes: [ "grafana:/var/lib/grafana" ]
ports: [ "127.0.0.1:3000:3000" ]
restart: unless-stopped
volumes: { prom: {}, grafana: {} }
EOF
docker compose up -d
HTTPS перед Grafana:
echo 'grafana.example.com {
reverse_proxy 127.0.0.1:3000
}' > /etc/caddy/Caddyfile && systemctl reload caddy
Войдите (admin / admin, затем смените пароль), добавьте Prometheus как источник данных по адресу http://prometheus:9090 и импортируйте популярный дашборд «Node Exporter Full» (ID 1860). Полный системный дашборд будет примерно через минуту.
Серверы на NAT-тарифах
NAT-сервер принимает входящие соединения только на персональный SSH-порт, так что Prometheus не может опросить его экспортёр. Разверните направление: запустите на NAT-машине Prometheus в режиме агента и отправляйте данные на сервер мониторинга — он уже принимает remote write (флаг --web.enable-remote-write-receiver выше).
# /etc/prometheus/agent.yml on the NAT server
scrape_configs:
- job_name: self
static_configs: [ { targets: ['127.0.0.1:9100'] } ]
remote_write:
- url: https://prom-push.example.com/api/v1/write
Эту точку приёма выставьте через Caddy с basic auth, а не открывайте порт 9090 напрямую.
Честные замечания
Prometheus сам забирает данные — отлично для парка серверов под вашим контролем и неудобно для всего, что за NAT, отсюда трюк с агентом. Его локальное хранилище не рассчитано на годы истории; для долгого хранения позже добавляется удалённое хранилище. И дашборды — лишь половина пользы: в первый же день настройте хотя бы три алерта (диск больше 85%, нехватка памяти, недоступная цель), иначе вы будете смотреть на графики, только когда что-то уже сломалось.
Связанное
- VPS для мониторинга аптайма (Uptime Kuma) — оповещения о падениях и страницы статуса
- Как настроить файрвол UFW
- Сколько RAM нужно VPS?
Комментарии
Пока нет комментариев. Будьте первым.