描述:在使用springboot配置的项目时发现,如果时自己动态添加的数据源(非通过配置文件注入到IOC的模式)明明已经配置各数据项,然而在grafana中却取不到动态添加的数据源。CollectionRegistry使用default也是一样。通过代码排查发现是自动配置的原因。
- 项目配置依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.5.2</version>
</dependency>
- 开放端点:yml配置
management:
metrics:
export:
prometheus:
enabled: true
step: 1m
descriptions: true
web:
server:
auto-time-requests: true
endpoints:
prometheus:
id: springmetrics
web:
exposure:
include: "*"
- 查找endpoint的endpoint位置:
actuator的endpoint:
{
"name": "management.endpoint.prometheus",
"type": "org.springframework.boot.actuate.metrics.export.prometheus.PrometheusScrapeEndpoint",
"sourceType": "org.springframework.boot.actuate.metrics.export.prometheus.PrometheusScrapeEndpoint"
},
后面考虑到actuator是通过autoconfig进行配置的,跟踪源码发现这一段代码:
@Bean
@ConditionalOnMissingBean
public PrometheusMeterRegistry prometheusMeterRegistry(PrometheusConfig prometheusConfig,
CollectorRegistry collectorRegistry, Clock clock) {
return new PrometheusMeterRegistry(prometheusConfig, collectorRegistry, clock);
}
@Bean
@ConditionalOnMissingBean
public CollectorRegistry collectorRegistry() {
return new CollectorRegistry(true);
}
也就是说spring管理的collectorRegistry是由spring autoconfig阶段,配置的容器组件。所以和使用default的仓库是不同的。
如果想使用一样的CollectorRegistry,通过IOC注入。
否则,新建一个CollectorRegistry,保持数据干净。