8

我正在迁移到 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

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

试验 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

所以我的问题是:是否有一种有效的“软迁移”方式?

4

2 回答 2

5

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

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

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

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

于 2018-03-31T21:47:56.067 回答
1

我花了很长时间才弄清楚真正的问题,而我不得不调试 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>
于 2019-06-03T12:02:29.410 回答