Настройте micrometer-registry-statsd в весенней загрузке 2 - PullRequest
0 голосов
/ 24 июня 2019

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

У меня есть приложение с весенней загрузкой 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/micrometer и https://micrometer.io/docs/registry/statsD. Как создать bean-компонент для моего кода или, как альтернативно, использовать автонастроил реестр с помощью Spring Boot?

1 Ответ

0 голосов
/ 26 июня 2019

Автоматическая конфигурация микрометра Spring Boot автоматически вызывает любые бины MeterBinder, чтобы связать их счетчики с автоматически настроенной 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);
    }

}
...