Micrometer используется для сбора метрик приложения JVM и позволяет экспортировать данные в различные системы мониторинга. В этой статье я расскажу, как подключить Micrometer для spring web приложения и экспортировать данные в Prometheus (хороший пост о нем). Так как мое приложение написано на 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>
<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"/>
<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) {
}
}
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']
К сожалению, не доступен сервер mySQL