- PVSM.RU - https://www.pvsm.ru -
Micrometer [1] используется для сбора метрик приложения JVM и позволяет экспортировать данные в различные системы мониторинга. В этой статье я расскажу, как подключить Micrometer для spring web приложения и экспортировать данные в Prometheus [2] (хороший пост о нем [3]). Так как мое приложение написано на Spring 3, то возможности использовать Spring boot без апгрейда в нем нет. Поэтому придется поработать руками.
Первым делом нам понадобятся зависимости Prometheus, сам клиент и сервлет для экспорта данных:
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>0.6.0</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_servlet</artifactId>
<version>0.6.0</version>
</dependency>
Далее добавляем servlet экспорта метрик в web.xml и указываем путь, по которому метрики будут доступны:
<servlet>
<servlet-name>prometheus</servlet-name>
<servlet-class>io.prometheus.client.exporter.MetricsServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>prometheus</servlet-name>
<url-pattern>/metrics</url-pattern>
</servlet-mapping>
Не забываем добавить при необходимости политику доступа:
<http pattern="/metrics" security="none"/>
Теперь по адресу localhost:8080/metrics будет доступна статистика, но пока это пустая страница. Для того чтобы в ней появились данные, нужно зарегистрировать сбор метрик приложения.
Для использования Micrometer добавляем зависимости:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.1.3</version>
</dependency>
Дальше нужно зарегистрировать необходимые сборщики метрик:
@WebListener
public class PrometheusInitListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
PrometheusMeterRegistry meterRegistry =
new PrometheusMeterRegistry(PrometheusConfig.DEFAULT, CollectorRegistry.defaultRegistry, Clock.SYSTEM);
new ClassLoaderMetrics().bindTo(meterRegistry);
new JvmMemoryMetrics().bindTo(meterRegistry);
new JvmGcMetrics().bindTo(meterRegistry);
new ProcessorMetrics().bindTo(meterRegistry);
new JvmThreadMetrics().bindTo(meterRegistry);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
Готово, теперь если мы перейдем на localhost:8080/metrics, мы получим данные по работе JVM.
Выглядит это примерно так:
У Prometheus есть своя библиотека для статистики JVM приложений simpleclient_hotspot [4], которая настраивается вызовом DefaultExports.initialize(); в методе инициализации веб-слушателя.
Для настройки сбора метрик в prometheus.yml добавьте цель:
scrape_configs:
- job_name: 'test-server'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
metrics_path: /metrics
static_configs:
- targets: ['localhost:8080']
Собираемые метрики в Prometheus можно просматривать с помощью специального языка PromQL. Плюс Micrometr'a в том, что можно ничего не писать, а использовать готовые плагины для систем визуализации метрик.
Отображение метрик приложения в Grafana, плагин 4683
Автор: taluks
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/310372
Ссылки в тексте:
[1] Micrometer: http://micrometer.io
[2] Prometheus: http://www.prometheus.io/
[3] хороший пост о нем: https://habr.com/ru/company/selectel/blog/275803/
[4] simpleclient_hotspot: https://github.com/prometheus/client_java/tree/master/simpleclient_hotspot
[5] Источник: https://habr.com/ru/post/442080/?utm_source=habrahabr&utm_medium=rss&utm_campaign=442080
Нажмите здесь для печати.