Встановлення Prometheus та Grafana на Raspberry Pi 5 дозволяє перетворити ваш мікрокомп’ютер на справжній серверний вузол із професійним моніторингом. У цій статті ми розберемо, як розгорнути цей стек через Docker Compose.
Вступ
Коли кількість сервісів на домашньому сервері, будь то Raspberry Pi чи повноцінний вузол, перевершує перший десяток, керувати ними “наосліп” стає ризиковано. Виникають питання: скільки пам’яті споживає Docker-контейнер з WordPress, чи не перегрівається процесор під навантаженням і чи не закінчується місце на диску після чергового бекапу? Саме для того, щоб тримати руку на пульсі системи та вчасно реагувати на інциденти, розгортається професійна зв’язка інструментів моніторингу, яка стала стандартом у світі IT.
Вибір між Prometheus та Zabbix часто стає предметом палких дискусій, проте для сучасного середовища на базі Docker та мікросервісів Prometheus має суттєві переваги. Якщо Zabbix — це класична “важка” система з величезною кількістю налаштувань у базі даних, яка вимагає встановлення агентів та часто надлишкової конфігурації для кожного нового хоста, то Prometheus ідеально вписується в концепцію “інфраструктура як код”. Він легший, швидший і працює за моделлю pull, самостійно збираючи дані з контейнерів, що робить його масштабування на Raspberry Pi значно ефективнішим. Більш того, екосистема Prometheus пропонує гнучку мову запитів PromQL, яка дозволяє створювати складні аналітичні графіки за лічені секунди, тоді як у Zabbix подібна візуалізація часто вимагає громіздкої ручної роботи.
Хоча я вже розглядав моніторинг активності докер-контейнерів у Zabbix, Prometheus пропонує зовсім інший рівень гнучкості для мікросервісів.
Конфігурація 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.
Підключення бази до 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 години, тому графіки ще не повністю заповнені до межі, але візуально видно зміни з часом.
Цей проект ідеально підходить для нової плати, про яку я писав у розпаковці Raspberry Pi 5.
Висновки
У цій статті я розглянув базовий процес розгортання та зв’язки Prometheus і Grafana в Docker-середовищі на базі Raspberry Pi 5. Це налаштування дозволило мені не просто запустити сервіси, а й інтегрувати їх у єдину систему моніторингу, перетворивши сирі дані про роботу заліза на зрозумілі та естетичні графіки. Я переконався, що сучасний стек моніторингу є значно гнучкішим за класичні рішення, забезпечуючи високу швидкість аналізу стану сервера в реальному часі.
Проте встановлення Node Exporter – це лише перший крок, що охоплює метрики системного рівня, як-от завантаження процесора чи використання пам’яті. Екосистема моніторингу пропонує величезну кількість інших експортерів, які дозволяють зануритися в деталі кожного сервісу: від аналізу трафіку та помилок у Nginx до моніторингу запитів у базах даних MariaDB чи відстеження оновлень контейнерів через WUD. У наступних матеріалах я продовжу розширювати систему, додаючи нові джерела даних та налаштовуючи розумні сповіщення про критичні події.
