在 spring boot 2 中配置 micrometer-registry-statsd
Configure micrometer-registry-statsd in spring boot 2
我已经用了几天但无法正常工作,我是 spring 中的新手。
我有一个 spring boot 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. But if I uncomment .register(Metrics.globalRegistry);
and comment the previous line then http://localhost:8081/actuator/metrics/myCounter 下不可用包含指标,但它的值是 0.0
而不是 2.0
。
我想要的是让我的自定义注册表包含跨应用程序定义的自定义指标,并在指标端点下正确注册和可用,然后它可以导出到 StatsD。你知道我在上面遗漏了什么吗?
我遵循了这些文档 https://www.baeldung.com/micrometer and https://micrometer.io/docs/registry/statsD。如何为我的代码创建一个 bean 或者如何通过 Spring Boot 使用自动配置的注册表?
Spring Boot 的 Micrometer auto-configuration 将自动调用任何 MeterBinder
bean 将它们的 meter 绑定到 auto-configured MeterRegistry
。在您已经拥有的 class 路径上具有必要的 StatsD 依赖项,这将是一个 StatsD-based 注册表。我建议使用这个 auto-configuration 而不是自己配置。按照目前的情况,您将同时拥有 auto-configured 注册表和您自己的注册表。如果您将注册表作为 Spring bean 公开,auto-configured 注册表将退缩并且不会被创建。
我建议删除您的 StatsdConfig
和 StatsdMeterRegistry
并改用 auto-configuration。然后您可以使用 MeterBinder
bean 来绑定您的计数器。这将使您的应用程序的主要 class 看起来像这样:
@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);
}
}
我已经用了几天但无法正常工作,我是 spring 中的新手。
我有一个 spring boot 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. But if I uncomment .register(Metrics.globalRegistry);
and comment the previous line then http://localhost:8081/actuator/metrics/myCounter 下不可用包含指标,但它的值是 0.0
而不是 2.0
。
我想要的是让我的自定义注册表包含跨应用程序定义的自定义指标,并在指标端点下正确注册和可用,然后它可以导出到 StatsD。你知道我在上面遗漏了什么吗?
我遵循了这些文档 https://www.baeldung.com/micrometer and https://micrometer.io/docs/registry/statsD。如何为我的代码创建一个 bean 或者如何通过 Spring Boot 使用自动配置的注册表?
Spring Boot 的 Micrometer auto-configuration 将自动调用任何 MeterBinder
bean 将它们的 meter 绑定到 auto-configured MeterRegistry
。在您已经拥有的 class 路径上具有必要的 StatsD 依赖项,这将是一个 StatsD-based 注册表。我建议使用这个 auto-configuration 而不是自己配置。按照目前的情况,您将同时拥有 auto-configured 注册表和您自己的注册表。如果您将注册表作为 Spring bean 公开,auto-configured 注册表将退缩并且不会被创建。
我建议删除您的 StatsdConfig
和 StatsdMeterRegistry
并改用 auto-configuration。然后您可以使用 MeterBinder
bean 来绑定您的计数器。这将使您的应用程序的主要 class 看起来像这样:
@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);
}
}