一、遇到的坑
本人在使用springboot2.0.6版本集成prometheus时,如果直接导入
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
启动时,就会直接报错。
Caused by: java.lang.NoClassDefFoundError: io/prometheus/client/CollectorRegistry
at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_60]
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0_60]
at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0_60]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:641) ~[spring-core-5.0.10.RELEASE.jar:5.0.10.RELEASE]
... 20 common frames omitted
Caused by: java.lang.ClassNotFoundException: io.prometheus.client.CollectorRegistry
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_60]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_60]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_60]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_60]
... 24 common frames omitted
试着使用springboot1.x集成prometheus的方式,还是不行。
后来直接查看springboot2.1.x版本的所依赖的jar包及版本,直接拿过来springboot2.0.6版本中,发现可以使用。具体解决方式如下所示。
二、如何解决
1、在pom中加入依赖包
1.1、基于springboot 2.0.x版本
<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-core</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.1.0</version>
<exclusions>
<exclusion>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
</exclusion>
</exclusions>
</dependency>
1.2、基于springboot 2.1.x 及以上版本
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
2、放开端点访问
management:
endpoints:
web:
exposure:
include: "*"
3、验证
打开浏览器,访问 http://ip:port/actuator/prometheus
三、其他
其实springboot-2.0.6.RELEASE reference 文档 文档中,对应的micrometer-registry-prometheus版本是1.0.7,但是为啥不行,还没有找到原因。