Spring应用Micrometer无法向InfluxDB发送指标的问题排查
问题描述
我正在为Spring应用添加监控功能,已引入以下依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-influx</artifactId> </dependency>
并修改了application.properties配置文件:
spring.application.name=Mock server.port=9090 # SpringBoot Actuator Endpoints configuration management.endpoints.web.exposure.include=health,info,metrics management.metrics.export.influx.api-version=v1 management.metrics.export.influx.uri=https://monhost:8086 management.metrics.export.influx.user-name=name management.metrics.export.influx.password=pass management.metrics.export.influx.db=TSA_Mon_LT
但应用尝试向InfluxDB发送指标时出现如下错误:
2025-01-15T13:17:11.042+03:00 ERROR 1448 --- [Mock] [trics-publisher] i.micrometer.influx.InfluxMeterRegistry : unable to create database 'mydb': {"code":"unauthorized","message":"unauthorized access"} 2025-01-15T13:17:11.363+03:00 ERROR 1448 --- [Mock] [trics-publisher] i.micrometer.influx.InfluxMeterRegistry : failed to send metrics to influx: {"code":"unauthorized","message":"unauthorized access"} 2025-01-15T13:17:27.151+03:00 ERROR 1448 --- [Mock] [ionShutdownHook] i.micrometer.influx.InfluxMeterRegistry : unable to create database 'mydb': {"code":"unauthorized","message":"unauthorized access"} 2025-01-15T13:17:27.185+03:00 ERROR 1448 --- [Mock] [ionShutdownHook] i.micrometer.influx.InfluxMeterRegistry : failed to send metrics to influx: {"code":"unauthorized","message":"unauthorized access"}
确认用户名和密码正确,现存在两个问题:
- 应用为何无法访问InfluxDB?
- 配置文件中指定数据库为
TSA_Mon_LT,为何应用尝试创建mydb?
使用的InfluxDB版本为1.8.9,已尝试添加配置management.metrics.export.influx.auto-create-db=false,但应用仍尝试创建mydb。
解决方案
问题2:为何尝试创建mydb而非指定的TSA_Mon_LT
Micrometer Influx注册表在v1版本下,配置项名称存在拼写差异——你使用的management.metrics.export.influx.db是错误的,正确的配置项应为management.metrics.export.influx.database。
因为配置项名称错误,Micrometer无法读取你指定的数据库名,所以使用了默认值mydb。即使添加auto-create-db=false也无效,因为这个配置本身依赖正确的数据库名称配置,或者注册表在初始化时仍会尝试验证默认数据库的存在性。
问题1:无法访问InfluxDB的原因
结合问题2的配置错误,当前应用尝试使用默认数据库mydb进行操作,但你的用户名密码对应的权限可能仅针对TSA_Mon_LT数据库,不具备mydb的创建或写入权限,因此返回unauthorized错误。
此外也需排查以下几点:
- 确认InfluxDB 1.8.9的认证配置是否开启,且用户
name确实拥有TSA_Mon_LT数据库的读写权限(可通过influx客户端执行SHOW GRANTS FOR "name"验证)。 - 检查应用与InfluxDB服务之间的网络连通性,确保HTTPS端口8086可正常访问,若使用自签名证书,需在应用中配置信任该证书(添加
management.metrics.export.influx.skip-ssl-validation=true临时验证,生产环境建议导入证书到JVM信任库)。 - 确认密码是否存在特殊字符,若有需在
application.properties中用双引号包裹(如management.metrics.export.influx.password="pass@123")。
修正后的配置示例
spring.application.name=Mock server.port=9090 # SpringBoot Actuator Endpoints configuration management.endpoints.web.exposure.include=health,info,metrics management.metrics.export.influx.api-version=v1 management.metrics.export.influx.uri=https://monhost:8086 management.metrics.export.influx.user-name=name management.metrics.export.influx.password=pass # 修正配置项名称 management.metrics.export.influx.database=TSA_Mon_LT # 关闭自动创建数据库(前提是TSA_Mon_LT已提前创建) management.metrics.export.influx.auto-create-db=false
内容的提问来源于stack exchange,提问作者Михаил Воробьев
相关产品推荐
相关产品推荐

