Микрометр Spring Boot игнорирует настройку Management.metrics.export.statsd.host

Я пытаюсь добавить метрики StatsD в загрузочное приложение Spring с помощью Micrometer.

Он работает локально, но не работает в рабочей среде, регистрируя ошибки, в которых говорится, что он не может подключиться к localhost:8125, несмотря на то, что management.metrics.export.statsd.host настроен правильно.

Я добавил в сервис конечную точку, которая возвращает значение свойства приложения management.metrics.export.statsd.host, и она возвращает значение, которое я настроил, так что эта часть кажется хорошей, но по какой-то причине свойство приложения management.metrics.export.statsd.host игнорируется микрометром.

Я добавил отчеты по метрикам StatsD в свое приложение, добавив это в файл pom.xml:

        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-statsd</artifactId>
            <version>1.13.1</version>
        </dependency>

И добавляем это в файл application.properties:

management.metrics.export.statsd.enabled=true
management.metrics.export.statsd.host=deliberately_broken
management.metrics.export.statsd.port=8125

На моей локальной машине он успешно выводит метрики на localhost, несмотря на то, что deliberately_broken является настроенным именем хоста, а на производстве он также пытается отправить метрики на localhost, даже если это свойство приложения установлено правильно.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
0
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

После многих утомительных часов поиска в Интернете и различных экспериментов я наконец нашел способ заставить это работать. Очень грустно, что ни одна документация по Spring, Micrometer или StatsD на самом деле не говорит вам, как заставить его работать даже в самом простом случае использования. Также довольно грустно, что необходимо написать кучу кода только для того, чтобы Spring/Micrometer/StatsD вел себя в соответствии с документацией.

Решение, которое я нашел, возможно, не является идеальным ответом, но оно сработало для меня. Это класс, который я добавил в свое приложение:

@Configuration
public class MicrometerConfig {
  @Value("${management.metrics.export.statsd.host}")
  private String host;

  @Value("${management.metrics.export.statsd.port}")
  private Integer port;

  @Value("${management.metrics.export.statsd.enabled}")
  private boolean enabled;

  @Bean
  @Scope("singleton")
  public StatsdConfig buildStatsdConfig() {
    return new StatsdConfig() {
      @Override
      public String get(String s) {
        return s;
      }

      @Override
      public String prefix() {
        return "";
      }

      @Override
      public boolean enabled() {
        return enabled;
      }

      @Override
      public String host() {
        return host == null ? "localhost" : host;
      }

      @Override
      public int port() {
        return port == null ? 8125 : port;
      }

      @Override
      public StatsdFlavor flavor() {
        return StatsdFlavor.DATADOG;
      }

      @Override
      public StatsdProtocol protocol() {
        return StatsdProtocol.UDP;
      }

      @Override
      public Duration pollingFrequency() {
        return Duration.ofSeconds(5);
      }

      @Override
      public Duration step() {
        return Duration.ofMinutes(1);
      }
    };
  }

  @Bean
  @Scope("singleton")
  public StatsdMeterRegistry buildStatsdMeterRegistry(StatsdConfig statsdConfig) {
    StatsdMeterRegistry registry =
        StatsdMeterRegistry.builder(statsdConfig).clock(Clock.SYSTEM).build();
    return registry;
  }
}

После этого изменение application.properties в соответствии с документацией Spring/Micrometer/StatsD теперь работает так, как ожидалось.

Ответ принят как подходящий

Согласно официальной документации, для Spring Boot 3.x следует использовать свойство management.statsd.metrics.export.host.

Свойство management.metrics.export.statsd.host ранее было в Spring Boot 2.x, которое больше не поддерживается.

Поскольку это свойство Boot, его следует найти в официальной документации Boot, см.: management.statsd.metrics.export.host

Возможно, есть место, где это задокументировано правильно, но есть сотни мест, где это неверно, поэтому найти правильный конфиг — все равно, что найти иголку в стоге сена.

bikeman868 10.07.2024 20:53

Имя свойства было изменено в Boot 3.x, поэтому оно отличается для Boot 2.x и 3.x. Это сделало ссылки на старые свойства устаревшими для Boot 3.x. Единственным источником правды является официальная документация Spring Boot для той версии, которую вы используете.

Jonatan Ivanov 11.07.2024 00:22

Я обновил ваш ответ этой информацией.

bikeman868 12.07.2024 07:25

Другие вопросы по теме