Встановлення Prometheus та Grafana на Raspberry Pi 5


6 хвилин

Зв’язка 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. У наступних матеріалах я продовжу розширювати систему, додаючи нові джерела даних та налаштовуючи розумні сповіщення про критичні події.