Как настроить Micronaut и Micrometer для записи ILP напрямую в InfluxDB? - PullRequest
0 голосов
/ 07 июня 2019

У меня есть приложение Micronaut, которое использует Micrometer для отчета о показателях в InfluxDB с проектом micronaut-micrometer .В настоящее время он использует реестр Statsd, предоставляемый через зависимость io.micronaut.configuration:micronaut-micrometer-registry-statsd.

Я хотел бы вместо этого выводить метрики в протоколе Influx Line Protocol (ILP), но проект микронавт-микрометр в настоящее время не предлагает реестр Influx.Я попытался обойти это, импортировав зависимость io.micrometer:micrometer-registry-influx и сконфигурировав InfluxMeterRegistry вручную следующим образом:

@Factory
public class MyMetricRegistryConfigurer implements MeterRegistryConfigurer {
  @Bean
  @Primary
  @Singleton
  public MeterRegistry getMeterRegistry() {
    InfluxConfig config = new InfluxConfig() {
      @Override
      public Duration step() {
        return Duration.ofSeconds(10);
      }

      @Override
      public String db() {
        return "metrics";
      }

      @Override
      public String get(String k) {
        return null; // accept the rest of the defaults
      }
    };
    return new InfluxMeterRegistry(config, Clock.SYSTEM);
  }

  @Override
  public boolean supports(MeterRegistry meterRegistry) {
    return meterRegistry instanceof InfluxMeterRegistry;
  }
}

При запуске приложения метрики отображаются на моей конечной точке / метрики, как я и ожидал, ноничего не пишется в InfluxDB.Я подтвердил, что мой локальный InfluxDB принимает метрики в ожидаемой конечной точке localhost:8086/write?db=metrics, используя curl.Кто-нибудь может дать мне несколько советов, чтобы это работало?Мне интересно, нужно ли мне где-нибудь вручную определять репортера ...

1 Ответ

1 голос
/ 12 июня 2019

Поработав немного, я понял, что это работает со следующим кодом:

@Factory
public class InfluxMeterRegistryFactory {
  @Bean
  @Singleton
  @Requires(property = MeterRegistryFactory.MICRONAUT_METRICS_ENABLED, value = 
StringUtils.TRUE, defaultValue = StringUtils.TRUE)
  @Requires(beans = CompositeMeterRegistry.class)
  public InfluxMeterRegistry getMeterRegistry() {
    InfluxConfig config = new InfluxConfig() {
      @Override
      public Duration step() {
        return Duration.ofSeconds(10);
      }

      @Override
      public String db() {
        return "metrics";
      }

      @Override
      public String get(String k) {
        return null; // accept the rest of the defaults
      }
    };
    return new InfluxMeterRegistry(config, Clock.SYSTEM);
  }
}

Я также заметил, что InfluxMeterRegistry будет доступен из коробки в будущем для микронавт-микрометра с v1.2.0 .

...