[Java, API] Сбор метрик Spring Boot приложения c помощью Prometheus и Grafana
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В данной статье рассмотрен полный цикл работы с метриками. В начале, настройка приложения для поставки метрик. Настройка Prometheus для сбора и хранения метрик. Настройка Grafana для отображения собранных метрик.Требования1. Maven, но можно адаптировать под другие сборщики.2. Docker и docker-compose для запуска Prometheus и Grafana.3. Spring boot 2 и выше, однако есть и порты для прошлых версий.ВведениеС выхода Spring boot 2 Micrometer стал провайдером метрик по умолчанию. С его помощью стало гораздо проще интегрировать приложение к различным провайдерам. В текущем руководстве Prometheus используется в качестве сборщика метрик.Все примеры кода и скриптов для настройки окружения доступны на githubНастройка приложения[Создание примера с помощью spring initilizr] опциональноНеобходимо создать spring boot приложение и добавить необходимые зависимости.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Настройка actuatorSpring boot предоставляет механизм, который позволяет получать различные метаданные приложения. Для этого необходимо добавить зависимость.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
По-умолчанию, actutor находится на порту 8080 и uri /actuatorВ приложении-примере на github actuator находится по следующему адресу localhost:8080/actuatorЕсли зайти на эту страницу, отобразится следующий ответ.
{
"_links":{
"self":{
"href":"http://localhost:8080/actuator",
"templated":false
},
"health-path":{
"href":"http://localhost:8080/actuator/health/{*path}",
"templated":true
},
"health":{
"href":"http://localhost:8080/actuator/health",
"templated":false
},
"info":{
"href":"http://localhost:8080/actuator/info",
"templated":false
}
}
}
Теперь actuator настроен и мы можем добавить метрики.Добавление метрикMicrometer по-умолчанию включен в зависимости spring boot, нам лишь необходимо добавить адаптер в необходимый нам формат, так как в руководстве использован Prometheus необходимо добавить следующую зависимость.
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
Далее необходимо отредактировать файл application.ymlдля отображения эндпоинта Prometheus в actuator.
management:
endpoints:
web:
exposure:
include: health,prometheus
metrics:
export:
prometheus:
enabled: true
distribution:
percentiles-histogram:
"[http.server.requests]": true
Здесь включены health,prometheusэндпоинты в actuator. Включен экспорт метрик в Prometheus, а также `percentiles-histogram`, которая позволяет верхнеуровнего оценить sla эндпоинтов приложения.Теперь, если запустить приложение и зайти по адресу http://localhost:8080/actuator/prometheusдолжен отобразиться вывод примерно следующего содержания.
# TYPE jvm_memory_committed_bytes gauge
jvm_memory_committed_bytes{area="heap",id="G1 Survivor Space",} 9437184.0
jvm_memory_committed_bytes{area="heap",id="G1 Old Gen",} 9.961472E7
jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 4.2254336E7
jvm_memory_committed_bytes{area="nonheap",id="CodeHeap 'non-nmethods'",} 2555904.0
# TYPE jvm_gc_live_data_size_bytes gauge
jvm_gc_live_data_size_bytes 0.0
# HELP tomcat_sessions_active_max_sessions
# TYPE tomcat_sessions_active_max_sessions gauge
tomcat_sessions_active_max_sessions 0.0
# HELP jvm_threads_live_threads The current number of live threads including both daemon and non-daemon threads
# TYPE jvm_threads_live_threads gauge
jvm_threads_live_threads 27.0
Тут видна особенность, что метрики jvm доступны по-умолчанию.Настройка окружения для сбора и отображения метрикФайл docker-compose.ymlдля Prometheus и Grafana.
version: '3.7'
services:
grafana:
build: './config/grafana'
ports:
- 3000:3000
volumes:
- ./grafana:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
networks:
monitoring:
aliases:
- grafana
prometheus:
image: prom/prometheus
ports:
- 9090:9090
volumes:
- ./config/prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus:/prometheus
networks:
monitoring:
aliases:
- prometheus
networks:
monitoring:
Как можно заметить, образ Grafana собирается, это связано с тем, что настройка импорта дашбордов из файла работает некорректно при работе с volume.Я включил в комплект с grafana два популярных дашборда для мониторинга, т.е Dockerfileдля Grafana выглядит следующим образом.
FROM grafana/grafana
ADD ./provisioning /etc/grafana/provisioning
Подробнее ознакомиться с преднастроеным окружением можно по ссылке.Далее необходимо внести изменения в файл prometheus.ymlдля сбора метрик.В нашем случае файл выглядит следующим образом.
scrape_configs:
- job_name: 'sample_monitoring'
scrape_interval: 5s
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['host.docker.internal:8080']
Результат и отображение дашбордовВ подготовленном примере, сразу при запуске добавляется два популярных дашборда.1. JVM
2. Response throughput
Заключение1. Настроено приложение, которое предоставляет метрики.2. Настроен сбор метрик с помощью Prometheus.3. Настроены дашборды для визуализации результата в Grafana.СсылкиПриложение пример на github
===========
Источник:
habr.com
===========
Похожие новости:
- [Разработка веб-сайтов, JavaScript, ООП, ReactJS, TypeScript] Еще один подход к построению архитектуры на фронте
- [Прототипирование, Визуальное программирование] No-code в действии — мастерим временный email-адрес
- [Ненормальное программирование, Разработка веб-сайтов, Программирование, Haskell] Зачем мы транспилируем Haskell в JavaScript
- [Управление персоналом] Трудности роста. Почему вашей компании стоит задуматься о data-driven подходе и как мы применяем его в ЕРАМ
- [Java, Kotlin, Карьера в IT-индустрии, Интервью] «Отдых — это непросто»: Андрей Бреслав о жизни после Kotlin
- [Java, Kotlin] Создаем свою инспекцию для IDEA
- [Программирование, Разработка под Android, Kotlin] Как можно использовать шейдеры в Android View и как Android View может использовать шейдеры (перевод)
- [JavaScript, Node.JS, MongoDB] Passport.js + mongoose объединяем две коллекции
- [Разработка веб-сайтов, JavaScript, Программирование, HTML] Красивое радио для браузера
- [Разработка веб-сайтов, JavaScript, Программирование, ReactJS] React Social App
Теги для поиска: #_java, #_api, #_spring_boot, #_metrics, #_metriki (метрики), #_java, #_api
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 07:59
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В данной статье рассмотрен полный цикл работы с метриками. В начале, настройка приложения для поставки метрик. Настройка Prometheus для сбора и хранения метрик. Настройка Grafana для отображения собранных метрик.Требования1. Maven, но можно адаптировать под другие сборщики.2. Docker и docker-compose для запуска Prometheus и Grafana.3. Spring boot 2 и выше, однако есть и порты для прошлых версий.ВведениеС выхода Spring boot 2 Micrometer стал провайдером метрик по умолчанию. С его помощью стало гораздо проще интегрировать приложение к различным провайдерам. В текущем руководстве Prometheus используется в качестве сборщика метрик.Все примеры кода и скриптов для настройки окружения доступны на githubНастройка приложения[Создание примера с помощью spring initilizr] опциональноНеобходимо создать spring boot приложение и добавить необходимые зависимости. <dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> {
"_links":{ "self":{ "href":"http://localhost:8080/actuator", "templated":false }, "health-path":{ "href":"http://localhost:8080/actuator/health/{*path}", "templated":true }, "health":{ "href":"http://localhost:8080/actuator/health", "templated":false }, "info":{ "href":"http://localhost:8080/actuator/info", "templated":false } } } <dependency>
<groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> management:
endpoints: web: exposure: include: health,prometheus metrics: export: prometheus: enabled: true distribution: percentiles-histogram: "[http.server.requests]": true # TYPE jvm_memory_committed_bytes gauge
jvm_memory_committed_bytes{area="heap",id="G1 Survivor Space",} 9437184.0 jvm_memory_committed_bytes{area="heap",id="G1 Old Gen",} 9.961472E7 jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 4.2254336E7 jvm_memory_committed_bytes{area="nonheap",id="CodeHeap 'non-nmethods'",} 2555904.0 # TYPE jvm_gc_live_data_size_bytes gauge jvm_gc_live_data_size_bytes 0.0 # HELP tomcat_sessions_active_max_sessions # TYPE tomcat_sessions_active_max_sessions gauge tomcat_sessions_active_max_sessions 0.0 # HELP jvm_threads_live_threads The current number of live threads including both daemon and non-daemon threads # TYPE jvm_threads_live_threads gauge jvm_threads_live_threads 27.0 version: '3.7'
services: grafana: build: './config/grafana' ports: - 3000:3000 volumes: - ./grafana:/var/lib/grafana environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin networks: monitoring: aliases: - grafana prometheus: image: prom/prometheus ports: - 9090:9090 volumes: - ./config/prometheus.yml:/etc/prometheus/prometheus.yml - ./prometheus:/prometheus networks: monitoring: aliases: - prometheus networks: monitoring: FROM grafana/grafana
ADD ./provisioning /etc/grafana/provisioning scrape_configs:
- job_name: 'sample_monitoring' scrape_interval: 5s metrics_path: '/actuator/prometheus' static_configs: - targets: ['host.docker.internal:8080'] 2. Response throughput Заключение1. Настроено приложение, которое предоставляет метрики.2. Настроен сбор метрик с помощью Prometheus.3. Настроены дашборды для визуализации результата в Grafana.СсылкиПриложение пример на github =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 07:59
Часовой пояс: UTC + 5