Grafana + Prometheus + Node Exporter: будуємо професійний моніторинг для серверів
У попередніх статтях ми розглядали Netdata як швидкий інструмент для миттєвої діагностики сервера. Проте, якщо вам потрібен довгостроковий аналіз метрик, збір даних із кількох серверів в одну панель та гнучкі сповіщення в Telegram, стандартною зв’язкою в індустрії є Grafana + Prometheus + Node Exporter.
Сьогодні ми розгорнемо цей стек у Docker за кілька хвилин та підключимо готовий професійний дашборд.
Як працює цей стек?
- 🔍 Node Exporter — легкий агент від розробників Prometheus, який встановлюється на сервер, зчитує системні метрики (процесор, пам’ять, диски, мережу) і віддає їх у вигляді простого тексту на порту
9100. - 🗄️ Prometheus — спеціалізована база даних часових рядів (Time Series Database). Вона регулярно самостійно «ходить» на Node Exporter, забирає нові метрики та зберігає їх у себе.
- 📊 Grafana — платформа для візуалізації. Вона підключається до Prometheus, робить запити та будує красиві графіки на інтерактивних панелях.
Крок 1. Структура проекту та конфігурація Prometheus
Створимо окрему робочу директорію для моніторингу на сервері:
1
2
mkdir -p /opt/monitoring/prometheus
cd /opt/monitoring
Створимо файл конфігурації для Prometheus, який вкаже йому, звідки збирати метрики.
Створіть файл prometheus/prometheus.yml:
1
2
3
4
5
6
7
8
9
10
11
global:
scrape_interval: 15s # Частота збору метрик
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']
Крок 2. Налаштування Docker Compose
Створимо файл docker-compose.yml в папці /opt/monitoring, який запустить усі три компоненти в одній мережі:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
restart: unless-stopped
ports:
- "9090:9090"
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
restart: unless-stopped
expose:
- "9100"
grafana:
image: grafana/grafana-oss:latest
container_name: grafana
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=super_secret_pass # Вкажіть свій надійний пароль
restart: unless-stopped
ports:
- "3000:3000"
volumes:
prometheus_data:
grafana_data:
💡 Зверніть увагу: ми не прописували
portsдляnode-exporter, а використалиexpose. Оскільки Prometheus та Node Exporter працюють в одній Docker-мережі, Prometheus може забирати метрики напряму без відкриття порту9100у зовнішній інтернет, що безпечніше.
Запускаємо весь стек:
1
docker compose up -d
Крок 3. Налаштування джерела даних (Data Source) у Grafana
- Відкрийте у браузері адресу
http://<IP-вашого-сервера>:3000. - Увійдіть за допомогою логіна
adminта пароля, який ви вказали у зміннійGF_SECURITY_ADMIN_PASSWORD(за замовчуванням цеadmin, якщо змінна не була задана). - Перейдіть до меню: Connections -> Data sources -> натисніть кнопку Add data source.
- Оберіть Prometheus.
- У полі Connection -> URL вкажіть внутрішню Docker-адресу контейнера Prometheus:
http://prometheus:9090. - Прокрутіть сторінку до самого низу та натисніть кнопку Save & test. Ви маєте побачити зелене повідомлення: «Data source is working».
Крок 4. Імпорт професійного дашборду
Малювати графіки вручну з нуля — довга справа. Спільнота Grafana має тисячі готових дашбордів. Один із найкращих та найдетальніших для Node Exporter має ID 1860 (Node Exporter Full).
Щоб імпортувати його:
- У лівому боковому меню натисніть на іконку Dashboards.
- Натисніть кнопку New (зверху справа) -> Import.
- У полі Find and import dashboards via grafana.com введіть число
1860та натисніть Load. - Унизу сторінки в спадному списку для Prometheus виберіть ваше нещодавно створене джерело даних.
- Натисніть Import.
Перед вами відкриється неймовірно красивий та інформативний дашборд: завантаження ядер процесора, оперативна пам’ять, дискові IOPS, вільне місце на розділах, мережева швидкість та температура!
Підсумок
Тепер у вас є надійна промислова система моніторингу. Найбільший плюс цієї зв’язки — масштабованість. Якщо ви піднімете новий сервер, вам достатньо запустити на ньому лише легкий контейнер node-exporter, а Prometheus на основному сервері сам забиратиме з нього дані. Усі ваші сервери будуть як на долоні в одній панелі Grafana!
