春季启动普罗米修斯千分尺 - 仪表不更新

Posted

技术标签:

【中文标题】春季启动普罗米修斯千分尺 - 仪表不更新【英文标题】:Spring boot prometheus micrometers - Gauge not updating 【发布时间】:2020-08-29 10:38:33 【问题描述】:

我有一个 SpringBoot 2.2.4.RELEASE 和 RestRepostory 之类的

import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;

@RestController
public class MyController 

    private MeterRegistry meterRegistry;

    public MyController(MeterRegistry meterRegistry) 
        this.meterRegistry = meterRegistry;
    

    private Gauge myGauge;
    private Integer myInteger = 0;

    @PostConstruct
    private void init() 
        myGauge = Gauge.builder("my.gauge", myInteger, Integer::intValue)
                .register(meterRegistry);
    

    @GetMapping("/count")
    public void count() 
        myInteger = 5;
    


应用启动后,去http://localhost:8082/actuator/prometheus可以看到

# HELP my_gauge  
# TYPE my_gauge gauge
my_gauge 0.0

但是去http://localhost:8082/count/之后,值还是0.0

有什么问题?我也不明白 builder 函数的第三个参数。是原因吗?

我也尝试过使用计数器。当我使用 count 函数增加它时,它工作正常。

【问题讨论】:

【参考方案1】:

我知道这是一个老问题,您可能已经解决或尝试了其他解决方案来解决您的问题。 我刚刚遇到了同样的问题,最后,这是对仪表方法如何工作的误解。第 3/4 个,依赖于 gauge 方法的构造函数,参数,接收一个惰性函数。

我在 Prometheus Google Group 上问了一个类似的问题,同时找到了解决方案。

这是我在 API 上实现的解决方案的 sn-p:

private final Map<String, AtomicInteger> statusCodes = new HashMap<>();

.
.
.

private void createOrUpdateMetric(String healthType, Status status) 
    statusCodes.put(healthType, new AtomicInteger(healthToCode(status)));

    Gauge.builder(HEALTH, statusCodes, statusCodes -> statusCodes.get(healthType).get())
         .tags(Tags.of(Tag.of(HEALTH_TYPE, healthType)))
         .description(HEALTH_DESCRIPTION + healthType)
         .register(meterRegistry);

这里是is the question 我在 Prometheus Groups 上问的。

【讨论】:

以上是关于春季启动普罗米修斯千分尺 - 仪表不更新的主要内容,如果未能解决你的问题,请参考以下文章

千分尺相当于普罗米修斯的标签

千分尺和普罗米修斯计时器作为速率

Quarkus - 将千分尺指标推送到普罗米修斯

Grafana 仪表板显示从普罗米修斯删除的信息

获取将千分尺集成到弹性搜索应用程序的异常

Prometheus:PromQL 减法,相同的标签,不同的值