当前位置: 首页 > 知识库问答 >
问题:

当我使用Micrometer的PrometheusMeterRegistry时,prometheusendpoint不显示度量

解飞语
2023-03-14

我是micrometer和prometheus的新手,我正在尝试构建我的第一个hello-world应用程序,使用micrometer和prometheus作为监控后端进行监控。但我看不到prometheusendpoint上显示的应用程序(计数器计时器)的度量。

我正在学习普罗米修斯的教程。我也跟着这个视频开始千分尺。

我从这个链接下载了prometheus,提取了它,然后使用命令:./prometheus--config.file=prometheus.yml运行prometheus来报废。我正在此配置文件中将目标设置为目标:['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时,可以访问endpointhttp://localhost:9090/metricshttp://localhost:9090/graph。但当我尝试在http://localhost:9090/graphsum(timer_duration_seconds_sum)/sum(timer_duration_seconds_count)执行查询时,它显示找不到数据点

在我看来,我缺少了一些显而易见的东西(因为我是这两个话题的初学者)。

有人能指出我缺什么吗?

我找不到(在我的主类中)我必须配置URI为Prometheus发布。即使我发布到http://localhost:9090(默认情况下按微米隐藏在某个地方),我也找不到它。

共有1个答案

胡鸿远
2023-03-14

目标:['localhost:9090']

那是普罗米修斯被要求刮自己。

您需要为Java应用程序的HTTP端点添加一个目标。

 类似资料:
  • 这里的任何帮助都是非常感谢的。

  • 我们的千分尺依赖关系是 我希望能够显示REST API的延迟度量。 null 我从micrometer文档https://micrometer.io/docs/concepts#_client_side中了解到,通过组合上面生成的两个度量:totalTime/Count来计算延迟。 但是我们的数据源是InfluxDB,它不支持组合度量,https://docs.influxdata.com/Inf

  • 我已经为我的spring boot应用程序配置了测微计和prometheus,我可以在endpoint/执行器/prometheus处看到以下指标(使用计时器生成): 但当我在Grafana中运行其中一个查询(针对prometheus实例配置)时,我没有看到任何结果。 这需要任何配置吗?

  • 我有两个服务,和,其中向发送请求。此指标显示在服务的endpoint上: <代码>仪表。伺服。希斯特里克斯。hystrixcommand公司。http://pong.pongclient#hello().90 但它不会出现在endpoint上。此endpoint上会出现其他指标,但不会显示包含有关飞度/Hystrix超文本传输协议请求信息的伺服指标。 如何让这些指标出现在prometheusend

  • 在切换到微米之前,我们在几个Spring Boot应用程序中利用了Prometheus。Prometheus以毫秒为单位显示了我们所有的计时。现在我们已经切换到微米,所有计时器和指标都以秒为单位。我能够通过扩展并覆盖来修改最大指标,但的总和指标不尊重相同的覆盖。