Micrometer est utilisé pour collecter des métriques d'application JVM et vous permet d'exporter des données vers divers systèmes de surveillance. Dans cet article, je vais vous expliquer comment connecter Micrometer pour des applications Web de printemps et exporter des données vers
Prometheus (un
bon article à ce sujet ). Étant donné que mon application est écrite dans Spring 3, il n'y a aucune possibilité d'utiliser Spring Boot sans mise à niveau. Par conséquent, vous devez travailler avec vos mains.
Tout d'abord, nous avons besoin des dépendances Prometheus, du client lui-même et du servlet pour exporter les données:
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>
Ensuite, ajoutez le servlet d'exportation de metlet à web.xml et spécifiez le chemin où les métriques seront disponibles:
<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>
N'oubliez pas d'ajouter une politique d'accès si nécessaire:
<http pattern="/metrics" security="none"/>
Désormais, les statistiques seront disponibles sur localhost: 8080 / metrics, mais pour l'instant il s'agit d'une page vierge. Pour que les données y apparaissent, vous devez enregistrer la collection de métriques d'application.
Pour utiliser Micrometer, ajoutez des dépendances:
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>
Ensuite, vous devez enregistrer les collecteurs métriques nécessaires:
@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) { } }
Terminé, maintenant si nous passons à localhost: 8080 / metrics, nous obtiendrons des données sur la JVM.
Cela ressemble à ceci:

Prometheus possède sa propre bibliothèque de statistiques JVM des applications
simpleclient_hotspot , qui est configurée en appelant DefaultExports.initialize (); dans la méthode d'initialisation de l'écouteur Web.
Pour configurer la collecte de métriques dans prometheus.yml, ajoutez une cible:
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']
Les métriques collectées dans Prometheus peuvent être affichées à l'aide d'un langage spécial PromQL. L'avantage de Micrometr est que vous ne pouvez rien écrire, mais utiliser des plug-ins prêts à l'emploi pour les systèmes de visualisation métriques.
Afficher les métriques d'application dans Grafana, plugin 4683