Настройте micrometer-registry-statsd в весенней загрузке 2

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

У меня есть приложение Spring Boot 2. В pom.xml я определил:

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

В application.conf:

management.metrics.export.statsd.host=localhost
management.metrics.export.statsd.port=8125
management.metrics.export.statsd.flavor=etsy
management.metrics.export.statsd.step=2m
management.metrics.export.statsd.enabled=true
management.endpoints.web.exposure.include=health,metrics

В приложении при его запуске я хочу экспортировать новую метрику (счетчик):

@SpringBootApplication
public class MyApplication {

  private static final Logger LOG = LoggerFactory.getLogger(MyApplication.class);

  private static final StatsdConfig config = new StatsdConfig() {
    @Override
    public String get(String k) { return null; }
    @Override
    public StatsdFlavor flavor() { return StatsdFlavor.ETSY; }
  };

  private static final MeterRegistry registry = new StatsdMeterRegistry(config, Clock.SYSTEM);

  public static void main(String[] args) {
    // globalRegistry is composite hence was hoping they will unite into one
    Metrics.globalRegistry.add(registry);

    Counter myCounter = Counter
        .builder("myCounter")
        .description("indicates instance count of the object")
        .tags("dev", "performance")
        .register(registry);
//      .register(Metrics.globalRegistry);

    myCounter.increment(2.0);
    LOG.info("Counter: " + myCounter.count());
    SpringApplication.run(MyApplication.class, args);
  }

}

Если он закодирован, как указано выше, он недоступен в http://localhost:8081/actuator/metrics/myCounter. Но если я раскомментирую .register(Metrics.globalRegistry); и прокомментирую предыдущую строку, то http://localhost:8081/actuator/metrics/myCounter будет содержать метрику, но ее значение будет 0.0 вместо 2.0.

Я хочу, чтобы мой настраиваемый реестр содержал настраиваемые метрики, определенные в приложении, и чтобы он был правильно зарегистрирован и доступен в конечной точке метрик, после чего его можно будет экспортировать в StatsD. Знаете ли вы, что мне не хватает в приведенном выше?

Я следил за этими документами https://www.baeldung.com/микрометр и https://micrometer.io/docs/registry/statsD. Как создать bean-компонент для моего кода или, альтернативно, как использовать автоматически настраиваемый реестр с помощью Spring Boot?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
4 460
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Автоконфигурация Spring Boot Micrometer автоматически вызывает любые MeterBinder bean-компоненты, чтобы привязать их счетчики к автоматически настроенным MeterRegistry. С необходимыми зависимостями StatsD от пути к классам, которые у вас уже есть, это будет реестр на основе StatsD. Я бы рекомендовал использовать эту автоматическую настройку, а не настраивать все самостоятельно. В настоящее время у вас будет как автоматически настроенный реестр, так и ваш собственный. Автоматически настроенный реестр будет отключен и не будет создан, если вы выставите свой реестр как компонент Spring.

Я бы рекомендовал удалить ваши StatsdConfig и StatsdMeterRegistry и вместо этого использовать автонастройку. Затем вы можете использовать боб MeterBinder, чтобы связать свой счетчик. В результате основной класс вашего приложения будет выглядеть примерно так:

@SpringBootApplication
public class MyApplication {

    @Bean
    public MeterBinder exampleMeterBinder() {
        return (meterRegistry) -> Counter.builder("myCounter")
            .description("indicates instance count of the object")
            .tags("dev", "performance")
            .register(meterRegistry);
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApplication, args);
    }

}

Мне нравится ваше решение, как я могу получить доступ к счетчику, чтобы увеличить его внутри основного метода? Пытаюсь что-то вроде Metrics.globalRegistry.get('myCounter') в данный момент...

Robin 26.06.2019 18:23

Обычно вы храните его в bean-компоненте, из которого вы можете получить счетчик или вызвать, чтобы он увеличил его. Вы бы определили этот bean-компонент с помощью другого метода @Bean и получили бы к нему доступ в своем методе main, вызвав getBean в контексте приложения, возвращенном из run.

Andy Wilkinson 26.06.2019 18:27

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