Микрометр - общие метки для определенных метрик - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь выяснить, как установить общие теги для определенных метрик.ПРИМЕЧАНИЕ: я использую систему мониторинга Cloudwatch.Вот что у меня есть:

@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
    return new MeterRegistryCustomizer<MeterRegistry>() {

        @Override
        public void customize(MeterRegistry registry) {
            registry.config()
                .meterFilter(MeterFilter.denyNameStartsWith("jvm.gc.pause"))
                .meterFilter(MeterFilter.denyNameStartsWith("logback"))
                .meterFilter(MeterFilter.denyNameStartsWith("process"))
                .meterFilter(MeterFilter.denyNameStartsWith("system.cpu"))
                .meterFilter(MeterFilter.denyNameStartsWith("jvm.buffer"))
                .meterFilter(MeterFilter.denyNameStartsWith("jvm.classes")
                .commonTags(Arrays.asList(Tag.of("instanceId", instanceId)));
        }
    };
}

Я думаю о методе MeterFilter, подобном MeterFilter.allow("metric.name").tags("tag1","tag2")

Микрометр позволяет мне устанавливать теги при создании измерителя, однакоэто не помогает мне с метрами, активированными Spring.

Похоже, единственный способ сделать это - создать два объекта MeterRegistryCustomizer, один для метрик Spring и любые создаваемые мной пользовательские метки, которым действительно нужны общие теги идругой для тех, кто этого не делает.

Есть ли способ сделать это, что я скучаю?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Для потомков, вот мое решение с кодом.В выбранном ответе был предложен компонент @Autowired MeterFilter, но он не был необходим для моего конкретного случая использования.

Чтобы различать счетчики, которые я использую и не хочу иметь тег instanceId, я установилтэг-ключ "AGG" для тех, у кого я не хочу иметь тэг instanceId (т. е. они являются метриками, которые будут агрегированы из всех экземпляров), а затем удалите его.

@Bean
public MeterRegistryCustomizer<MeterRegistry> buildMeterRegistry() {
    return new MeterRegistryCustomizer<MeterRegistry>() {

        @Override
        public void customize(MeterRegistry registry) {
            registry.config()
                .meterFilter(new MeterFilter() {

                    @Override
                    public Meter.Id map(Meter.Id id) {

                        // Check for the "AGG" tag
                        if (id.getTag("AGG") != null) {
                            log.debug("Setting an aggregate meter: {} :: {}", id.getName(), id.getTags());
                            // Remove the "AGG" tag
                            List<Tag> tags = id.getTags().stream()
                                .filter(tag -> !StringUtils.equalsIgnoreCase(tag.getKey(), "AGG"))
                                .collect(Collectors.toList());

                            // Create a new Meter.Id
                            return new Meter.Id(id.getName(), tags, id.getBaseUnit(), id.getDescription(), id.getType());
                        }

                        // Create a new Meter.Id with the instanceId tag
                        return new Meter.Id(id.getName(), Arrays.asList(Tag.of("instanceId", instanceId)), id.getBaseUnit(), id.getDescription(), id.getType());
                    }
                })
                .meterFilter(MeterFilter.denyNameStartsWith("jvm.gc.pause"))
                .meterFilter(MeterFilter.denyNameStartsWith("logback"))
                .meterFilter(MeterFilter.denyNameStartsWith("process"))
                .meterFilter(MeterFilter.denyNameStartsWith("system.cpu"))
                .meterFilter(MeterFilter.denyNameStartsWith("jvm.buffer"))
                .meterFilter(MeterFilter.denyNameStartsWith("jvm.classes"));
        }
    };
}
0 голосов
/ 26 декабря 2018

Если вы хотите добавить метки к определенным счетчикам, зарегистрируйте MeterFilter в качестве компонента.Например, см. Следующий код: https://github.com/izeye/sample-micrometer-spring-boot/blob/so-53925641/src/main/java/com/izeye/sample/config/MetricsConfig.java#L40-L52

...