You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"}

确认用户名和密码正确,现存在两个问题:

  1. 应用为何无法访问InfluxDB?
  2. 配置文件中指定数据库为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,提问作者Михаил Воробьев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:22:43