«Сервер гальмує» — марний баг-репорт. Хіба що ви можете відкрити графік і побачити, що пам'ять три дні повзла вгору перед падінням. Саме це дають Prometheus і Grafana: CPU, RAM, диск і мережа кожного сервера, записані щоп'ятнадцять секунд і намальовані графіками, які можна відмотати назад. Поставте їх на окремий маленький 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?
Коментарі
Поки немає коментарів. Будьте першим.