You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过标签筛选获取最新的指标版本值(以application_version为例)

如何通过标签筛选获取最新的指标版本值(以application_version为例)

嗨Rémy,我之前处理go_info这类带版本标签的指标时,也碰到过完全一样的问题——用last_over_time拿到一堆版本记录,却没法直接提取最新的那个。分享几个亲测有效的解决方法,你可以根据自己的场景选:


方法一:利用版本号的数值化排序(适合x.y.z格式的版本)

如果你的版本号是类似21.1.3这种纯数字加小数点的格式,可以把版本号转换成纯数字,通过数值大小排序来拿到最新版本:

last(sort_desc(
  last_over_time(application_version{site="NYC", instance="Test", id!=""}[1h])
  * on(version) group_left()
  to_number(label_replace(application_version{site="NYC", instance="Test", id!=""}, "version_num", "$1$2$3", "version", "(\\d+)\\.(\\d+)\\.(\\d+)"))
))

原理:

  1. 用label_replace把version标签里的数字部分提取出来(比如21.1.3变成2113),再转成数值
  2. 把原指标的样本值和这个数值相乘,这样新版本对应的样本值会更大
  3. 用sort_desc按样本值从大到小排序,最后用last取最大的那个,就是最新版本的记录

方法二:按样本时间戳排序(适合版本更新时生成新样本的场景)

如果每次版本升级时,旧版本的指标就会停止生成,新版本会生成时间戳更晚的样本,那可以直接按时间戳排序取最新的:

topk(1, last_over_time(application_version{site="NYC", instance="Test", id!=""}[1h]))

原理:
topk(1, ...)会返回样本值最大的前1条,但如果你的指标值都是1,Prometheus在样本值相同时会默认按时间戳排序,刚好返回时间戳最晚的那条,也就是最新的版本记录。


为什么你用without没成功?

without只是在聚合操作中移除指定标签,它的作用是简化结果的标签集,而不是帮你筛选出最新的版本记录。比如你用last_over_time(...) without (id),只会去掉id标签,但还是会保留所有不同版本的记录,所以解决不了你的问题。


备注:内容来源于stack exchange,提问作者Rémy J.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:59:32