Spring Boot 2.0 Prometheus 向后兼容
Posted
技术标签:
【中文标题】Spring Boot 2.0 Prometheus 向后兼容【英文标题】:Spring Boot 2.0 Prometheus Backward Compatibility 【发布时间】:2018-09-09 06:45:49 【问题描述】:我正在迁移到 Spring Boot 2.0,但我的 Prometheus 指标出现问题。
我知道 MicroMeter 是一种新的做事方式,它不像 Prometheus 库那么清晰,但还可以。
我的问题是,如果我现在不想更改指标,我将无法升级到 Spring Boot 2.0。我说的对吗?
我尝试了以下方法:
一号试验
保持我的实现“原样” 将新的依赖项io.micrometer:micrometer-registry-prometheus:1.0.2
添加到我的应用程序中(执行器已在其中)
更改application.properties
中的内容以访问端点actuator/prometheus
=> 我过去的Counters
和Gauges
被忽略了。好的,我从技术角度理解这一点。
第 2 次试验
保持我的实现“原样” 添加“旧”“io.prometheus”依赖项并删除千分尺依赖项 更改application.properties
中的内容以访问端点actuator/prometheus
=> 现在我得到以下异常
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.actuate.endpoint.AbstractEndpoint
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_161]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_161]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) ~[na:1.8.0_161]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_161]
... 37 common frames omitted
所以我的问题是:是否有一种“软迁移”方式有效?
【问题讨论】:
【参考方案1】:要使 Trial no 1 工作,只需将 Prometheus 默认注册表添加为 Micrometer 将能够利用的 bean。
@Bean
public CollectorRegistry collectorRegistry()
return CollectorRegistry.defaultRegistry;
Micrometer 默认情况下不使用默认注册表,因为它不允许取消注册仪表并且会使单元测试变得相当困难。
要使 Trial no 2 正常工作,需要重新实现 prometheus 执行器端点,因为 SpringBoot 2 中该类发生了巨大变化。我不推荐这种方法。
【讨论】:
【参考方案2】:我花了很长时间才弄清楚真正的问题,而我不得不调试 Spring 代码来解决这个问题。这是解决方案,您需要从“spring-boot-starter-actuator”中排除“micrometer-core”并专门添加“micrometer-registry-prometheus”,如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<exclusions>
<exclusion>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
【讨论】:
以上是关于Spring Boot 2.0 Prometheus 向后兼容的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2.0(一):Spring Boot 2.0尝鲜-动态 Banner
Spring Boot 2.0干货系列:Spring Boot1.5X升级到2.0指南
Spring Boot 2:Spring Boot 2.0新特性