🔥 Как настроить Prometheus и Grafana для мониторинга
Prometheus + Grafana — индустриальный стандарт для мониторинга и визуализации метрик. Time-series база данных, pull-based сбор метрик, powerful query язык (PromQL), оповещения.
Мониторинг JVM, HTTP requests, кастомных метрик, cache hit rates в реальном времени с историей и алертами.
1️⃣ Добавляем зависимости
Для экспорта метрик в Prometheus нужны spring-boot-starter-actuator и micrometer-registry-prometheus. Micrometer автоматически собирает JVM и application метрики.
Критически важно включить prometheus endpoint через management.endpoints.web.exposure.include=prometheus в application.yml. Без этого /actuator/prometheus не будет доступен.
2️⃣ Устанавливаем и настраиваем Prometheus
Скачайте Prometheus или запустите через Docker. Создайте prometheus.yml конфиг файл с определением targets для scraping.
Добавьте job для вашего приложения: job_name: 'spring-boot-app', targets: ['localhost:8080']. Укажите metrics_path: '/actuator/prometheus' и scrape_interval: 15s. Prometheus начнёт периодически собирать метрики.
3️⃣ Настраиваем кастомные метрики
Inject MeterRegistry в сервисы для регистрации метрик. Используйте Counter для монотонно растущих значений: registry.counter("orders.created", "region", "EU").increment().
Для текущих значений используйте Gauge: registry.gauge("queue.size", queue, Queue::size). Для измерения времени операций используйте Timer с tags для группировки: Timer.builder("api.request.duration").tags("endpoint", "/users").register(registry).
4️⃣ Устанавливаем и подключаем Grafana
Установите Grafana или запустите через Docker. При первом входе (admin/admin) добавьте Prometheus как data source через Configuration → Data Sources.
Укажите URL Prometheus (https://localhost:9090), настройте scrape interval. Grafana автоматически проверит подключение через Test кнопку. После успешного подключения можно создавать дашборды.
5️⃣ Создаём дашборды в Grafana
Импортируйте готовый дашборд для Spring Boot: используйте ID 4701 или 6756 из Grafana Marketplace. Они содержат панели для JVM memory, GC, HTTP metrics, database pool.
Создайте кастомные панели для бизнес метрик. Используйте PromQL для запросов: rate(http_server_requests_seconds_count[5m]) для requests per second, sum by (status)(http_server_requests_seconds_count) для группировки по HTTP статусам.
6️⃣ Настраиваем алерты
В Grafana создайте alert rules через Alerting → Alert rules. Определите условия: например, high error rate — rate(http_server_requests_seconds_count{status="500"}[5m]) > 10.
Настройте каналы оповещения (Slack, email, PagerDuty, webhook) для получения алертов. Укажите threshold values, evaluation interval и for duration (как долго условие должно быть true перед отправкой алерта).
7️⃣ Best practices и оптимизация
▪️ Используйте tags (labels) для всех метрик — это позволяет фильтровать и группировать
▪️ Не создавайте метрики с high cardinality tags (например, user_id) — это убьёт Prometheus
▪️ Настройте retention policy в Prometheus для баланса между историей и хранилищем
▪️ Используйте recording rules в Prometheus для предагрегации часто используемых запросы
▪️ Используйте @Timed(percentiles = {0.5, 0.95, 0.99}) для SLA трекинга
✔️ Что происходит под капотом
Micrometer собирает метрики во время работы приложения: подсчитывает request rate, измеряет latency, собирает JVM статистику. Метрики хранятся в памяти в формате Prometheus.
Prometheus периодически делает HTTP GET запрос к /actuator/prometheus, получает все метрики в текстовом формате. Сохраняет их в time-series БД с timestamp. Grafana запрашивает данные у Prometheus через PromQL, строит графики и проверяет условия алёртов.
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека джависта
#Enterprise
Prometheus + Grafana — индустриальный стандарт для мониторинга и визуализации метрик. Time-series база данных, pull-based сбор метрик, powerful query язык (PromQL), оповещения.
Мониторинг JVM, HTTP requests, кастомных метрик, cache hit rates в реальном времени с историей и алертами.
Для экспорта метрик в Prometheus нужны spring-boot-starter-actuator и micrometer-registry-prometheus. Micrometer автоматически собирает JVM и application метрики.
Критически важно включить prometheus endpoint через management.endpoints.web.exposure.include=prometheus в application.yml. Без этого /actuator/prometheus не будет доступен.
Скачайте Prometheus или запустите через Docker. Создайте prometheus.yml конфиг файл с определением targets для scraping.
Добавьте job для вашего приложения: job_name: 'spring-boot-app', targets: ['localhost:8080']. Укажите metrics_path: '/actuator/prometheus' и scrape_interval: 15s. Prometheus начнёт периодически собирать метрики.
Inject MeterRegistry в сервисы для регистрации метрик. Используйте Counter для монотонно растущих значений: registry.counter("orders.created", "region", "EU").increment().
Для текущих значений используйте Gauge: registry.gauge("queue.size", queue, Queue::size). Для измерения времени операций используйте Timer с tags для группировки: Timer.builder("api.request.duration").tags("endpoint", "/users").register(registry).
Установите Grafana или запустите через Docker. При первом входе (admin/admin) добавьте Prometheus как data source через Configuration → Data Sources.
Укажите URL Prometheus (https://localhost:9090), настройте scrape interval. Grafana автоматически проверит подключение через Test кнопку. После успешного подключения можно создавать дашборды.
Импортируйте готовый дашборд для Spring Boot: используйте ID 4701 или 6756 из Grafana Marketplace. Они содержат панели для JVM memory, GC, HTTP metrics, database pool.
Создайте кастомные панели для бизнес метрик. Используйте PromQL для запросов: rate(http_server_requests_seconds_count[5m]) для requests per second, sum by (status)(http_server_requests_seconds_count) для группировки по HTTP статусам.
В Grafana создайте alert rules через Alerting → Alert rules. Определите условия: например, high error rate — rate(http_server_requests_seconds_count{status="500"}[5m]) > 10.
Настройте каналы оповещения (Slack, email, PagerDuty, webhook) для получения алертов. Укажите threshold values, evaluation interval и for duration (как долго условие должно быть true перед отправкой алерта).
▪️ Используйте tags (labels) для всех метрик — это позволяет фильтровать и группировать
▪️ Не создавайте метрики с high cardinality tags (например, user_id) — это убьёт Prometheus
▪️ Настройте retention policy в Prometheus для баланса между историей и хранилищем
▪️ Используйте recording rules в Prometheus для предагрегации часто используемых запросы
▪️ Используйте @Timed(percentiles = {0.5, 0.95, 0.99}) для SLA трекинга
Micrometer собирает метрики во время работы приложения: подсчитывает request rate, измеряет latency, собирает JVM статистику. Метрики хранятся в памяти в формате Prometheus.
Prometheus периодически делает HTTP GET запрос к /actuator/prometheus, получает все метрики в текстовом формате. Сохраняет их в time-series БД с timestamp. Grafana запрашивает данные у Prometheus через PromQL, строит графики и проверяет условия алёртов.
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁29👏5❤1👍1💯1
Если стандартных возможностей IDE для контроля покрытия тестами уже недостаточно, стоит обратить внимание на JaCoCo. Этот инструмент выходит за рамки базового функционала.
В отличие от встроенных средств IntelliJ IDEA, которые отлично справляются с локальной разработкой, JaCoCo предлагает комплексный подход к анализу покрытия:
JaCoCo идеален для проектов, где важна прозрачность метрик тестирования и автоматизация проверок качества кода на всех этапах разработки.
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3❤1
Дебажишь сложную бизнес-логику? Остановился на breakpoint, видишь 15 переменных в Variables, но нужно проверить результат user.getOrders().stream().filter(o -> o.getStatus() == PAID).count().
Обычный путь: добавить переменную, пересобрать, перезапустить дебаг. Или лезть в Watch и там собирать выражение.
А IDEA позволяет выполнять произвольный Java-код прямо в точке остановки — с полным доступом к контексту.
🔹 Что делает
— Выполняет любой Java-код в текущей области видимости (методы объектов, статика, создание новых объектов)
— Видит все локальные переменные, поля класса, this, параметры метода
— Поддерживает многострочные выражения с промежуточными переменными
— Работает с лямбдами, стримами, рефлексией — любой валидный Java
— Code Completion работает как в обычном редакторе
— Результат можно раскрыть, посмотреть поля, добавить в Watches
🔹 Зачем это нужно
— Проверить гипотезу без изменения кода (а что если отфильтровать по другому полю?)
— Вызвать приватный метод или геттер для отладки
— Протестировать фикс: user.setStatus(ACTIVE); service.process(user) — сработает?
— Посмотреть сложную агрегацию: items.stream().collect(groupingBy(...))
🔹 Как использовать
— Поставить breakpoint, дождаться остановки
— Alt+F8 (Cmd+F8 на Mac) или ПКМ → Evaluate Expression
— Написать код, Enter — видишь результат
— Для многострочного: Code Fragment Mode (переключатель в диалоге)
— Можно выделить код прямо в редакторе и нажать Alt+F8 — он подставится автоматически
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍4❤1
Forwarded from Библиотека задач по Java | тесты, код, задания
Почему при стресс тесте и высокой нагрузке может быть выброшено NPE?
Anonymous Quiz
26%
Из-за race condition - оба потока читают одно и то же
30%
Из-за instruction reordering - процессор может переставить строки 1 и 2
10%
Из-за garbage collection в неудачный момент
18%
Это невозможно - если deploymentReady true, то config уже инициализирован
16%
Посмотреть ответ
🤔5👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁20🔥2👍1