Ми вже познайомилися з концепцією Observability і тим, як вона впливає на підтримку та працездатність мікросервісів. Ми дізналися про розподілену трасування за допомогою Zipkin, налаштували Sleuth для автоматичного додавання ідентифікаторів трасування і перевірили, як запити перетинають межі мікросервісів. Крім того, ми вивчили ELK-стек для централізованого логування і почали інтеграцію Prometheus для збору метрик. Тепер настав час "десерту" — візуалізації всіх зібраних даних за допомогою Grafana. Бо ж ніяка Observability не буде повною без красивих графіків!
Чому Grafana?
Ми вже трохи розбиралися з Grafana, але настав час освіжити знання про цю платформу і навчитися працювати з нею в контексті мікросервісної архітектури.
Уявіть, що ви зібрали всі метрики і логи зі своїх мікросервісів. Вони акуратно лежать у базі даних, в Prometheus або Elasticsearch. І от ви сідаєте аналізувати... через командний рядок.
Як би ви не любили консоль, аналіз тисяч рядків тексту — це не найцікавіше заняття. Grafana рятує нас, надаючи потужні інструменти для візуалізації даних. Це як Maps для даних: замість нудних координат на папері — яскраві мапи з маршрутом.
Особливості Grafana:
- Підключення до безлічі джерел даних: Prometheus, Elasticsearch, MySQL і навіть Google Sheets.
- Гнучкість дашбордів: ви самі вирішуєте, як і що відображати.
- Потужні метрики: діаграми, гістограми, таблиці.
- Налаштовувані алерти: отримуйте сповіщення про проблеми раніше, ніж вони стануть критичними.
- Підтримка плагінів і кастомних візуалізацій.
Встановлення Grafana
Grafana доступна у вигляді пакетів, Docker-образів і навіть хмарних рішень. Але ми підемо шляхом "справжнього розробника" і зробимо встановлення через Docker, бо це швидко і просто.
Запускаємо Grafana з Docker
Переконайтеся, що Docker встановлений на вашій машині. Потім виконайте наступну команду:
docker run -d -p 3000:3000 --name=grafana grafana/grafana
-dзапускає контейнер у фоновому режимі.-p 3000:3000перенаправляє порт 3000 хост-машини на порт 3000 контейнера.- Контейнер готовий! Grafana тепер доступна в браузері за адресою
http://localhost:3000.
Вхід в Grafana
Відкрийте браузер і перейдіть на http://localhost:3000. За замовчуванням логін і пароль:
- Логін:
admin - Пароль:
admin
Під час першого входу Grafana попросить вас змінити пароль. Будь ласка, змініть його, щоб не забути, що тут зібралися справжні професіонали.
Інтеграція Grafana з Prometheus
Ми налаштували Prometheus раніше, щоб отримувати метрики зі Spring Boot через Actuator. Тепер наше завдання — підключити Prometheus як джерело даних у Grafana.
Крок 1: Додаємо джерело даних
- Зайдіть у Grafana.
- Перейдіть у меню (іконка "шестерні" ліворуч) → Data Sources → Add data source.
- У списку джерел знайдіть Prometheus.
- Вкажіть URL вашого Prometheus сервера (зазвичай це
http://localhost:9090). - Натисніть Save & Test. Якщо все налаштовано правильно, ви побачите повідомлення "Data source is working".
Крок 2: Створення першого дашборду
Тепер настав час додати трохи магії візуалізації:
- Перейдіть у головне меню і оберіть Dashboard → New Dashboard.
- Натисніть Add new panel.
- У вікні, що відкрилось, оберіть метрику, яку хочете візуалізувати. Наприклад, почнемо з
http_server_requests_seconds_count(кількість запитів у вашому Spring Boot додатку). - Оберіть тип графіка (наприклад, "Time series" для метрик, що відображають зміну в часі).
- Налаштуйте параметри відображення і збережіть зміни.
Реалізація красивих графіків
Розповімо більше деталей про те, як можна максимально ефективно використовувати Grafana!
Типи візуалізацій
Grafana пропонує безліч типів графіків:
- Time series: графіки змін метрик у часі.
- Table: таблиці для представлення даних у табличному форматі.
- Gauge (шкали): візуалізація числових показників, наприклад, "завантаження CPU у відсотках".
- Heatmap: теплокарти для відображення щільності подій.
Приклад: моніторинг HTTP-запитів
- Зайдіть у ваш дашборд.
- Додайте новий графік.
- У полі Query виберіть запит до Prometheus:
Це покаже кількість HTTP-запитів за останні 5 хвилин, згрупованих за статусами (наприклад, 200, 404).
sum(rate(http_server_requests_seconds_count[5m])) by (status) - Оберіть тип візуалізації "Bar chart".
- Збережіть панель. Voilà! Тепер у вас є графік розподілу HTTP-запитів.
Алерти в Grafana
Не тільки візуалізація, але й алерти — це ключова частина моніторингу. Grafana може надсилати повідомлення в Slack, Email, Telegram та інші системи сповіщень.
Приклад: сповіщення про пік запитів
Припустимо, ви хочете налаштувати алерт, якщо кількість запитів перевищує 100 за останні 5 хвилин.
- Відкрийте панель, яку ви створили для моніторингу HTTP-запитів.
- Натисніть "Edit" панелі → вкладка Alert → Create Alert.
- Налаштуйте параметри умови. Наприклад:
- Вираз:
sum(rate(http_server_requests_seconds_count[5m])) > 100 - Інтервал перевірки: кожну 1 хвилину.
- Вираз:
- Вкажіть канал сповіщення. Наприклад, Slack:
- Перейдіть у Contact Points в налаштуваннях Grafana.
- Додайте новий контакт, обравши Slack і надавши Webhook URL.
Дашборди для мікросервісів
Давайте подумаємо, а що ще нам потрібно моніторити в мікросервісах? Ось кілька ідей, які можуть надихнути вас:
- HTTP помилки: percentage запитів з кодами 4xx і 5xx (
count(status_code >= 400)/count(all_requests)). - Завантаження CPU і пам'яті: використовуйте метрики JVM, які надає Spring Boot Actuator.
- Дані про латентність (затримки): середній час виконання запитів (
avg(http_server_requests_seconds_sum / http_server_requests_seconds_count)).
Інтеграція з іншими джерелами даних
Grafana — це не тільки Prometheus. Ви можете підключити додаткові джерела, щоб створити єдиний дашборд:
- Elasticsearch: для відображення логів.
- MySQL/Postgres: для прямого запиту і візуалізації даних з БД.
- Google Analytics: якщо вам потрібні дані про користувацький трафік.
Використовуючи всі ці можливості, ви можете створити потужний інструмент наблюдаємості для своїх мікросервісів.
Питання, які часто виникають
1. Чи можна налаштувати Grafana в production? Так, Grafana активно використовується в production-середовищах. Потрібно забезпечити безпеку доступу (наприклад, задати складний логін/пароль) і використовувати SSL (можна налаштувати через зворотний проксі, наприклад, Nginx).
2. Grafana гальмує при великій кількості запитів, що робити? Обмежте частоту запитів. Використовуйте агрегації в Prometheus, щоб зменшити обсяг даних, який передається Grafana.
3. Коли варто використовувати алерти? Алерти потрібно налаштовувати тільки для критичних метрик. Надто багато сповіщень зробить алерти марними.
Отже, ми познайомилися з Grafana — інструментом, який перетворює нудні цифри на гарні візуалізації. Тепер ваш моніторинг не тільки корисний, але й тішить око!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ