Я пытаюсь отправить метрики в InfluxDB с помощью Spring Boot 2.0.4 + Micrometer, но работает только счетчик, а Timer - нет.
Итак, это мои зависимости:
...
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-influx</artifactId>
</dependency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>2.8</version>
</dependency>
...
Использование счетчика, как я уже сказал, все работает, см .:
private final Counter counter = Metrics.counter("my.counter", "my.extra.tag", this.getClass().getCanonicalName());
counter.increment();
Но таймер не работает,я пробовал @Timed и Timer.sample, оба не отправляют метрики в effxDB.Я аннотировал метод внутри класса @Service вместе с ним:
@Timed(value = "my.timer", extraTags = { "my.extra.tag", "TimerSomething" })
Итак, я попытался изменить на Timer.sample следующим образом: https://micrometer.io/docs/concepts#_storing_start_state_in_code_timer_sample_code,, но ничего не отправлено в effxDB.
Это мои свойства для настройки притока:
management.endpoints.web.exposure.include: info, health, metrics
management.metrics.export.influx.enabled=true
management.metrics.export.influx.auto-create-db=false
management.metrics.export.influx.batch-size=10000
management.metrics.export.influx.db=my.metrics.db
management.metrics.export.influx.uri=http://xxxxx:8086
Редактировать 1:
Я пытался создать простой тест, см .:
@RunWith(MockitoJUnitRunner.class)
public class MicrometerTest {
private final InfluxConfig config = new InfluxConfig() {
@Override
public String get(String s) {
return null;
}
@Override
public Duration step() {
return Duration.ofSeconds(5);
}
@Override
public boolean autoCreateDb() {
return false;
}
@Override
public String db() {
return "mydb";
}
@Override
public String uri() {
return "http://xxxx:8086";
}
};
private final InfluxMeterRegistry registry = new InfluxMeterRegistry(this.config, Clock.SYSTEM);
@Test
public void counter() throws InterruptedException {
Counter counter = this.registry.counter("my.counter", Tags.of("key", "value"));
counter.increment();
TimeUnit.SECONDS.sleep(5);
TimeUnit.SECONDS.sleep(5);
}
@Test
public void verifica_se_timer_funciona() throws InterruptedException {
Timer.Sample sample = Timer.start(this.registry);
TimeUnit.SECONDS.sleep(1);
Timer timer = this.registry.timer("my.timer", "response", "200");
sample.stop(timer);
TimeUnit.SECONDS.sleep(5);
}
}
Счетчик работает нормально, а таймер - нет.