Как добавить пользовательский MeterRegisty для Spring Boot 2

В настоящее время я экспортирую показатели Actuator для своего проекта Spring Boot Webflux в DataDog с интервалом в 10 секунд. Я хотел бы добавить еще один экспортер для одной из наших внутренних систем, которого нет в списке поддерживаемых серверных частей. Глядя на реализацию от DataDogMeterRegistry, я пришел к следующему.

public interface ExternalConfig extends StepRegistryConfig {

  ExternalConfig DEFAULT = k -> null;

  @Override
  default String prefix() {
    return "vwexternal";
  }
}

@Slf4j
public class ExternalMeterRegistry extends StepMeterRegistry {

  public ExternalMeterRegistry() {
    this(ExternalConfig.DEFAULT, Clock.SYSTEM);
  }

  public ExternalMeterRegistry(StepRegistryConfig config, Clock clock) {
    super(config, clock);
  }

  @Override
  protected void publish() {
    log.info("HERE");
  }

  @Override
  protected TimeUnit getBaseTimeUnit() {
    return TimeUnit.MILLISECONDS;
  }
}

@SpringBootApplication
public class MyApplication {
  public static void main(String[] args) {
    SpringApplication.run(MyApplication.class, args);
    Metrics.addRegistry(new ExternalMeterRegistry());
  }
}

Однако это не работает, так как журналы не печатаются.

Мой вопрос: как я могу добавить и внедрить еще один MeterRegistry для Spring Boot Micrometer?


person user3139545    schedule 26.11.2019    source источник
comment
Я считаю, что вам нужно вызвать super.publish() в вашем методе публикации.   -  person checketts    schedule 26.11.2019
comment
Нет, это абстрактный метод, и его нельзя вызывать напрямую.   -  person user3139545    schedule 26.11.2019


Ответы (1)


Вам нужно start опубликовать. Сравните с LoggingMeterRegistry

В вашем конструкторе что-то вроде:

start(new NamedThreadFactory("vw-metrics-publisher"))
person checketts    schedule 26.11.2019