如何配置Micronaut和Micrometer将ILP直接写入InfluxDB?
How to configure Micronaut and Micrometer to write ILP directly to InfluxDB?
我有一个 Micronaut 应用程序,它使用 Micrometer 通过 micronaut-micrometer project 向 InfluxDB 报告指标。目前它正在使用通过 io.micronaut.configuration:micronaut-micrometer-registry-statsd
依赖项提供的 Statsd Registry。
我想改为在 Influx Line Protocol (ILP) 中输出指标,但 micronaut-micrometer 项目目前不提供 Influx Registry。我尝试通过导入 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;
}
}
当应用程序运行时,指标会像我预期的那样暴露在我的 /metrics 端点上,但没有任何内容写入 InfluxDB。我确认我的本地 InfluxDB 使用 curl 在预期的 localhost:8086/write?db=metrics
端点接受指标。任何人都可以给我一些指示来使它正常工作吗?我想知道我是否需要在某处手动定义一个记者...
玩了一会儿之后,我用下面的代码让它工作了:
@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);
}
}
我还注意到,从 v1.2.0 开始,InfluxMeterRegistry 将来会在 micronaut-micrometer 上开箱即用。
我有一个 Micronaut 应用程序,它使用 Micrometer 通过 micronaut-micrometer project 向 InfluxDB 报告指标。目前它正在使用通过 io.micronaut.configuration:micronaut-micrometer-registry-statsd
依赖项提供的 Statsd Registry。
我想改为在 Influx Line Protocol (ILP) 中输出指标,但 micronaut-micrometer 项目目前不提供 Influx Registry。我尝试通过导入 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;
}
}
当应用程序运行时,指标会像我预期的那样暴露在我的 /metrics 端点上,但没有任何内容写入 InfluxDB。我确认我的本地 InfluxDB 使用 curl 在预期的 localhost:8086/write?db=metrics
端点接受指标。任何人都可以给我一些指示来使它正常工作吗?我想知道我是否需要在某处手动定义一个记者...
玩了一会儿之后,我用下面的代码让它工作了:
@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);
}
}
我还注意到,从 v1.2.0 开始,InfluxMeterRegistry 将来会在 micronaut-micrometer 上开箱即用。