Метрики не отображаются в конечной точке Prometheus, когда я использую PrometheusMeterRegistry микрометра - PullRequest
0 голосов
/ 02 января 2019

Я новичок в микрометре и прометее , и я пытаюсь создать свое первое hello-world приложение, которое будет отслеживаться с использованием микрометра с прометеем в качестве бэкэнда мониторинга. Но я не могу видеть показатели по моему приложению (Counter с и Timer с), появляющимся на конечной точке прометея.

Я следую этому учебнику для Прометея. Я также следил за этим видео для начала работы с микрометром.

Я скачал Прометей из этой ссылки , извлек его и затем запустил Прометей в утиль с помощью команды: ./prometheus --config.file=prometheus.yml. У меня есть цель, установленная в этом файле конфигурации как targets: ['localhost:9090']

Затем я запустил свой основной класс, который выглядит так:

import cern.jet.random.Normal;
import cern.jet.random.engine.MersenneTwister64;
import cern.jet.random.engine.RandomEngine;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
import io.micrometer.core.instrument.logging.LoggingMeterRegistry;
import io.micrometer.jmx.JmxMeterRegistry;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import reactor.core.publisher.Flux;

import java.time.Duration;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class Main {

    public static void main(String[] args) throws InterruptedException {
        CompositeMeterRegistry compositeMeterRegistry = new CompositeMeterRegistry();

        LoggingMeterRegistry loggingMeterRegistry = SampleMeterRegistries.loggingMeterRegistry();
        JmxMeterRegistry jmxMeterRegistry = SampleMeterRegistries.jmxMeterRegistry();
//        AtlasMeterRegistry atlasMeterRegistry = SampleMeterRegistries.atlasMeterRegistry();
        PrometheusMeterRegistry prometheusMeterRegistry = SampleMeterRegistries.prometheus();

        compositeMeterRegistry.add(loggingMeterRegistry);
        compositeMeterRegistry.add(jmxMeterRegistry);
//        compositeMeterRegistry.add(atlasMeterRegistry);
        compositeMeterRegistry.add(prometheusMeterRegistry);


        AtomicInteger latencyForThisSecond = new AtomicInteger(0);
        Gauge gauge = Gauge.builder("my.guage", latencyForThisSecond, n -> n.get())
                .register(compositeMeterRegistry);

        Counter counter = Counter
                .builder("my.counter")
                .description("some description")
                .tags("dev", "performance")
                .register(compositeMeterRegistry);

        Timer timer = Timer.builder("timer")
                .publishPercentileHistogram()
                .sla(Duration.ofMillis(270))
                .register(compositeMeterRegistry);

        // colt/colt/1.2.0 is to be added for this.
        RandomEngine randomEngine = new MersenneTwister64(0);
        Normal incomingRequests = new Normal(0, 1, randomEngine);
        Normal duration = new Normal(250, 50, randomEngine);

        latencyForThisSecond.set(duration.nextInt());

        // For Flux you require io.projectreactor/reactor-core/3.2.3.RELEASE
        Flux.interval(Duration.ofSeconds(1))
                .doOnEach(d -> {
                    if (incomingRequests.nextDouble() + 0.4 > 0) {
                        timer.record(latencyForThisSecond.get(), TimeUnit.MILLISECONDS);
                    }
                }).blockLast();

    }
}

Когда я запускаю ./prometheus --config.file=prometheus.yml, я могу получить доступ к конечной точке http://localhost:9090/metrics, а также http://localhost:9090/graph. Но когда я пытаюсь выполнить запрос на http://localhost:9090/graph sum(timer_duration_seconds_sum) / sum(timer_duration_seconds_count), он говорит no datapoints found.

Мне кажется, что я упускаю что-то очевидное (поскольку я новичок в обеих этих темах).

Может кто-нибудь указать, что мне не хватает?

Я не смог найти (где в моем главном классе) мне нужно настроить URI для публикации для Прометея. Даже если я публикую в http://localhost:9090 (который может быть по умолчанию скрыт где-то за микрометром), я не смог его найти.

1 Ответ

0 голосов
/ 02 января 2019

цели: ['localhost: 9090']

Это Прометей, которого просят очистить себя.

Вам необходимо добавить цель для конечной точки HTTP-приложения Java.

...