admin管理员组

文章数量:1390749

I followed the Spring's documentation to see traces in Mongodb by adding the bean

@Bean
MongoClientSettingsBuilderCustomizer mongoMetricsSynchronousContextProvider(ObservationRegistry registry) {
    return (clientSettingsBuilder) -> {
        clientSettingsBuilder.contextProvider(ContextProviderFactory.create(registry))
                             .addCommandListener(new MongoObservationCommandListener(registry));
    };
}

and adding the following properties to :

# Disable Spring Boot's autoconfigured tracing
management.metrics.mongomand.enabled=false
# Enable it manually
management.tracing.enabled=true

I can see the traces in the zipkins. However my question was since, Spring Already provides an autoconfiguration class metrics MongoAutoConfiguration.

@AutoConfiguration(before = MongoAutoConfiguration.class,
        after = { MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class })
@ConditionalOnClass(MongoClientSettings.class)
@ConditionalOnBean(MeterRegistry.class)
public class MongoMetricsAutoConfiguration {

    @ConditionalOnClass(MongoMetricsCommandListener.class)
    @ConditionalOnProperty(name = "management.metrics.mongomand.enabled", havingValue = "true",
            matchIfMissing = true)
    static class MongoCommandMetricsConfiguration {

    

        @Bean
        MongoClientSettingsBuilderCustomizer mongoMetricsCommandListenerClientSettingsBuilderCustomizer(
                MongoMetricsCommandListener mongoMetricsCommandListener) {
            return (clientSettingsBuilder) -> clientSettingsBuilder.addCommandListener(mongoMetricsCommandListener);
        }

Why do we need to disable bean from MongoAutoConfiguration? How do we get both metrics and traces ?

I followed the Spring's documentation to see traces in Mongodb by adding the bean

@Bean
MongoClientSettingsBuilderCustomizer mongoMetricsSynchronousContextProvider(ObservationRegistry registry) {
    return (clientSettingsBuilder) -> {
        clientSettingsBuilder.contextProvider(ContextProviderFactory.create(registry))
                             .addCommandListener(new MongoObservationCommandListener(registry));
    };
}

and adding the following properties to :

# Disable Spring Boot's autoconfigured tracing
management.metrics.mongomand.enabled=false
# Enable it manually
management.tracing.enabled=true

I can see the traces in the zipkins. However my question was since, Spring Already provides an autoconfiguration class metrics MongoAutoConfiguration.

@AutoConfiguration(before = MongoAutoConfiguration.class,
        after = { MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class })
@ConditionalOnClass(MongoClientSettings.class)
@ConditionalOnBean(MeterRegistry.class)
public class MongoMetricsAutoConfiguration {

    @ConditionalOnClass(MongoMetricsCommandListener.class)
    @ConditionalOnProperty(name = "management.metrics.mongomand.enabled", havingValue = "true",
            matchIfMissing = true)
    static class MongoCommandMetricsConfiguration {

    

        @Bean
        MongoClientSettingsBuilderCustomizer mongoMetricsCommandListenerClientSettingsBuilderCustomizer(
                MongoMetricsCommandListener mongoMetricsCommandListener) {
            return (clientSettingsBuilder) -> clientSettingsBuilder.addCommandListener(mongoMetricsCommandListener);
        }

Why do we need to disable bean from MongoAutoConfiguration? How do we get both metrics and traces ?

Share Improve this question asked Mar 16 at 21:15 2shar2shar 1111 silver badge15 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

I think this is what is happening:

  1. Micrometer itself has metrics instrumentation for MongoDB (using Micrometer's Metrics API), Spring Boot auto-configures this (so you can get metrics out of the box through this mechanism).
  2. Spring Data MongoDB instruments itself using Micrometer's Observation API which provides metrics and tracing outputs.
  3. management.metrics.mongomand.enabled=false is needed so that #1 is disabled, so MongoDB will not be instrumented twice.
  4. management.tracing.enabled=true might not be needed, its default value is already true (see: Spring Boot Docs).

So since #2 already provides metrics and tracing data, you should disable #1 so you will not record metrics twice. Please check your metrics output, you should see MongoDB metrics.

本文标签: Get both metrics and traces in Mongodb in SpringStack Overflow