0

我有一个 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 中的数据缺少 commonTags、转换和我在MetricsConfig课堂上应用的任何其他内容外,一切都可以捕获事件。

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

4

1 回答 1

0

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

于 2018-05-22T17:44:54.413 回答