【问题标题】:Spring Boot MeterRegistryCustomizer with NewRelicRegistry not working as I expect.带有 NewRelicRegistry 的 Spring Boot MeterRegistryCustomizer 无法按预期工作。
【发布时间】:2018-05-22 17:15:28
【问题描述】:

我有一个 bean,在配置类中设置。我的目标是转换、拒绝、应用通用标签并修改发送到 New Relic 的指标。

这是我的配置类

@Configuration
@Log4j2
public class MetricsConfig {

    private static final Duration HISTOGRAM_EXPIRY = Duration.ofMinutes(10);
    private static final Duration STEP = Duration.ofSeconds(5);
    private final transient String profile;

    @Autowired
    public MetricsConfig(@Value("${spring.profiles.active}") final String profile) {
        this.profile = profile;
    }

    @Bean
    public MeterRegistryCustomizer<NewRelicMeterRegistry> metricsCommonTags() {
        log.info("Configuring Registry");
        return registry -> registry.config()
                .commonTags(Arrays.asList(Tag.of("appId", "1111111"), Tag.of("environment", profile),
                        Tag.of("app", "aws-app-name")))
                .meterFilter(new MeterFilter() {
                    @Override
                    public Meter.Id map(Meter.Id id) {
                        if(id.getName().startsWith("http")){
                            return id.withName("app-name." + profile + "." + id.getName());
                        }
                        return id;
                    }

                    @Override
                    public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
                        return config.merge(DistributionStatisticConfig.builder()
                                .percentilesHistogram(true)
                                .percentiles(0.5, 0.75, 0.95)
                                .expiry(HISTOGRAM_EXPIRY)
                                .bufferLength((int) (HISTOGRAM_EXPIRY.toMillis() / STEP.toMillis()))
                                .build());
                    }
                }).meterFilter(MeterFilter.deny(id -> {
                    String uri = id.getTag("uri");
                    log.info("id: [{}]", id);
                    return (uri != null && uri.startsWith("/swagger") && uri.startsWith("/manage")) || !id.getName().toLowerCase().startsWith("app-name");
                }))
                ;
    }

}

然后,我还将MeterRegistry 注入到我的一些类中以捕获自定义事件(定时器、计数器)。

一切都与捕获事件有关,除了 New Relic 中的数据缺少我在 MetricsConfig 类中应用的 commonTags、转换和其他任何内容。

在确保我的应用程序正确连接MeterRegistryCustomizer 时,我是否遗漏了什么?

【问题讨论】:

    标签: spring-boot newrelic spring-boot-actuator micrometer


    【解决方案1】:

    Arg.. 我已经实现了一个 HandlerInterceptorAdapter 来尝试为所有带有附加标签的请求实现一个计数器。哪个,它不喜欢。

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 2015-12-19
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多