【问题标题】:Spring Boot Micrometer/Prometheus not logging any Metrics I addedSpring Boot Micrometer/Prometheus 没有记录我添加的任何指标
【发布时间】:2021-11-26 12:41:31
【问题描述】:

所以我尝试在 Spring Boot 2.X 上使用 Micrometer 将指标记录到 Prometheus。我将依赖项添加到 gradle 中:

implementation 'io.micrometer:micrometer-registry-prometheus:latest.release'

然后我尝试添加任何指标,例如:

CompositeMeterRegistry compositeRegistry = new CompositeMeterRegistry();
PrometheusMeterRegistry prometheusMeterRegistry =
    new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
compositeRegistry.add(prometheusMeterRegistry);
long start = System.currentTimeMillis();

doSomething();

long duration = System.currentTimeMillis() - start;

Timer timer =
    Timer.builder("test.times")
        .publishPercentiles(0.5, 0.75, 0.95)
        .maximumExpectedValue(Duration.ofSeconds(15))
        .minimumExpectedValue(Duration.ofSeconds(15))
        .register(compositeRegistry);
timer.record(duration, TimeUnit.MILLISECONDS);
compositeRegistry.timer("test.times.new").record(duration, TimeUnit.MILLISECONDS);
AtomicInteger test = compositeRegistry.gauge("custom.gauge", new AtomicInteger(8));
test.set(30);
Counter counter = compositeRegistry.counter("custom.counter");
counter.increment();

当我转到 localhost:port/actuator/prometheus 时,我可以看到一些指标,例如:

# HELP jvm_gc_pause_seconds Time spent in GC pause
# TYPE jvm_gc_pause_seconds summary
jvm_gc_pause_seconds_count{action="end of minor GC",cause="Metadata GC Threshold",} 1.0
jvm_gc_pause_seconds_sum{action="end of minor GC",cause="Metadata GC Threshold",} 0.045
jvm_gc_pause_seconds_count{action="end of minor GC",cause="G1 Evacuation Pause",} 2.0
jvm_gc_pause_seconds_sum{action="end of minor GC",cause="G1 Evacuation Pause",} 0.036

但是我添加的计时器、仪表或计数器一无所有。我通过代码调试了自己,我可以看到它已执行,当我查看compositeRegistry-Object 时,即使我在值中看不到任何度量的任何结果,我也可以看到一些可用的东西:

我是否缺少需要配置的内容?或者有什么实现问题?

【问题讨论】:

    标签: spring-boot prometheus micrometer spring-micrometer


    【解决方案1】:

    您需要注入仪表注册表,以便您使用的注册表与 Prometheus 端点中使用的注册表相同

    【讨论】:

      【解决方案2】:

      好的,我现在解决了问题,但也许不是最好的方法。我删除了 CompositeMeterRegistry 并将 Timer 直接添加到 globalRegistry:

      Timer timer = Timer.builder(name)
                         .publishPercentiles(0.5,0.75,0.95)
                         .register(Metrics.globalRegistry);
      timer.record(1L, TimeUnit.SECONDS);
      

      这在 Prometheus 端点以及 JConsole 中显示了我想要的信息。

      【讨论】:

        猜你喜欢
        • 2021-05-07
        • 2019-08-09
        • 2020-07-14
        • 1970-01-01
        • 2022-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-22
        相关资源
        最近更新 更多