Как отфильтровать счетчики при публикации NewRelicMeterRegistry - PullRequest
0 голосов
/ 03 ноября 2019

Я использую пользовательские таймеры для обработки тонны полей с помощью микрометра. В идеале я не хочу, чтобы показатели, сообщаемые для этого конкретного счетчика, имели нулевое число между настроенным интервалом шага. Это не критично, но хотелось бы уменьшить шум того, что отправляется в NR каждые x секунд.

Я создал расширение для 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 или микрометр, чтобы соблюдать мою реализацию и использовать это как обозначенный bean-компонент в контексте приложения для целей автоматического подключения?

Также, если есть готовый способ переопределить это поведение с помощью абстракций или утилиты микрометра,Круто, что было бы еще лучше! Пожалуйста, дайте мне знать. Я пытался использовать MeterRegistryCustomizer, но, похоже, у меня не было того, что мне нужно.

Я хочу избежать использования функций планирования Spring через @Scheduled, хотел бы сделать это при публикации. основа.

1 Ответ

0 голосов
/ 04 ноября 2019

, если вы не хотите использовать автоматическую настройку по умолчанию, отключите настройку по умолчанию с помощью этого

@SpringBootApplication(exclude = { NewRelicMetricsExportAutoConfiguration.class })

и расширьте свой класс FilteringNewRelicMeterRegistry с помощью StepMeterRegistry и настройте его с вашими обязанностями, потому что StepMeterRegistry является подклассом для MeterRegistry, и микрометр определяет вашу конфигурацию

после регистрации вашей пользовательской конфигурации в этом классе конфигурации, аналогичном NewRelicMetricsExportAutoConfiguration, требуется StepMeterRegistry. StepRegistryConfig и Clock используют значение по умолчанию NewRelicConfig и часы и регистрируются, как это, я читаю NewRelicMetricsExportAutoConfiguration и упрощаю настройку, как этот

...