我在Spring 2应用程序中使用MicroMeter度量来跟踪对象的状态。在状态更改时,调用statusArrived()方法。此函数应更新与该对象相关的量规。
以下是我目前的实现:
public class PrometheusStatusLogger {
private int currentStatus;
public void statusArrived(String id, int value) {
currentStatus = value;
Tags tags = Tags.of("product_id", id);
Gauge.builder("product_status",this::returnStatus)
.tags(tags)
.strongReference(true)
.register(Metrics.globalRegistry);
}
private int returnStatus(){
return currentStatus;
}
}这很好,但问题是,当调用此方法时,所有的量规值都会被更新。我只想对给定的product_id的量规进行更新。
输入
statusArrived(1, 2);
statusArrived(2, 3);电流输出
product_status{product_id=1} 3
product_status{product_id=2} 3所有量规都会更新。
期望输出
product_status{product_id=1} 2
product_status{product_id=2} 3只更新带有给定product_id标记的量规。
我怎样才能做到这一点?
发布于 2020-02-12 16:16:04
由于您的所有量规都引用相同的currentStatus,当新值传入时,所有量规的源都会更改。相反,使用一个映射来按id跟踪所有当前状态:
public class PrometheusStatusLogger {
private Map<String, Integer> currentStatuses = new HashMap<>();
public void statusArrived(String id, int value) {
if(!currentStatuses.containsKey(id)) {
Tags tags = Tags.of("product_id", id);
Gauge.builder("product_status",currentStatuses, map -> map.get(id))
.tags(tags)
.register(Metrics.globalRegistry);
}
currentStatuses.put(id, value);
}
}https://stackoverflow.com/questions/60171522
复制相似问题