繁体   English   中英

在spring boot 2中配置micrometer-registry-statsd

[英]Configure micrometer-registry-statsd in spring boot 2

我已经花了几天时间,无法让它工作,春天的仪器新手。

我有一个春季启动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/micrometerhttps://micrometer.io/docs/registry/statsD 如何为我的代码创建一个bean,或者如何使用Spring Boot自动配置的注册表?

Spring Boot的Micrometer自动配置将自动调用任何MeterBinder bean将其仪表绑定到自动配置的MeterRegistry 使用已有的类路径上必需的StatsD依赖项,这将是一个基于StatsD的注册表。 我建议使用这种自动配置,而不是自己配置。 事实上,您将拥有一个自动配置的注册表和您自己的注册表。 如果您将注册表公开为Spring bean,则自动配置的注册表将退回并且不会创建。

我建议删除你的StatsdConfigStatsdMeterRegistry并使用自动配置。 然后,您可以使用MeterBinder bean绑定您的计数器。 这将使您的应用程序的主类看起来像这样:

@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);
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM