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

Prometheus向量运算报错:求各durable_name序列差值咨询

PromQL多对多匹配的差值计算解决方案

需求

针对每个durable_name,计算指标nss_chan_last_seq的max值与nss_chan_subs_last_sent的min值的差值。

原查询与报错

原last_seq查询

max(nss_chan_last_seq{channel="some-channel", instance=~"some-cluster-cl.*"}) by (channel)

原last_sent查询

min(nss_chan_subs_last_sent{channel="some-channel", durable_name=~"durable-name-s.*", durable_name!~".*test"}) by (channel, durable_name)

原运算语句

max(nss_chan_last_seq{channel="some-channel", instance=~"some-cluster-cl.*"}) by (channel) - on (channel) min(nss_chan_subs_last_sent{channel="some-channel", durable_name=~"durable-name-s-.*", durable_name!~".*test"}) by (channel, durable_name) 

报错信息

execution: found duplicate series for the match group {channel="some-channel"} on the right hand-side of the operation: [{channel="some-channel", durable_name="durable-name-s16"}, {channel="some-channel", durable_name="durable-name-s14"}];many-to-many matching not allowed: matching labels must be unique on one side

解决方案

报错原因是PromQL默认禁止多对多匹配,此处左边单个channel对应一个聚合结果,右边单个channel对应多个durable_name的聚合结果,属于一对多匹配场景,需要用group_left显式声明匹配规则,并保留右侧独有的durable_name标签。

正确查询语句:

max(nss_chan_last_seq{channel="some-channel", instance=~"some-cluster-cl.*"}) by (channel)
- on (channel) group_left(durable_name)
min(nss_chan_subs_last_sent{channel="some-channel", durable_name=~"durable-name-s-.*", durable_name!~".*test"}) by (channel, durable_name)

说明

  • group_left(durable_name):指定以左侧的channel聚合结果为基准,匹配右侧所有同channel的durable_name聚合结果,同时保留右侧的durable_name标签。
  • 最终结果会包含channel和durable_name两个标签,每个durable_name对应一条差值数据,完全满足需求。

内容的提问来源于stack exchange,提问作者Desa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:01:10