Публикуйте метрики Spring MVC для нескольких систем мониторинга одновременно с помощью микрометра

У меня есть вариант использования, в котором я хочу одновременно публиковать свои метрики API весенней загрузки в Datadog и CloudWatch.

Я добавил в свой pom следующие зависимости

<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-statsd</artifactId>
  <version>${micrometer.version}</version>
</dependency>

<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-cloudwatch</artifactId>
  <version>${micrometer.version}</version>
</dependency>

Основной класс приложения

@SpringBootApplication
public class MyApplication {
    @Bean
    MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
      return registry -> registry.config().commonTags("my-tag", "my-common-tag");
    }
}

Я также добавил все необходимые свойства в application.properties.

Я вижу, что метрики публикуются как в datadog, так и в CloudWatch с именем метрики по умолчанию http.server.request Но я хочу, чтобы имя метрики для datadog было другим, и для этого я также добавил свойство ниже

management.metrics.web.server.requests-metric-name = i.want.to.be.different

Но это меняет имя как для CloudWatch, так и для datadog.

Мой вопрос в том, как я могу изменить имя метрики по умолчанию только для datadog или оставить разные имена для обоих


person hacks8878    schedule 29.01.2021    source источник


Ответы (1)


Микрометр использует MeterFilters, зарегистрированные с MeterRegistry, для изменения зарегистрированных измерителей. Модификации включают возможность сопоставить ID счетчика с чем-то другим.

В Spring Boot вы можете использовать MeterRegistryCustomizer bean для добавления MeterFilter в реестр. Вы можете использовать универсальные шаблоны для работы с реестром определенного типа, например MeterRegistryCustomizer<DatadogMeterRegistry> для настройщика, который заинтересован только в настройке реестра Datadog.

Собрав все это вместе, вы можете сопоставить ID счетчика http.server.request с i.want.to.be.different, используя следующий bean-компонент:

@Bean
MeterRegistryCustomizer<DatadogMeterRegistry> datadogMeterIdCustomizer() {
    return (registry) -> registry.config().meterFilter(new MeterFilter() {

        @Override
        public Id map(Id id) {
            if ("http.server.request".equals(id.getName())) {
                return id.withName("i.want.to.be.different");
            }
            return id;
        }

    });
}
person Andy Wilkinson    schedule 29.01.2021