Micrometer используется для сбора метрик приложения JVM и позволяет экспортировать данные в различные системы мониторинга. В этой статье я расскажу, как подключить Micrometer для spring web приложения и экспортировать данные в Prometheus (хороший пост о нем). Так как мое приложение написано на Spring 3, то возможности использовать Spring boot без апгрейда в нем нет. Поэтому придется поработать руками.
Первым делом нам понадобятся зависимости Prometheus, сам клиент и сервлет для экспорта данных:
Далее добавляем servlet экспорта метрик в web.xml и указываем путь, по которому метрики будут доступны:
Не забываем добавить при необходимости политику доступа:
Теперь по адресу localhost:8080/metrics будет доступна статистика, но пока это пустая страница. Для того чтобы в ней появились данные, нужно зарегистрировать сбор метрик приложения.
Для использования Micrometer добавляем зависимости:
Дальше нужно зарегистрировать необходимые сборщики метрик:
Готово, теперь если мы перейдем на localhost:8080/metrics, мы получим данные по работе JVM.
Выглядит это примерно так:

У Prometheus есть своя библиотека для статистики JVM приложений simpleclient_hotspot, которая настраивается вызовом DefaultExports.initialize(); в методе инициализации веб-слушателя.
Для настройки сбора метрик в prometheus.yml добавьте цель:
Собираемые метрики в Prometheus можно просматривать с помощью специального языка PromQL. Плюс Micrometr'a в том, что можно ничего не писать, а использовать готовые плагины для систем визуализации метрик.

Отображение метрик приложения в Grafana, плагин 4683
Первым делом нам понадобятся зависимости 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.
Выглядит это примерно так:

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

Отображение метрик приложения в Grafana, плагин 4683
