我有一个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函数的第三个参数。是原因吗?
我也尝试过使用Counter。当我使用count函数递增它时,它工作正常。
答案 0 :(得分:0)
我知道这是一个古老的问题,可能您已经解决或尝试了另一种解决方案。 我只是遇到了同样的问题,最后,对于量规方法的工作原理存在误解。根据构造函数,量规方法的参数,第3/4位接收一个惰性函数。
我在Prometheus Google网上论坛上问了类似的问题,并找到了解决方案。
以下是我在API上实现的解决方案的摘录:
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是我在普罗米修斯网上论坛上问的。