如何在VictoriaMetrics的MetricsQL中忽略version标签计算聚合平均值?
在VictoriaMetrics查询中忽略version标签并返回单个平均值
问题描述
我有一条可用的VictoriaMetrics查询语句:
avg_over_time(label_1{label_id_1 = "123", label_id_2 = "456"} [100s])
该语句多数情况下返回单个向量值,但当时间序列存在不同version标签时,会返回两个不符合预期的值,示例结果:
[ { "metric": { "__name__": "label_1", "version": "1", "label_id_1": "123", "label_id_2": "456" }, "value": [ 1710597352.247, "2986.54887451" ], "group": 1 }, { "metric": { "__name__": "label_1", "version": "2", "label_id_1": "123", "label_id_2": "456" }, "value": [ 1710597352.247, "369872.158964" ], "group": 1 } ]
需要在计算平均值时忽略version标签,确保每次返回单个值,预期结果如下(数值为示例):
[ { "metric": { "__name__": "label_1", "label_id_1": "123", "label_id_2": "456" }, "value": [ 1710597352.247, "12346579.46694" ], "group": 1 } ]
解决方案
可以使用VictoriaMetrics支持的group without语法,忽略version标签后对结果进行聚合,具体查询语句如下:
avg_over_time(label_1{label_id_1 = "123", label_id_2 = "456"} [100s]) | group without (version) by (__name__, label_id_1, label_id_2) (avg)
说明
group without (version):指定忽略version标签,将所有匹配剩余标签(__name__、label_id_1、label_id_2)的序列聚合在一起。- 末尾的
(avg):表示对聚合后的多个平均值再计算一次平均,若业务需求是求和,可替换为(sum)。
执行该查询后,返回结果会自动去除version标签,且仅返回单个向量值,符合预期要求。
内容的提问来源于stack exchange,提问作者underachiever
相关产品推荐
相关产品推荐

