如何为 Spring Boot 2 添加自定义 MeterRegisty

Posted

技术标签:

【中文标题】如何为 Spring Boot 2 添加自定义 MeterRegisty【英文标题】:How to add custom MeterRegisty for Spring Boot 2 【发布时间】:2020-03-21 14:13:22 【问题描述】:

我目前正在以 10 秒的间隔将我的 Spring Boot Webflux 项目的执行器指标导出到 DataDog。我想为我们的一个内部系统添加另一个导出器,该系统不在支持的后端列表中。查看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());
  

但是这不起作用,因为没有打印日志。

我的问题是如何为 Spring Boot Micrometer 添加和实现另一个 MeterRegistry?

【问题讨论】:

我相信你需要在你的发布方法中调用super.publish() 不,那是抽象方法,不能直接调用。 【参考方案1】:

您需要start 发布。与LoggingMeterRegistry比较

在您的构造函数中类似于:

start(new NamedThreadFactory("vw-metrics-publisher"))

【讨论】:

以上是关于如何为 Spring Boot 2 添加自定义 MeterRegisty的主要内容,如果未能解决你的问题,请参考以下文章

如何为 ZuulException 自定义 Spring Boot 控制器 API 响应

如何为 Spring Boot 应用程序设置自定义 Http 标头“服务器”

如何为我的 Spring Boot 控制器执行单元测试?

如何为spring数据编写自定义模块

如何为 Spring Web 流定义自定义消息源?

如何为 MongoDB 和 Spring Boot 定义主机名到 docker-compose.yml