Уявіть, що ви стежите за величезним рестораном, де в кожної кухні своє меню, своя посуд, свої замовлення. Ви хочете знати все — хто і скільки замовив, хто швидше виконує замовлення, де сталися затримки. Prometheus — це як офіціант, який бігає по всіх кухнях, збирає всю інформацію, обробляє її і приносить вам на гарному підносі.
Prometheus — це система моніторингу і збору метрик з відкритим кодом. Вона була розроблена в SoundCloud і стала однією з найпопулярніших систем для моніторингу і alerting мікросервісів. Prometheus допомагає нам збирати, зберігати і аналізувати метрики, а потім використовувати їх для моніторингу продуктивності, виявлення вузьких місць і запобігання проблем.
Основні характеристики Prometheus
Prometheus створювався з урахуванням сучасних вимог до моніторингу. Ось його основні «фішки»:
- Модель pull — Prometheus активно запитує метрики з додатків або сервісів. Це дає більше контролю, ніж пасивна модель push.
- Мова запитів PromQL — для обробки і аналізу метрик. За допомогою PromQL можна писати складні запити і робити агреговані обчислення.
- Зберігання даних — Prometheus сам зберігає дані часових рядів (time series) і організовує їх у своїй базі даних.
- Exporter метрик — Prometheus дозволяє легко додавати нові метрики для моніторингу застосунків, системних сервісів або заліза.
- Інтеграція з візуальними інструментами — наприклад, Grafana для створення красивих дашбордів.
Анекдот для розрядки: "чому Prometheus не любить push-модель? Тому що додаток може подумати: 'Ой, я щось не встиг!'"
Архітектура Prometheus
Prometheus базується на простій і інтуїтивно зрозумілій архітектурі:
┌───────────┐ ┌───────────────┐
│ Target │ │ Exporter │
└───────────┘ └───────────────┘
▲ ▲
│ Pull Metrics │
│ │
▼ ▼
┌───────────────────────────┐
│ Prometheus Server │
│ ┌───────────────────────┐ │
│ │Time Series Database │ │
│ │(TSDB) │ │
│ └───────────────────────┘ │
└───────────────────────────┘
│
│ Query Data
▼
┌─────────────────────────┐
│ Visualization Tool │
│ (e.g., Grafana) │
└─────────────────────────┘
- Target (Цільова система) — це ваші застосунки, до яких Prometheus звертається по HTTP за метриками.
- Exporter (Експортер) — застосунок, який перетворює метрики в формат, зрозумілий Prometheus. Наприклад,
node_exporterдля отримання системних метрик сервера. - Prometheus Server — найважливіший компонент, який збирає метрики, зберігає їх і надає API для запитів.
- Visualization Tool — інструменти для візуалізації даних. Сам Prometheus має базовий веб-інтерфейс, але частіше використовується Grafana.
Чому Prometheus такий популярний?
Prometheus здобув популярність завдяки своїй простоті і потужності. Ось кілька причин, чому його обирають:
- Open Source — жодної плати за використання.
- Гнучкість — кастомізація метрик під будь-які потреби.
- Спільнота і плагіни — для Prometheus створено багато інтеграцій, включно зі Spring Boot, Docker, Kubernetes та іншими. Ви навіть можете знайти Exporter для моніторингу улюбленої кавоварки (так, вони існують).
- Підходить для мікросервісів — особливо коли сервіси часто змінюються або з'являються нові.
Приклади сценаріїв використання
- Ви хочете знати, скільки запитів ваш REST API обробляє щохвилини.
- Потрібно моніторити використання пам'яті або CPU в реальному часі.
- Потрібно перевіряти час відповіді мікросервісів і виявляти вузькі місця до того, як користувачі почнуть скаржитися.
Основні концепції роботи Prometheus
Перед тим як перейти до практики, давайте розберемося з ключовими поняттями Prometheus:
- Метрики (Metrics) — дані, які збираються і аналізуються. Наприклад, "кількість активних підключень" або "час обробки запиту".
- Часові ряди (Time Series) — послідовні записи значень метрик за певний період часу.
- Labels (Мітки) — додаткові дані про метрики. Наприклад, "мітка" для кожного мікросервісу.
- Exporters (Експортери) — програми, які готують дані для Prometheus.
Практичне завдання: Встановлення і налаштування Prometheus
Підготовка оточення
- Переконайтеся, що Docker встановлено (якщо ні — саме час це виправити).
- Скачайте образ Prometheus з Docker Hub:
docker pull prom/prometheus - Запустіть Prometheus:
docker run -d -p 9090:9090 --name=prometheus prom/prometheus Відкрийте браузер і перейдіть за адресою http://localhost:9090. Вітаю, Prometheus працює!
Інтеграція Spring Boot з Prometheus
Тепер підключимо наші мікросервіси до Prometheus! Для цього налаштуємо Spring Boot Actuator, який вже включає метрики.
- Додайте залежності в
pom.xml:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> - Налаштуйте
application.yml:management: endpoints: web: exposure: include: "*" metrics: export: prometheus: enabled: true Запустіть свій застосунок Spring Boot. Перейдіть за адресою
http://localhost:8080/actuator/prometheus. Ви побачите купу метрик!
Налаштування Prometheus для збору метрик Spring Boot
- Створіть файл конфігурації
prometheus.yml:Будьте уважні з адресоюglobal: scrape_interval: 15s scrape_configs: - job_name: "spring-boot-app" static_configs: - targets: ["host.docker.internal:8080"]host.docker.internal— це працює для Docker на Windows і macOS. На Linux використовуйтеlocalhost. - Перезапустіть Prometheus:
docker stop prometheus docker rm prometheus docker run -d -p 9090:9090 \ -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \ --name=prometheus prom/prometheus - Перейдіть у Prometheus UI і виконайте запит:
http_server_requests_seconds_sumВи побачите метрики вашого застосунку!
У наступній лекції ми розберемо, як доповнювати моніторинг метрик візуалізацією за допомогою Grafana, щоб перетворювати сухі цифри в гарні дашборди.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ