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

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

Модуль 5. Spring
26 уровень , 6 лекция
Открыта

Представьте, что вы следите за огромным рестораном, где у каждой кухни своё меню, своя посуда, свои заказы. Вы хотите знать всё — кто и сколько заказал, кто быстрее выполняет заказы, где произошли задержки. Prometheus — это как официант, который бегает по всем кухням, собирает всю информацию, обрабатывает её и приносит вам на красивом подносе.

Prometheus — это система мониторинга и сбора метрик с открытым исходным кодом. Она была разработана в SoundCloud и стала одной из самых популярных систем для мониторинга и алертинга микросервисов. Prometheus помогает нам собирать, хранить и анализировать метрики, а затем использовать их для мониторинга производительности, выявления узких мест и предотвращения проблем.


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

Prometheus создавался с учетом современных требований к мониторингу. Вот его основные «фишки»:

  1. Модель pull — Prometheus активно запрашивает метрики с приложений или сервисов. Это дает больше контроля, чем пассивная модель push.
  2. Язык запросов PromQL — для обработки и анализа метрик. С помощью PromQL можно писать сложные запросы и делать агрегированные вычисления.
  3. Хранение данных — Prometheus сам хранит данные временных рядов (time series) и организует их в своей базе данных.
  4. Экспортёр метрик — 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 и другие. Вы даже можете найти экспортёр для мониторинга любимой кофеварки (да, они существуют).
  4. Подходит для микросервисов — особенно когда сервисы часто меняются или появляются новые.

Примеры сценариев использования

  • Вы хотите знать, сколько запросов ваш REST API обрабатывает каждую минуту.
  • Требуется мониторить использование памяти или процессора в реальном времени.
  • Нужно проверять время ответа микросервисов и выявлять узкие места до того, как пользователи начнут жаловаться.

Основные концепции работы 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, чтобы превращать сухие цифры в красивые дашборды.

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ