springboot配置的prometheus自定义数据源未生效

    技术2022-07-14  69

    描述:在使用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,保持数据干净。

    Processed: 0.061, SQL: 9