Микрометр Таймер и Spring Boot 2.0.4 - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь отправить метрики в 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);
    }
}

Счетчик работает нормально, а таймер - нет.

1 Ответ

0 голосов
/ 10 октября 2018

Я подозреваю, что это дубликат этого вопроса , но для Timer.Sample.Пожалуйста, посмотрите мой ответ на вопрос, чтобы понять, как работает шаговая версия счетчиков.

Я также добавил тест для Timer.Sample, чтобы подтвердить, что он работает.

ОБНОВЛЕНИЕ:

Как и требовалось в комментарии ниже, я обновил образец , чтобы использовать автоматически настроенный.

И я подтвердил, что он работает (по крайней мере, в Spring BootПривод): http://localhost:8080/actuator/metrics/hello.timer

{
  "name" : "hello.timer",
  "description" : null,
  "baseUnit" : "milliseconds",
  "measurements" : [ {
    "statistic" : "COUNT",
    "value" : 1.0
  }, {
    "statistic" : "TOTAL_TIME",
    "value" : 0.225828
  }, {
    "statistic" : "MAX",
    "value" : 0.225828
  } ],
  "availableTags" : [ ]
}

ОБНОВЛЕНИЕ 2:

FTR Я подтвердил его публикацию в InfluxDB следующим образом:

> delete from hello_timer 
> select * from hello_timer 
> select * from hello_timer 
name: hello_timer 
time count mean metric_type sum upper 
---- ----- ---- ----------- --- ----- 
1539266391883000000 1 0.54792 histogram 0.54792 0.54792 
>
...