Зв’язка Prometheus + Grafana – це сервіси для моніторингу. Prometheus збирає метрики, а Grafana будує графіки. В цій статті я напишу як встановити та налаштувати ці сервіси на Raspberry Pi 5
Вступ
Коли кількість сервісів на домашньому сервері, будь то Raspberry Pi чи повноцінний вузол, перевершує перший десяток, керувати ними “наосліп” стає ризиковано. Виникають питання: скільки пам’яті споживає Docker-контейнер з WordPress, чи не перегрівається процесор під навантаженням і чи не закінчується місце на диску після чергового бекапу? Саме для того, щоб тримати руку на пульсі системи та вчасно реагувати на інциденти, розгортається професійна зв’язка інструментів моніторингу, яка стала стандартом у світі IT.
Вибір між Prometheus та Zabbix часто стає предметом палких дискусій, проте для сучасного середовища на базі Docker та мікросервісів Prometheus має суттєві переваги. Якщо Zabbix — це класична “важка” система з величезною кількістю налаштувань у базі даних, яка вимагає встановлення агентів та часто надлишкової конфігурації для кожного нового хоста, то Prometheus ідеально вписується в концепцію “інфраструктура як код”. Він легший, швидший і працює за моделлю pull, самостійно збираючи дані з контейнерів, що робить його масштабування на Raspberry Pi значно ефективнішим. Більш того, екосистема Prometheus пропонує гнучку мову запитів PromQL, яка дозволяє створювати складні аналітичні графіки за лічені секунди, тоді як у Zabbix подібна візуалізація часто вимагає громіздкої ручної роботи.
Конфігурація Prometheus та Grafana
Для початку необхідно визначити назву та створити домашню директорію. В мене вона буде називатися Monitoring.
mkdir Monitoring
В цій директорії буде два файли, вміст яких я опишу більш детально:
Перший файл це основний docker-compose.yml – я опишу в ньому три основні компоненти:
- Prometheus: база даних часових рядів.
- Grafana: панель візуалізації.
- Node Exporter: агент, який знімає метрики саме з “заліза” Raspberry Pi (CPU, RAM, диск).
Конфігурація буде наступною:
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- 9090:9090
restart: unless-stopped
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- 3100:3000
environment:
- GF_SECURITY_ADMIN_PASSWORD=<strong password>
restart: unless-stopped
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
ports:
- 9100:9100
restart: unless-stopped
В цій конфігурації використовуються базові параметри для створення докер контейнерів:
- image – назва та посилання на відповідний докер контейнер
- container_name – назва локального докер контейнера
- ports – порти які будуть слухатися
- restart – завжди після перезавантаження распбері пай піднімати контейнер
Оскільки в мене на порті 3000 працює сервіс WUD, відповідно такий порт зайнятий, тому я замінив стандартний порт графани з 3000 на 3100.
Другий файл – prometheus.yml – це саме конфігурація налаштувань графани:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
Секція global: Тут задаються параметри, які стосуються всього процесу моніторингу. Параметр scrape_interval: 15s вказує Prometheus, як часто він має “заходити” до сервісів за новими даними. Значення у 15 секунд є оптимальним балансом для Raspberry Pi 5: це достатньо часто, щоб бачити актуальні стрибки навантаження, але при цьому не перевантажувати процесор постійними запитами.
Секція scrape_configs: Це список джерел, з яких ми збираємо інформацію. Кожне джерело описується як окремий “job” (завдання).
job_name: 'node': Це назва завдання, за якою потім будуть фільтруватися дані в Grafana. Ми назвали його ‘node’, бо воно відповідає за моніторинг фізичного вузла хоста.
static_configs та targets: Тут ми вказуємо точну адресу, де знаходяться метрики. Оскільки ми використовуємо Docker Compose, замість складної IP-адреси ми просто пишемо назву сервісу node-exporter:9100.
Така архітектура дозволяє легко масштабувати моніторинг: якщо завтра ви захочете додати моніторинг свого WordPress або Nginx, вам достатньо буде просто додати новий блок у scrape_configs з відповідним портом експортера.
Після визначення конфігурацій можна запустити сервіси і подивитися на результат.
Запуск Prometheus
Виконавши базову команду запуску сервісу
docker compose up -d
[+] up 29/29
✔ Image grafana/grafana:latest Pulled
✔ Image prom/prometheus:latest Pulled
✔ Image prom/node-exporter:latest Pulled
✔ Network monitoring_default Created
✔ Container prometheus Created
✔ Container grafana Created
✔ Container node-exporter Created
можна перейти в веб браузер за адресою
http://<IP>:9090
та побачити головну сторінку Prometheus на вкладці Query

Інтерфейс Prometheus може здатися аскетичним, але він не призначений для щоденного моніторингу. Його головна задача в веб-інтерфейсі – дати можливість швидко протестувати запит або перевірити статус підключених джерел (Target health).

Якщо статус цілей ‘UP’, значить система працює справно, і можна переходити до найцікавішого – графіків у Grafana.
Запуск Grafana
Оскільки при виконанні файлу піднялися одразу всі контейнери зазначені в конфігурації, то достатньо зайти на сторінку в браузері за адресою:
http://<IP>:3100

Відкриється красива сторінка авторизації де треба ввести базовий логін admin та пароль, який був вказаний в конфігурації, а саме в змінній GF_SECURITY_ADMIN_PASSWORD.
Підключення бази до Grafana
Щоб візуалізувати дані, необхідно додати Prometheus як джерело (Data Source) в налаштуваннях Grafana, вказавши внутрішню адресу контейнера http://prometheus:9090. Після успішного тестування з’єднання Grafana отримає доступ до всіх метрик, що дозволить вам будувати графіки та налаштовувати професійні дашборди для моніторингу вашої Raspberry Pi.
В Grafana необхідно вибрати меню Connections -> Data Sources.

Треба клацнути Add data source. В списку з’явиться великий вибір джерел, саме перше буде Prometheus, яке і треба вибрати

Серед декількох налаштувань, в секції Connection у полі Prometheus server URL ввести http://prometheus:9090 (оскільки вони в одній Docker-мережі).

Після натискання на кнопку Save & Test з’явиться повідомлення:
Successfully queried the Prometheus API.
Next, you can start to visualize data by building a dashboard , or by querying data in the Explore view .
що свідчить про правильне налаштування та коректний обмін інформацією.
Створення графіків (Dashboard)
Grafana дозволяє імпортувати готові професійні дашборди за допомогою унікальних ID, як-от популярний пресет 1860 для Node Exporter. Після імпорту ви отримаєте інтерактивну панель керування, яка в реальному часі відображає навантаження на ядра Raspberry Pi 5, температуру процесора та стан пам’яті у вигляді зрозумілих графіків та індикаторів. Це перетворює масив сирих даних з Prometheus на потужний інструмент для візуального аналізу та швидкої діагностики стану вашої інфраструктури.
В меню треба перейти в такій послідовності Dashboards -> Create Dashboard -> New -> Import.

Однією з найбільших переваг Grafana є величезна спільнота, яка ділиться готовими рішеннями на офіційному порталі Grafana Dashboards. Кожен такий шаблон має свій унікальний ідентифікатор (ID).
Номер 1860 належить найпопулярнішому у світі дашборду “Node Exporter Full”, який був створений для повної візуалізації метрик системного рівня.
У полі Import dashboard треба ввести цей ID та натиснути кнопку Load. Шаблон автоматично завантижиться і буде готовий до використання.

На сторінці відобразиться інформація про цей дашборд, щоб почати імпорт, треба натиснути на кнопку Import. Зібрані дані почнуть поступово відображатись на графіках.

В моєму випадку ще не минуло 24 години, тому графіки ще не повністю заповнені до межі, але візуально видно зміни з часом.
Висновки
У цій статті я розглянув базовий процес розгортання та зв’язки Prometheus і Grafana в Docker-середовищі на базі Raspberry Pi 5. Це налаштування дозволило мені не просто запустити сервіси, а й інтегрувати їх у єдину систему моніторингу, перетворивши сирі дані про роботу заліза на зрозумілі та естетичні графіки. Я переконався, що сучасний стек моніторингу є значно гнучкішим за класичні рішення, забезпечуючи високу швидкість аналізу стану сервера в реальному часі.
Проте встановлення Node Exporter – це лише перший крок, що охоплює метрики системного рівня, як-от завантаження процесора чи використання пам’яті. Екосистема моніторингу пропонує величезну кількість інших експортерів, які дозволяють зануритися в деталі кожного сервісу: від аналізу трафіку та помилок у Nginx до моніторингу запитів у базах даних MariaDB чи відстеження оновлень контейнерів через WUD. У наступних матеріалах я продовжу розширювати систему, додаючи нові джерела даних та налаштовуючи розумні сповіщення про критичні події.
