Prometheus Java客户端导出指标后网页端指标未更新问题求助
问题原因及解决方案
- 执行顺序错误
现有循环内的执行顺序是readFiles()→registerPromValues()→休眠5分钟→gauge.set()更新值,这意味着每次读取到的最新文件数值,要先等5分钟休眠结束才会被写入指标,休眠期间刷新页面拿到的永远是上一次循环更新的旧值。 - 重复注册指标冲突
如果registerPromValues()包含新建Gauge并注册到采集注册表的逻辑,每次循环重复调用会导致同名字指标注册冲突,大概率会在控制台抛出异常,后续更新的实际是未被注册的新Gauge对象,对外暴露的始终是首次注册的旧Gauge数值。
修复方案
- 将指标注册逻辑、HTTPServer初始化逻辑移到循环外,全局只执行一次
- 调整循环内执行顺序,读取文件后立刻更新Gauge值,再执行休眠
修复后参考代码:
// 全局只初始化一次HTTPServer HTTPServer server = new HTTPServer.Builder() .withPort(8080) .build(); // 全局只注册一次Gauge,不要放在循环内 Gauge gauge = Gauge.build() .name("your_custom_metric") .help("metric description") .register(); // 指标注册逻辑全局只调用一次即可 registerPromValues(); while (true) { readFiles(); // 读完文件立刻更新指标值 gauge.set(Double.valueOf(result)); // 更新完成后再进入休眠 Thread.sleep(1000*60*5); }
内容的提问来源于stack exchange,提问作者Alejandro Gomez
相关产品推荐
相关产品推荐

