Spring Boot MeterRegistryCustomizer с NewRelicRegistry работает не так, как я ожидаю. - PullRequest
0 голосов
/ 22 мая 2018

У меня есть компонент, настроенный в классе конфигурации.Моя цель - трансформировать, запрещать, применять общие теги и изменять метрики, отправляемые в 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 в некоторые из моих классов для захвата пользовательских событий (Timer, Counter).

Все работает в отношении захвата событий, за исключением того, что в данных в New Relic отсутствуют общие теги, преобразования и все остальное, что я применяю в классе MetricsConfig.

Я что-то упустил, убедившись, что мое приложение правильно подключило MeterRegistryCustomizer?

1 Ответ

0 голосов
/ 22 мая 2018

Arg .. Я реализовал HandlerInterceptorAdapter, чтобы попытаться реализовать Counter для всех запросов с дополнительными тегами.Что, это не понравилось.

...