Spring Boot集成Prometheus端点遇404及依赖相关疑问求解
问题解决方案
一、/actuator/prometheus 404 问题排查
修正配置文件语法
你当前配置management.endpoints.web.exposure.include=prometheus, *里,逗号后带了空格,会被Spring解析成包含prometheus(带空格的名称)和*,导致真正的prometheus端点没被暴露。把配置改成:management.endpoints.web.exposure.include=prometheus,*或者直接用
management.endpoints.web.exposure.include=*(暴露所有actuator端点,测试场景更方便)。检查依赖加载情况
若Spring Boot版本与micrometer-registry-prometheus版本不兼容,可能导致端点无法注册。可通过生成依赖树(下文会讲方法)确认该依赖是否被正确引入,是否存在版本冲突或缺失。
另外,可尝试把<scope>runtime</scope>改成<scope>compile</scope>,重新打包启动应用——部分场景下runtime scope可能导致依赖未被正确加载到运行环境。查看启动日志
启动应用时,关注日志中关于actuator端点的输出,比如类似Exposing X endpoint(s) beneath base path '/actuator'的内容。如果日志里没有prometheus,说明端点根本没被注册,大概率是依赖引入或版本兼容问题。
二、生成Maven依赖树(mvn命令不在系统路径时)
有几种不需要系统全局Maven的方法:
- 用IDE直接执行:
- IDEA:打开右侧Maven面板,找到你的项目,展开
Lifecycle,右键选择Execute Maven Goal,输入dependency:tree后运行。 - Eclipse:打开Maven Projects视图,右键项目,选择
Run As -> Maven build...,在Goals栏输入dependency:tree,点击Run。
- IDEA:打开右侧Maven面板,找到你的项目,展开
- 用项目自带的Maven Wrapper:
项目根目录下如果有mvnw(Linux/Mac)或mvnw.cmd(Windows)文件,直接在终端执行:
这个文件是项目自带的Maven包装器,无需系统安装Maven即可使用。# Linux/Mac ./mvnw dependency:tree # Windows mvnw.cmd dependency:tree
三、runtime 的作用
这个参数用来指定依赖的生效阶段:
- 标记为
runtime的依赖,编译代码时不需要,仅在应用运行时才会加载该jar包。也就是说你的业务代码不会直接引用这个依赖里的类,仅框架在运行时会调用它。 - 对于micrometer-registry-prometheus来说,设置为runtime是合理的,因为你不需要手动写代码调用它的API,Spring Boot会自动完成配置。但如果出现端点未加载的情况,可以临时改成
compile来排查是否是依赖加载问题。
内容的提问来源于stack exchange,提问作者Adder
相关产品推荐
相关产品推荐

