Представьте, что вы следите за огромным рестораном, где у каждой кухни своё меню, своя посуда, свои заказы. Вы хотите знать всё — кто и сколько заказал, кто быстрее выполняет заказы, где произошли задержки. Prometheus — это как официант, который бегает по всем кухням, собирает всю информацию, обрабатывает её и приносит вам на красивом подносе.
Prometheus — это система мониторинга и сбора метрик с открытым исходным кодом. Она была разработана в SoundCloud и стала одной из самых популярных систем для мониторинга и алертинга микросервисов. Prometheus помогает нам собирать, хранить и анализировать метрики, а затем использовать их для мониторинга производительности, выявления узких мест и предотвращения проблем.
Основные характеристики Prometheus
Prometheus создавался с учетом современных требований к мониторингу. Вот его основные «фишки»:
- Модель pull — Prometheus активно запрашивает метрики с приложений или сервисов. Это дает больше контроля, чем пассивная модель push.
- Язык запросов PromQL — для обработки и анализа метрик. С помощью PromQL можно писать сложные запросы и делать агрегированные вычисления.
- Хранение данных — Prometheus сам хранит данные временных рядов (time series) и организует их в своей базе данных.
- Экспортёр метрик — 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 и другие. Вы даже можете найти экспортёр для мониторинга любимой кофеварки (да, они существуют).
- Подходит для микросервисов — особенно когда сервисы часто меняются или появляются новые.
Примеры сценариев использования
- Вы хотите знать, сколько запросов ваш REST API обрабатывает каждую минуту.
- Требуется мониторить использование памяти или процессора в реальном времени.
- Нужно проверять время ответа микросервисов и выявлять узкие места до того, как пользователи начнут жаловаться.
Основные концепции работы 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, чтобы превращать сухие цифры в красивые дашборды.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ