Spring Boot 2.0 Prometheus向后兼容性

时间:2018-03-30 08:11:43

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

我正在迁移到Spring Boot 2.0,而我的Prometheus Metrics存在问题。

我知道MicroMeter是一种新的做事方式,它不像Prometheus libs那样清脆,但还行。

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

我尝试了以下内容:

试用1

  • 保持我的实施"按原样#34;
  • 将新的依赖项io.micrometer:micrometer-registry-prometheus:1.0.2添加到我的应用程序(执行器已经在那里)
  • 更改application.properties中的内容以访问端点actuator/prometheus

=>我过去的CountersGauges被忽略了。好的我从技术角度理解这一点。

第二次试验

  • 保持我的实施"按原样#34;
  • 添加" old" ' 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

所以我的问题是:是否有"软迁移"哪种方式有效?

2 个答案:

答案 0 :(得分:4)

要使 Trial no 1 工作,只需将Prometheus默认注册表添加为Micrometer将能够利用的bean。

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

Micrometer默认不使用默认注册表,因为它不允许取消注册仪表,并且可能使单元测试非常困难。

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

答案 1 :(得分:0)

我花了很长时间才找出真正的问题,相反,我不得不调试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>