Перейти до вмісту

Grafana

інструмент панелей для метрик і журналів

Що це таке

Grafana перетворює числа, що зберігаються в інших системах, на дашборди. Вона надсилає запит до джерела даних — Prometheus, Loki, PostgreSQL чи MySQL, — малює відповідь як графік часового ряду, таблицю, шкалу чи теплову карту і надсилає сповіщення, коли значення перетинає поріг, який хтось задав. Власна документація описує Grafana як засіб, що дає змогу робити запити, візуалізувати, сповіщати й досліджувати метрики, журнали й трасування, хоч би де вони зберігалися, і саме на цих останніх словах тримається весь її задум.

Те, що видно на екрані, лишається там, де його зібрали. Кожна панель забирає свій зріз із джерела даних, коли дашборд завантажується чи оновлюється, через один із понад 150 плагінів джерел даних, а сама Grafana зберігає лише власну конфігурацію: дашборди, теки, користувачів, права доступу й правила сповіщень. Усе це лежить у невеликій базі даних. За замовчуванням це SQLite, вбудована в сам виконуваний файл, а для продакшну рекомендують MySQL або PostgreSQL. Кожен дашборд є JSON-документом: панелі, розкладені рядами, де кожна панель — це запит плюс спосіб його показати, і змінні вгорі, що дають одному дашборду перемикатися між хостами, середовищами чи сервісами зі спадного списку.

Grafana розробляє компанія Grafana Labs, а поряд із нею — Loki для журналів, Tempo для трасувань і Mimir для довгого зберігання даних Prometheus; цей набір часто називають стеком Grafana. 20 квітня 2021 року Grafana, Loki і Tempo перейшли з ліцензії Apache 2.0 на AGPLv3. Grafana існує як версія з відкритим кодом, як Grafana Enterprise за комерційною ліцензією і як Grafana Cloud, яку розміщує й обслуговує сама Grafana Labs.

Її зазвичай порівнюють із Kibana, що відіграє ту саму роль перед Elasticsearch, із вбудованим у Prometheus переглядачем виразів і з хмарними observability-сервісами, які продають зберігання й екрани як один продукт. BI-інструменти на кшталт Metabase чи Power BI можуть читати ті самі бази даних, але вони створені для звітів, які людина уважно вивчає, а Grafana — для екранів, що оновлюються кожні кілька секунд.

Чому це важливо

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

Оскільки Grafana лише показує, її впровадження не переносить даних. Команда може залишити Prometheus, PostgreSQL і своє сховище журналів там, де вони є, і згодом замінити шар відображення, не мігруючи жодного ряду, тож і прив’язка до постачальника, і рахунок лишаються на боці джерел даних. Сервіси, що продають зберігання й відображення разом, пропонують зворотний обмін: один рахунок і один вхід, а дані важче забрати деінде.

Аудиторія формує дашборд сильніше, ніж інструмент. Інженерові на чергуванні потрібна сторінка, що з першого погляду відповідає на питання «чи щось зламалося і де», з посиланнями на подробиці. Кімнаті людей із різними обов’язками потрібно менше панелей, але більших, прості заголовки й порогова лінія, яка підказує, коли час хвилюватися. Та сама Grafana обслуговує обидві аудиторії різними дашбордами, а сторінка, зроблена для обох одразу, зазвичай не влаштовує жодну.

Як зберігати дашборди — друге рішення. Grafana вміє завантажувати їх із JSON-файлів на диску й стежити за змінами в теці; документація називає це provisioning. У системі контролю версій дашборд отримує рев’ю, історію і шлях назад, а нове середовище отримує ті самі екрани без того, щоб хтось збирав їх кліками. Ціна в тому, що редагування в браузері перестає бути способом вносити зміни, і з цим має погодитися вся команда.

Ліцензія й розміщення — наостанок. За AGPLv3 той, хто змінює Grafana і дає іншим користуватися зміненою версією через мережу, мусить запропонувати їм її вихідний код. Команда, що запускає незмінену Grafana для власних працівників, перебуває зовсім в іншому становищі, ніж постачальник, який вбудовує доопрацьовану версію у свій продукт, і такому постачальникові варто прочитати ліцензію разом із юристом. Самостійне розміщення — це один виконуваний файл, доки не знадобиться другий інстанс. Відтоді інстанси ділять спільну базу MySQL чи PostgreSQL, а Grafana Cloud — спосіб передати цю роботу Grafana Labs.

Як це виглядає на практиці

Обидва рази, коли Grafana з’являється в роботі компанії, вона — та частина, на яку дивилися люди, а за нею стоїть Prometheus.

У 2022–2024 роках, на інфраструктурній посаді, вихідною точкою була команда, яка помічала проблеми вже після того, як вони зачіпали користувачів, бо єдиного огляду стану систем не існувало. Дашборд моніторингу на Grafana і Prometheus дав такий огляд. Ключові сервіси інструментували, метрики обирали за те, що вони щось означають, а не за те, що виглядають зайнятими, а порогові значення сповіщень налаштували на цих метриках і вивели туди, де команда справді їх бачила, поки ще був час діяти. Проблеми почали виловлювати до того, як вони розросталися, надійність зросла, а команда перейшла від гасіння пожеж до роботи на випередження.

Другий випадок будували для змішаної аудиторії. Дашборд на великому телевізорі в офісі призначався і для технічних, і для нетехнічних колег. Його друга версія, на Grafana і Prometheus, показувала метрики, обрані разом із командами DevOps та розробки; їх подавали пайплайни даних, що збирали показники продуктивності з кількох систем, а в разі перевищення порогу надходили сповіщення. Команди почали виявляти й усувати інциденти на 40% швидше, а з числами перед очима всього офісу стан систем став спільною відповідальністю.

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

Де виникають проблеми

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

Виправлення, зроблене в браузері, зникає. Дашборд надходить із файлу через provisioning. Коли allowUiUpdates має значення за замовчуванням false, Grafana відмовляється зберігати й показує діалог «Cannot save provisioned dashboard». Якщо ж там true, Grafana зберігає зміну у своїй базі, а потім перезаписує її вмістом файлу, щойно той зміниться. Редагуйте файл або експортуйте JSON із діалогу збереження й додайте його в репозиторій, а налаштування провайдера пропишіть явно:

apiVersion: 1
providers:
    - name: operations
      type: file
      allowUiUpdates: false
      options:
          path: /var/lib/grafana/dashboards

Настінний екран сповільнює систему, за якою стежить. Кожен відкритий браузер, телевізор теж, заново виконує запит кожної панелі під час кожного оновлення, а п’ять секунд — найкоротший інтервал оновлення, який Grafana дозволяє за замовчуванням. Двадцять панелей із п’ятисекундним оновленням — це чотири запити на секунду від одного екрана. Оновлюйте в темпі, в якому змінюються дані (для Prometheus це інтервал опитування або довше), підніміть мінімум для всіх і заздалегідь обчислюйте важкі вирази правилами запису (recording rules) у джерелі даних:

[dashboards]
min_refresh_interval = 30s

Той самий інцидент піднімає людей двічі. Правило живе в Prometheus і йде через Alertmanager, а ще раз — у Grafana Alerting. Або два інстанси Grafana кожен окремо обчислюють усі правила, бо про сповіщення забули, коли додавали другий. Дайте кожному правилу одне місце й пройдіть кроки Grafana з високої доступності для сповіщень, перш ніж другий інстанс запрацює.

Дашборди й користувачі змінюються залежно від того, який сервер відповів. Два інстанси Grafana за балансувальником навантаження мають кожен свій файл SQLite, тож дашборд, збережений на одному, відсутній на другому, а користувач існує лише на одному з них. Власна інструкція Grafana робить спільну базу MySQL чи PostgreSQL обов’язковою умовою високої доступності.

Що почитати далі

  • About Grafana — власний огляд проєкту: що робить Grafana, які в неї редакції і які проєкти з відкритим кодом її оточують.
  • Data sources — системи, до яких Grafana може робити запити, і як кожну з них додати та налаштувати.
  • Dashboards — панелі, ряди, змінні та JSON-модель, у якій зберігається дашборд.
  • Provision Grafana — джерела даних і дашборди з файлів і що стається зі змінами, зробленими в браузері.
  • Set up Grafana for high availability — спільна база даних, потрібна другому інстансу, і додаткові кроки для сповіщень.
  • Licensing — сторінка Grafana Labs про перехід з Apache 2.0 на AGPLv3 у 2021 році.

Словник