Зміст

🚧 Налаштування дашбордів у Grafana

Мета: Мати єдине місце в якому можна побачити фізичний стан своїх пристроїв, віртуалок і контейнерів. Мати змогу заглибитися в кожен окремий пристрій при потребі.

1. Вступ

Дашборди дозволяють зібрати дані про стан пристроїв, серверів, віртуальних машин і контейнерів на одній сторінці та швидко отримувати потрібну інформацію. Це зручний спосіб побачити загальну картину і в кілька кліків перейти до деталей.

У цій статті ми розберемося, що таке дашборди, як зробити їх корисними саме під ваші потреби, побудуємо дашборд для цифрових фоторамок і розглянемо приклади готових рішень.

1. Що таке дашборди

Дашборд — це інтерактивна панель, яка збирає та відображає дані з різних джерел у зручному вигляді. Замість того, щоб перевіряти логи на кожному пристрої чи відкривати окремі моніторинги для серверів і контейнерів, ви отримуєте єдиний інтерфейс, де видно все: від загальної статистики до конкретних метрик.

Завдяки цьому ви можете:

  • швидко оцінити стан системи одним поглядом;

  • знаходити проблеми ще до того, як вони вплинуть на роботу;

  • налаштовувати панель під себе — обирати саме ті показники, які важливі у вашій інфраструктурі.

2. Побудова дашборду з нуля

Щоб створити дашборд, потрібно визначити які дані для вас найважливіші. Для когось це буде стан серверів і віртуальних машин, для інших — температура пристроїв, споживання ресурсів чи статистика роботи конкретного сервісу.

У нашому прикладі ми зосередимося на цифрових фоторамках, але той самий підхід можна застосувати і до будь-яких інших пристроїв у мережі.

Основні кроки виглядають так:

  1. Вибір джерела даних — наприклад, Prometheus для метрик або Loki для логів.

  2. Створення нового дашборду у Grafana.

  3. Додавання панелей з потрібними показниками (CPU, пам’ять, аптайм, кількість нових фото тощо).

  4. Налаштування візуалізації — графіки, таблиці чи стат-панелі для зручного сприйняття.

  5. Збереження та перевірка роботи дашборду на реальних даних.

3. Простий дашборд для одного пристрою 

Uptime

/2025/08/30/stvorennya-prostogo-dashbordu-v-grafana/images/screenshot-2025-08-22-at-07.07.49-1024x425.png

Запит (PromQL):

time() - node_boot_time_seconds{instance="photoframe-a"}

Візуалізація та налаштування:

  • Visualization: Stat

  • Standard options → Unit: time → duration (s)

  • Title: Uptime

  • Thresholds: видалити (не потрібно)

  • Background: Background → Solid

  • (Опційно) Link на Explore/логи: Panel → Links → Add lin

Disk used, % (SD)

/2025/08/30/stvorennya-prostogo-dashbordu-v-grafana/images/screenshot-2025-08-22-at-07.08.11-1024x379.png

Запит (PromQL):

100 *
(
  sum(node_filesystem_size_bytes{instance="photoframe-a", fstype!~"tmpfs|overlay|squashfs"})
  - sum(node_filesystem_avail_bytes{instance="photoframe-a", fstype!~"tmpfs|overlay|squashfs"})
)
/
sum(node_filesystem_size_bytes{instance="photoframe-a", fstype!~"tmpfs|overlay|squashfs"})

Візуалізація та налаштування:

  • Visualization: Bar Gauge

  • Orientation: Horizontal

  • Display mode: LCD

  • Value display: Hidden

  • Unit: percent (0–100)

  • Decimals: 0

  • Min/Max: 0 / 100

  • Thresholds: 70 → жовтий, 85 → червоний

  • Title: Disk used, % (SD)

CPU Temp (°C)

/2025/08/30/stvorennya-prostogo-dashbordu-v-grafana/images/screenshot-2025-08-22-at-07.08.29-1024x426.png

Запит (PromQL):

max by (instance) (node_hwmon_temp_celsius{instance="photoframe-a"})

Візуалізація та налаштування:

  • Visualization: Gauge

  • Unit: celsius

  • Min/Max: 0 / 100

  • Thresholds: 65 → жовтий, 80 → червоний

  • Title: CPU Temp (°C)

Load (CPU, RAM, SWAP)

/2025/08/30/stvorennya-prostogo-dashbordu-v-grafana/images/screenshot-2025-08-22-at-07.08.42-1024x427.png

Запити (PromQL):

# CPU %
100 * (1 - avg by (instance) (rate(node_cpu_seconds_total{instance="photoframe-a", mode="idle"}[5m])))

# RAM %
100 * (1 - (node_memory_MemAvailable_bytes{instance="photoframe-a"} / node_memory_MemTotal_bytes{instance="photoframe-a"}))

# SWAP %
100 * (1 - (node_memory_SwapFree_bytes{instance="photoframe-a"} / clamp_min(node_memory_SwapTotal_bytes{instance="photoframe-a"}, 1)))

Візуалізація та налаштування:

  • Visualization: Bar Gauge (3 окремі панелі або Repeat по запитах; найпростіше — 3 окремі)

  • Title: Load

  • Display: LCD

  • Unit: percent (0–100)

  • Decimals: 1

  • Min/Max: 0 / 100

  • Thresholds: 80 → жовтий, 90 → червоний

Added photos (7 days)

Запит (Loki / LogQL):

count_over_time({instance="photoframe-a"} |~ "Copied \\(new\\)" [7d])

Візуалізація та налаштування:

  • Visualization: Stat

  • Title: Added photos (7d)

Errors (7 days)

Запит (Loki / LogQL):

count_over_time({instance="photoframe-a"} |~ "(?i)(error|failed|exception)" [7d])

Візуалізація та налаштування:

  • Visualization: Stat

  • Title: Errors (7d)

  • Thresholds: 1 → жовтий/червоний (щоб будь-яка помилка підсвічувалася)

Error logs

/2025/08/30/stvorennya-prostogo-dashbordu-v-grafana/images/screenshot-2025-08-22-at-07.11.45-1024x425.png

Запит (Loki / LogQL):

{instance="photoframe-a"} |~ "(?i)(error|failed|exception)"

Візуалізація та налаштування:

  • Visualization: Logs

  • Time range: наприклад. last 24h

  • Sort: від найновіших

  • Опції:

    • Wrap lines — перенос рядків

    • Deduplication — приховати дублікати

4. Використання змінних для схожих пристроїв

Крок 1: Створити змінну instance

  • Dashboard settings → VariablesAdd variable

  • Name: instance

  • Type: Query

  • Data source: відповідний (Prometheus / Loki)

  • Query:

label_values(up{instance=~"photoframe-.*"}, instance)
  • Multi-value: опційно (зазвичай ні)

  • Include All option: опційно (якщо хочеш All)

/2025/08/30/stvorennya-prostogo-dashbordu-v-grafana/images/screenshot-2025-08-22-at-07.13.49-1024x874.png

Крок 2: Замінити в усіх панелях константу на змінну

  • Було: instance="photoframe-a"

  • Стає: instance="${instance}"

Uptime (PromQL):

time() - node_boot_time_seconds{instance="${instance}"}

Disk used % (PromQL):

100 *
(
  sum(node_filesystem_size_bytes{instance="${instance}", fstype!~"tmpfs|overlay|squashfs"})
  - sum(node_filesystem_avail_bytes{instance="${instance}", fstype!~"tmpfs|overlay|squashfs"})
)
/
sum(node_filesystem_size_bytes{instance="${instance}", fstype!~"tmpfs|overlay|squashfs"})

CPU Temp (PromQL):

max by (instance) (node_hwmon_temp_celsius{instance="${instance}"})

Load (PromQL):

# CPU %
100 * (1 - avg by (instance) (rate(node_cpu_seconds_total{instance="${instance}", mode="idle"}[5m])))

# RAM %
100 * (1 - (node_memory_MemAvailable_bytes{instance="${instance}"} / node_memory_MemTotal_bytes{instance="${instance}"}))

# SWAP %
100 * (1 - (node_memory_SwapFree_bytes{instance="${instance}"} / clamp_min(node_memory_SwapTotal_bytes{instance="${instance}"}, 1)))

Added photos (7 days) (Loki):

count_over_time({instance="${instance}"} |~ "Copied \\(new\\)" [7d])

Errors (7 days) (Loki):

count_over_time({instance="${instance}"} |~ "(?i)(error|failed|exception)" [7d])

Error logs (Loki):

{instance="${instance}"} |~ "(?i)(error|failed|exception)"

Переваги змінної instance: один дашборд на всі фоторамки, перемикання одним кліком, легке масштабування (додаєш новий пристрій — він автоматично з’являється у списку).

5. Готові приклади дашбордів

Якщо ви не хочете будувати все з нуля, у спільноті Grafana вже є багато готових рішень. Вони можуть стати відправною точкою: ви імпортуєте готовий JSON і підлаштовуєте його під свої дані та потреби.

/2025/08/30/stvorennya-prostogo-dashbordu-v-grafana/images/screenshot-2025-08-22-at-06.53.53-1024x583.jpg

Кілька корисних прикладів:

  • Node Exporter Full — універсальний дашборд для моніторингу Linux-систем (CPU, пам’ять, диски, мережа). 👉 Node Exporter Full Dashboard

  • Raspberry Pi Monitoring — зручний набір панелей для моніторингу температури, ресурсів і дисків Raspberry Pi. 👉 Raspberry Pi Monitoring

  • All-in-One — комплексний дашборд із CPU, пам’яттю, дисками, мережею та іншими метриками для швидкого огляду всієї системи. 👉 All-in-One Dashboard

💡 Навіть якщо ці дашборди не ідеально підходять до ваших пристроїв, вони чудово показують як структуровані панелі і які є варіанти візуалізації. Найзручніше взяти готовий приклад і поступово замінювати метрики на власні.