esha ingle
esha ingle

Reputation: 163

io.micrometer.core.instrument.config.MeterFilter : DENY is not working in spring boot

I want to expose all metrics on the metrics endpoint but publish some of them to a remote meter registry.

For doing so, I have a SimpleMeterRegistry for the metrics endpoint and added a MeterRegistryCustomizer for the remote meter registry(Datadog) to add some MeterFilter to avoid specific metrics using MeterFilter's DENY function. For example :

@Bean
public MeterRegistryCustomizer<StatsdMeterRegistry> meterRegistryCustomizer() {
    return (registry) -> new StatsdMeterRegistry(config, Clock.SYSTEM).config().meterFilter(MeterFilter.denyNameStartsWith("jvm"));
   }    

However, all jvm related metrics are visible in Datadog. I tried MeterFilterReply but no use. Please suggest how this can be achieved.

Upvotes: 0

Views: 1867

Answers (1)

checketts
checketts

Reputation: 14953

You are configuring the filter on a new StatsdMeterRegistry. When using a MeterRegistryCustomizer you need to operate on the registry that was passed in.

@Bean
public MeterRegistryCustomizer<StatsdMeterRegistry> meterRegistryCustomizer() {
    return (registry) -> registry.config().meterFilter(MeterFilter.denyNameStartsWith("jvm"));
   }   

Since the customizer will be used against all registries, you also would need to add an if statement to only filter against the registry you want filtered.

@Bean
public MeterRegistryCustomizer<StatsdMeterRegistry> meterRegistryCustomizer() {
   return (registry) -> { 
      if(registry instanceof StatsdMeterRegistry) {
        registry.config().meterFilter(MeterFilter.denyNameStartsWith("jvm"));
      }   
   }
}   

Upvotes: 1

Related Questions