Подключение Micrometer для веб-приложения на Java

в 15:51, , рубрики: java, micrometer, prometheus, spring

Micrometer используется для сбора метрик приложения JVM и позволяет экспортировать данные в различные системы мониторинга. В этой статье я расскажу, как подключить Micrometer для spring web приложения и экспортировать данные в Prometheus (хороший пост о нем). Так как мое приложение написано на Spring 3, то возможности использовать Spring boot без апгрейда в нем нет. Поэтому придется поработать руками.

Первым делом нам понадобятся зависимости Prometheus, сам клиент и сервлет для экспорта данных:

pom.xml

<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 добавляем зависимости:

pom.xml

<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.

Выглядит это примерно так:

Подключение Micrometer для веб-приложения на Java - 1

У Prometheus есть своя библиотека для статистики JVM приложений simpleclient_hotspot, которая настраивается вызовом 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 в том, что можно ничего не писать, а использовать готовые плагины для систем визуализации метрик.

Подключение Micrometer для веб-приложения на Java - 2
Отображение метрик приложения в Grafana, плагин 4683

Автор: taluks

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js