Spring Boot 2.0 Prometheus 向后兼容性

标签 spring spring-boot prometheus spring-boot-actuator micrometer

我正在迁移到 Spring Boot 2.0,但我的 Prometheus Metrics 出现问题。

我知道 MicroMeter 是一种新的做事方式,它不像 Prometheus 库那么清晰,但还可以。

我的问题是,如果我现在不想更改指标,则无法升级到 Spring Boot 2.0。我说得对吗?

我尝试了以下方法:

试验 1

  • 保持我的实现“原样”
  • 将新的依赖项 io.micrometer:micrometer-registry-prometheus:1.0.2 添加到我的应用中(执行器已在其中)
  • 更改application.properties中的内容以访问端点actuator/prometheus

=> 我过去的计数器仪表被忽略了。好的,我从技术角度理解这一点。

试验 2

  • 保持我的实现“原样”
  • 添加“旧”“io.prometheus”依赖项并删除千分尺依赖项
  • 更改application.properties中的内容以访问端点actuator/prometheus

=> 现在我得到以下异常(exception)

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 发挥作用,只需将 Prometheus 默认注册表添加为 Micrometer 能够利用的 bean。

@Bean
public CollectorRegistry collectorRegistry() {
    return CollectorRegistry.defaultRegistry;
}

Micrometer 默认情况下不使用默认注册表,因为它不允许取消注册仪表,并且会使单元测试变得相当困难。

要使 Trial no 2 工作,需要重新实现 prometheus 执行器端点,因为该类在 SpringBoot 2 中发生了巨大变化。我不推荐这种方法。

关于Spring Boot 2.0 Prometheus 向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49570812/

相关文章:

eclipse - Eclipse STS 中缺少选项 "Run on Server"

Spring 安全 REST API

spring-boot - Spring Boot 2.2.2 - Prometheus 在 Actuator 中不起作用

kubernetes - 使用 prometheus-alertmanager 通过 Grafana UI 发送警报电子邮件

spring - GORM无法从JAR引导

angularjs - session 超时 - Spring boot + Angular 应用程序中的 HTTP 状态代码 -1

java - 当交易被触发时,票务应用程序如何保留席位并将其释放以再次可用?

java - Spring aerospike 数据 - 如何从集合中删除 @user_key 和 @_class 箱

java - 解决错误java.io.StreamCorruptedException : Inconsistent vector internals

amazon-web-services - 监控微服务架构