我想配置监控。我在互联网上查找,发现了很多 Spring Bout + Micrometer + Prometheus + Grafana 的实现示例。
但我的问题是我在 Spring MVC 3.2.9 上有一个旧项目。我有一个多模块项目:
模块ui。其余 2 个模块作为 SOAP Web 服务与其连接(我使用注释 @WebService)。
我尝试手动配置监控。首先,我向 ui-module pom-file 添加了几个依赖项:
<!-- client prometheus -->
<dependency>
<groupid> io.prometheus </ groupid>
<artifactid> simpleclient </rtifactid>
<version> 0.6.0 </ version>
</fendency>
<!-- Servlet for data export in Prometheus -->
<dependency>
<groupid> io.prometheus </ groupid>
<artifactid> simpleclient_servlet </ artifactid>
<version> 0.6.0 </ version>
</fendency>
<!-- Micrometer library -->
<dependency>
<groupid> io.micrometer </ groupid>
<artifactid> micrometer-core </rtifactid>
<version> 1.1.3 </ version>
</fendency>
<!-- Allows to Micrometer work with Prometheus -->
<dependency>
<groupid> io.micrometer </ groupid>
<artifactid> micrometer-segistry-prometheus </ artifactid>
<version> 1.1.3 </ version>
</fendency>
接下来,在 web.xml 文件中,我创建一个用于导出指标的 servlet:
<!-- Servlet for export metrics -->
<servlet>
<servlet-name> prometheus </ servlet-name>
<servlet-class> io.prometheus.client.exporter.MetricsServlet </sevlet-class>
<load-on-startup> 1 </laad-on-startup>
</ servlet>
<!-- Path in which the metrics will be available -->
<servlet-mapping>
<servlet-name> prometheus </ servlet-name>
<url-pattern>/metrics </rl-pattern>
</ servlet-mapping>
然后我创建一个类,在其中注册必要的指标收集器:
@WebListener
public class PrometheusInitListener implements ServletContextListener {
/*
* Register the necessary metric collectors
*/
@Override
public void contextInitialized(ServletContextEvent ServletContextEvent) {
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 contextInitialized(ServletContextEvent servletContextEvent) {
}
}
最后我开始了这个项目。我打开地址:
http://localhost:8080/core/metrics
我看到了标准的 jvm 指标:
# HELP JVM_GC_MEMORY_PROMOTED_BYTES_TOTAL COUNT of POSITISE InCreases in the SIZE of the Old Generation Memory Pool Before Gc TOM TOM
# Type JVM_GC_MEMERY_PROMOTED_BYTES_TOTAL COUNTER
JVM_GC_MEMORY_PROMOTED_BYTES_TOTAL 2.6146872E7
# HELP JVM_BUFFER_COUNT_BUFFERS ASTEMATE Of the Number of Buffers in the Pool
# Type jvm_buffer_count_buffers gauge
JVM_BUFFER_COUNT_BUFFERS {ID = "DIRECT",} 14.0
jvm_buffer_count_buffers {id = "mapped",} 0.0
. . . . .
现在我有以下问题:我想在另外 2 个模块中为某些业务逻辑配置自定义指标: requests 和 employees 。但我一时不明白:如何将这些指标传输到 ui 模块?你能告诉我吗:-).
现在我在 Micrometer 文档中读到了这样的内容:“Micrometer 是支撑 Spring Boot 2 或更高版本指标集合的仪器库。”。也许 Micrometer 不适用于旧的 Spring 3 项目?也许我应该使用另一个库,而不是 Micrometer?
Spring WebMVC 3.2.9.RELEASE 已发布超过 9 年(2014-05-20),因此您应该升级。 Micrometer 比它更年轻,所以 Spring Framework 3.x 中没有 Instrumentation。
您需要自己对组件进行检测,您可以查看 Spring Framework 6 中的检测,但考虑到您使用的是 9 年以上的版本,您可能无法按原样复制检测。
所以我认为你最好的做法是升级应用程序,你可以享受 Spring Framework 6 为你提供的工具。