有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java发布NewRelicMeterRegistry时如何过滤仪表

我使用定制计时器通过千分尺测量一吨字段。理想情况下,我不希望为配置的步长间隔之间计数为零的特定度量报告度量。这并不重要,但希望能够潜在地降低每x秒发送到NR的内容的噪声

我在NewRelicMeterRegistry之外创建了一个扩展,它覆盖了publish()方法,以在默认行为之前添加功能


public class FilteringNewRelicMeterRegistry extends NewRelicMeterRegistry {

    public FilteringNewRelicMeterRegistry(NewRelicConfig config, Clock clock) {
        super(config, clock);
    }

    /**
     * Remove field metrics that have not been used since the last publish.
     */
    @Override
    protected void publish() {
        getMeters().stream()
                .filter(filterByMeterId(...)))
                .filter(meter -> ((Timer) meter).count() == 0)
                .forEach(this::remove);
        super.publish();
    }
}

但就我的一生而言,我不知道如何让自动配置更喜欢这个实现而不是默认的NewRelicMeterRegistry

我如何让spring boot或Millimer尊重我的实现,并将其作为应用程序上下文中用于自动布线目的的指定bean

此外,如果有一种开箱即用的方法通过千分尺抽象或实用程序来覆盖这种行为,那就更好了!请让我知道。我试过使用MeterRegistryCustomizer,但那似乎没有我所需要的

我希望避免通过@Scheduled使用Spring的调度功能,我希望在“发布”的基础上这样做


共 (1) 个答案

  1. # 1 楼答案

    如果不想默认自动配置,请使用此选项禁用默认设置

    @SpringBootApplication(exclude = { NewRelicMetricsExportAutoConfiguration.class })
    

    并使用StepMeterRegistry扩展FilterInnerElecMeterRegistry类,并使用您的职责进行配置,因为StepMeterRegistry是MeterRegistry和Millometer检测配置的子类

    在使用与NewRelicMetricsExportAutoConfiguration相同的配置类注册自定义配置之后,StepMeterRegistry是need StepRegistryConfig,Clock是使用默认的NewRelicConfig和Clock并像这样注册,我阅读了NewRelicMetricsExportAutoConfiguration并像这样简化配置

    @Configuration(proxyBeanMethods = false)
    @AutoConfigureBefore({ CompositeMeterRegistryAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class })
    @AutoConfigureAfter(MetricsAutoConfiguration.class)
    @ConditionalOnProperty(prefix = "management.metrics.export.newrelic", name = "enabled", havingValue = "true",
            matchIfMissing = true)
    @EnableConfigurationProperties(NewRelicProperties.class)
    public class FilteringNewRelicConfiguration {
    
        private final NewRelicProperties properties;
    
        public FilteringNewRelicConfiguration(NewRelicProperties properties) {
            this.properties = properties;
        }
    
        @Bean
        public NewRelicConfig newRelicConfig() {
            return new NewRelicPropertiesConfigAdapter(this.properties);
        }
    
        @Bean
        public FilteringNewRelicMeterRegistry filteringNewRelicMeterRegistry(NewRelicConfig newRelicConfig, Clock clock) {
            return new FilteringNewRelicMeterRegistry(newRelicConfig, clock)
    
        }
    
    }