Библиотека джависта | Java, Spring, Maven, Hibernate
23.3K subscribers
2.22K photos
46 videos
45 files
3.15K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://t.iss.one/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Download Telegram
🔥 Как настроить 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122🔥2
⚙️ JaCoCo

Если стандартных возможностей IDE для контроля покрытия тестами уже недостаточно, стоит обратить внимание на JaCoCo. Этот инструмент выходит за рамки базового функционала.

В отличие от встроенных средств IntelliJ IDEA, которые отлично справляются с локальной разработкой, JaCoCo предлагает комплексный подход к анализу покрытия:

✔️ Многоформатные отчёты — HTML для визуализации, XML и CSV для автоматической обработки
✔️ Бесшовная интеграция с системами сборки (Maven/Gradle)
✔️ Готовность к CI/CD — работает с Jenkins, GitLab CI и другими платформами
✔️ Возможность исключать из анализа ненужные классы и пакеты
✔️ Совместимость с SonarQube и аналогичными системами контроля качества

JaCoCo идеален для проектов, где важна прозрачность метрик тестирования и автоматизация проверок качества кода на всех этапах разработки.

🔗 JaCoCo GitHub

🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

🐸 Библиотека джависта

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥31
👑 Магия IntelliJ IDEA: Evaluate Expression

Дебажишь сложную бизнес-логику? Остановился на 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👍41