Встановлення Grafana і Prometheus у Docker: моніторинг сервера

Зв’язка Prometheus і Grafana — стандарт моніторингу серверів. Prometheus збирає та зберігає метрики, Node Exporter віддає показники операційної системи, а Grafana перетворює їх на наочні графіки. Через Docker Compose увесь стек піднімається за кілька хвилин.
Як влаштований стек
- Node Exporter працює на кожному сервері й віддає метрики: завантаження процесора, пам’ять, диски, мережу.
- Prometheus раз на кілька секунд опитує експортери та зберігає значення у своїй базі.
- Grafana запитує дані в Prometheus і будує дашборди.
Що знадобиться
- VPS із 2 ГБ пам’яті або більше;
- встановлені Docker і Docker Compose — див. інструкцію зі встановлення.
Крок 1. Файли проєкту
mkdir -p ~/monitoring && cd ~/monitoring
Створіть конфігурацію Prometheus у файлі prometheus.yml:
global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
- job_name: node
static_configs:
- targets: ["node-exporter:9100"]
Створіть docker-compose.yml:
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.retention.time=30d
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
ports:
- "127.0.0.1:9090:9090"
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
command:
- --path.rootfs=/host
pid: host
volumes:
- /:/host:ro,rslave
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
environment:
GF_SECURITY_ADMIN_PASSWORD: "надійний_пароль"
volumes:
- grafana_data:/var/lib/grafana
ports:
- "3000:3000"
volumes:
prometheus_data:
grafana_data:
Prometheus опубліковано лише на локальній адресі: він не має вбудованої авторизації, і відкривати його в інтернет не можна. Параметр retention.time задає термін зберігання метрик.
Крок 2. Запуск
docker compose up -d
docker compose ps
Усі три контейнери мають бути в стані running.
Крок 3. Перевірка Prometheus
Інтерфейс Prometheus доступний лише із самого сервера. Щоб відкрити його в браузері, прокиньте порт через SSH:
ssh -L 9090:127.0.0.1:9090 root@203.0.113.10
Відкрийте http://localhost:9090 і перейдіть у Status → Target health. Обидві цілі — prometheus і node — мають бути в стані UP.
Крок 4. Налаштування Grafana
Відкрийте http://IP-сервера:3000 і увійдіть із логіном admin та паролем із файлу docker-compose.yml.
Джерело даних
- Відкрийте Connections → Data sources → Add data source.
- Оберіть Prometheus.
- У полі Prometheus server URL вкажіть
http://prometheus:9090— контейнери бачать один одного за іменами. - Натисніть Save & test.
Готовий дашборд
Будувати панелі з нуля не потрібно: у каталозі Grafana є готові дашборди.
- Відкрийте Dashboards → New → Import.
- Введіть ідентифікатор
1860(дашборд Node Exporter Full) і натисніть Load. - Оберіть створене джерело даних Prometheus і натисніть Import.
Відкриється дашборд із графіками процесора, пам’яті, дисків і мережі.
Крок 5. Підключення інших серверів
На кожному сервері, який потрібно відстежувати, запустіть Node Exporter:
docker run -d \
--name node-exporter \
--restart unless-stopped \
--net host --pid host \
-v /:/host:ro,rslave \
prom/node-exporter:latest --path.rootfs=/host
Експортер не має авторизації, тому дозвольте доступ до порту 9100 лише з адреси сервера моніторингу:
sudo ufw allow from 203.0.113.10 to any port 9100 proto tcp
Додайте сервери в prometheus.yml на сервері моніторингу:
- job_name: node
static_configs:
- targets: ["node-exporter:9100"]
labels:
instance: monitoring
- targets: ["198.51.100.20:9100"]
labels:
instance: web-01
Застосуйте зміни:
docker compose restart prometheus
Новий сервер з’явиться у випадному списку вгорі дашборда.
Захист Grafana
- Закрийте порт 3000 і опублікуйте Grafana через зворотний проксі з HTTPS — підійде Nginx Proxy Manager або ручне налаштування Nginx.
- Самостійну реєстрацію й анонімний доступ типово вимкнено — не вмикайте їх без потреби.
Оновлення
cd ~/monitoring
docker compose pull
docker compose up -d
Дані Prometheus і налаштування Grafana зберігаються в томах і під час оновлення не втрачаються.
Що далі
- Налаштуйте сповіщення в розділі Alerting: Grafana вміє надсилати повідомлення в Telegram, на пошту та в інші канали.
- Додайте експортери для своїх сервісів: MySQL, PostgreSQL, Nginx, Docker.
- Якщо потрібна класична система моніторингу з агентами й шаблонами, подивіться Zabbix; для простої перевірки доступності сайтів — Uptime Kuma.


