spring boot 集成Actuator metrics不显示jvm信息
在Spring Boot项目中集成Actuator进行JVM信息监控,同时集成Prometheus进行展示。正常来说,访问metrics端点显示的内容信息应该如下:
{ "names": [ "jvm.threads.states", "jdbc.connections.active", "process.files.max", "jvm.memory.used", "jvm.gc.memory.promoted", "jvm.memory.max", "system.load.average.1m", "jvm.gc.max.data.size", "jdbc.connections.max", "jdbc.connections.min", "jvm.memory.committed", "system.cpu.count", "tomcat.global.sent", "jvm.buffer.memory.used", "tomcat.sessions.created", "jvm.threads.daemon", "system.cpu.usage", "jvm.gc.memory.allocated", "tomcat.global.request.max", "hikaricp.connections.idle", "hikaricp.connections.pending", "tomcat.global.request", "tomcat.sessions.expired", "hikaricp.connections", "jvm.threads.live", "jvm.threads.peak", "tomcat.global.received", "hikaricp.connections.active", "hikaricp.connections.creation", "process.uptime", "tomcat.sessions.rejected", "process.cpu.usage", "tomcat.threads.config.max", "jvm.classes.loaded", "hikaricp.connections.max", "hikaricp.connections.min", "jvm.classes.unloaded", "tomcat.global.error", "tomcat.sessions.active.current", "tomcat.sessions.alive.max", "jvm.gc.live.data.size", "log4j2.events", "hikaricp.connections.usage", "tomcat.threads.current", "jvm.gc.pause", "hikaricp.connections.timeout", "process.files.open", "jvm.buffer.count", "jvm.buffer.total.capacity", "tomcat.sessions.active.max", "hikaricp.connections.acquire", "tomcat.threads.busy", "process.start.time" ] }
结果是该端点时只显示了如下信息:
{ "names": [ "jdbc.connections.active", "jdbc.connections.max", "jdbc.connections.min", "tomcat.global.sent", "tomcat.sessions.created", "tomcat.global.request.max", "hikaricp.connections.idle", "hikaricp.connections.pending", "tomcat.global.request", "tomcat.sessions.expired", "hikaricp.connections", "tomcat.global.received", "hikaricp.connections.active", "hikaricp.connections.creation", "tomcat.sessions.rejected", "tomcat.threads.config.max", "hikaricp.connections.max", "hikaricp.connections.min", "tomcat.global.error", "tomcat.sessions.active.current", "tomcat.sessions.alive.max", "hikaricp.connections.usage", "tomcat.threads.current", "hikaricp.connections.timeout", "tomcat.sessions.active.max", "hikaricp.connections.acquire", "tomcat.threads.busy" ] }
引入的pom依赖如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
对应的配置如下:
management: endpoints: jmx: exposure: include: '*' web: exposure: include: '*' metrics: tags: application: ${spring.application.name}
那么,如何解决metrics端点不显示jvm信息的问题呢?
可在spring boot项目中添加如下配置项:
@Configuration public class ActuatorMetricsConfig { @Bean InitializingBean forcePrometheusPostProcessor(BeanPostProcessor meterRegistryPostProcessor, PrometheusMeterRegistry registry) { return () -> meterRegistryPostProcessor.postProcessAfterInitialization(registry, ""); } }
重启,再次访问,会发现jvm相关的参数信息可正常访问了。
问题原因
出现问题的原因是spring boot中MeterRegistry初始化过早导致的。预计在spring boot2.5版本中进行修复。
在启动日志中可以看到:
2021-05-21 12:08:12.599 INFO 52357 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'management.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties' of type [org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2021-05-21 12:08:14.029 INFO 52357 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.boot.actuate.autoconfigure.metrics.data.RepositoryMetricsAutoConfiguration' of type [org.springframework.boot.actuate.autoconfigure.metrics.data.RepositoryMetricsAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2021-05-21 12:08:14.647 INFO 52357 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusMetricsExportAutoConfiguration' of type [org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusMetricsExportAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2021-05-21 12:08:15.191 INFO 52357 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'management.metrics.export.prometheus-org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusProperties' of type [org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2021-05-21 12:08:15.721 INFO 52357 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'prometheusConfig' of type [org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusPropertiesConfigAdapter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2021-05-21 12:08:16.205 INFO 52357 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'collectorRegistry' of type [io.prometheus.client.CollectorRegistry] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2021-05-21 12:08:16.732 INFO 52357 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration' of type [org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2021-05-21 12:08:17.293 INFO 52357 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'micrometerClock' of type [io.micrometer.core.instrument.Clock$1] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2021-05-21 12:08:17.950 INFO 52357 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'prometheusMeterRegistry' of type [io.micrometer.prometheus.PrometheusMeterRegistry] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2021-05-21 12:08:18.598 INFO 52357 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'repositoryTagsProvider' of type [org.springframework.boot.actuate.metrics.data.DefaultRepositoryTagsProvider] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2021-05-21 12:08:19.198 INFO 52357 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'metricsRepositoryMethodInvocationListener' of type [org.springframework.boot.actuate.metrics.data.MetricsRepositoryMethodInvocationListener] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
另外一个解决方案就是可以添加如下配置:
@Bean public static MetricsRepositoryMethodInvocationListener metricsRepositoryMethodInvocationListener(MetricsProperties metricsProperties, @Lazy MeterRegistry registry, RepositoryTagsProvider tagsProvider) { Repository properties = metricsProperties.getData().getRepository(); return new MetricsRepositoryMethodInvocationListener(registry, tagsProvider, properties.getMetricName(), properties.getAutotime()); }
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:http://choupangxia.com/2021/07/27/spring-boot-actuator-metrics-no-jvm-info/