JavaRush /Курси /Модуль 5. Spring /Лекція 257: Введення в Prometheus для моніторингу метрик

Лекція 257: Введення в Prometheus для моніторингу метрик

Модуль 5. Spring
Рівень 20 , Лекція 6
Відкрита

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

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


Основні характеристики Prometheus

Prometheus створювався з урахуванням сучасних вимог до моніторингу. Ось його основні «фішки»:

  1. Модель pull — Prometheus активно запитує метрики з додатків або сервісів. Це дає більше контролю, ніж пасивна модель push.
  2. Мова запитів PromQL — для обробки і аналізу метрик. За допомогою PromQL можна писати складні запити і робити агреговані обчислення.
  3. Зберігання даних — Prometheus сам зберігає дані часових рядів (time series) і організовує їх у своїй базі даних.
  4. Exporter метрик — Prometheus дозволяє легко додавати нові метрики для моніторингу застосунків, системних сервісів або заліза.
  5. Інтеграція з візуальними інструментами — наприклад, Grafana для створення красивих дашбордів.

Анекдот для розрядки: "чому Prometheus не любить push-модель? Тому що додаток може подумати: 'Ой, я щось не встиг!'"


Архітектура Prometheus

Prometheus базується на простій і інтуїтивно зрозумілій архітектурі:


┌───────────┐   ┌───────────────┐
│   Target  │   │   Exporter    │
└───────────┘   └───────────────┘
       ▲                 ▲
       │ Pull Metrics    │
       │                 │
       ▼                 ▼
┌───────────────────────────┐
│       Prometheus Server   │
│ ┌───────────────────────┐ │
│ │Time Series Database   │ │
│ │(TSDB)                 │ │
│ └───────────────────────┘ │
└───────────────────────────┘
        │
        │ Query Data
        ▼
┌─────────────────────────┐
│     Visualization Tool  │
│   (e.g., Grafana)       │
└─────────────────────────┘
  1. Target (Цільова система) — це ваші застосунки, до яких Prometheus звертається по HTTP за метриками.
  2. Exporter (Експортер) — застосунок, який перетворює метрики в формат, зрозумілий Prometheus. Наприклад, node_exporter для отримання системних метрик сервера.
  3. Prometheus Server — найважливіший компонент, який збирає метрики, зберігає їх і надає API для запитів.
  4. Visualization Tool — інструменти для візуалізації даних. Сам Prometheus має базовий веб-інтерфейс, але частіше використовується Grafana.

Чому Prometheus такий популярний?

Prometheus здобув популярність завдяки своїй простоті і потужності. Ось кілька причин, чому його обирають:

  1. Open Source — жодної плати за використання.
  2. Гнучкість — кастомізація метрик під будь-які потреби.
  3. Спільнота і плагіни — для Prometheus створено багато інтеграцій, включно зі Spring Boot, Docker, Kubernetes та іншими. Ви навіть можете знайти Exporter для моніторингу улюбленої кавоварки (так, вони існують).
  4. Підходить для мікросервісів — особливо коли сервіси часто змінюються або з'являються нові.

Приклади сценаріїв використання

  • Ви хочете знати, скільки запитів ваш REST API обробляє щохвилини.
  • Потрібно моніторити використання пам'яті або CPU в реальному часі.
  • Потрібно перевіряти час відповіді мікросервісів і виявляти вузькі місця до того, як користувачі почнуть скаржитися.

Основні концепції роботи Prometheus

Перед тим як перейти до практики, давайте розберемося з ключовими поняттями Prometheus:

  1. Метрики (Metrics) — дані, які збираються і аналізуються. Наприклад, "кількість активних підключень" або "час обробки запиту".
  2. Часові ряди (Time Series) — послідовні записи значень метрик за певний період часу.
  3. Labels (Мітки) — додаткові дані про метрики. Наприклад, "мітка" для кожного мікросервісу.
  4. Exporters (Експортери) — програми, які готують дані для Prometheus.

Практичне завдання: Встановлення і налаштування Prometheus

Підготовка оточення

  1. Переконайтеся, що Docker встановлено (якщо ні — саме час це виправити).
  2. Скачайте образ Prometheus з Docker Hub:
    docker pull prom/prometheus
    
  3. Запустіть Prometheus:
    docker run -d -p 9090:9090 --name=prometheus prom/prometheus
    
  4. Відкрийте браузер і перейдіть за адресою http://localhost:9090. Вітаю, Prometheus працює!


Інтеграція Spring Boot з Prometheus

Тепер підключимо наші мікросервіси до Prometheus! Для цього налаштуємо Spring Boot Actuator, який вже включає метрики.

  1. Додайте залежності в 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>
    
  2. Налаштуйте application.yml:
    management:
      endpoints:
        web:
          exposure:
            include: "*"
      metrics:
        export:
          prometheus:
            enabled: true
    
  3. Запустіть свій застосунок Spring Boot. Перейдіть за адресою http://localhost:8080/actuator/prometheus. Ви побачите купу метрик!


Налаштування Prometheus для збору метрик Spring Boot

  1. Створіть файл конфігурації 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.
  2. Перезапустіть 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
    
  3. Перейдіть у Prometheus UI і виконайте запит:
    http_server_requests_seconds_sum
    

    Ви побачите метрики вашого застосунку!


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

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ