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

Prometheus向量能否添加标签?如何在状态查询中保留指标标签

PromQL查询保留标签的解决方案

问题描述

使用以下PromQL查询时,预期实现:当receiver_audio_track_bitrate速率为0且sender_audio_track_bitrate速率大于0时,输出值为1的向量;否则输出值为0的向量。但当前生成的向量不包含两个指标的标签,需要保留这些标签或找到替代实现方案。

原查询:

(vector(1) and on() 
    rate(receiver_audio_track_bitrate{pod_name=~"$pod",session_id=~"$session"}[$__rate_interval]) == 0) 
    and on() (rate(sender_audio_track_bitrate{session_id=~"$session"}[$__rate_interval]) > 0)) 
or on() vector(0)

问题原因

原查询中使用on()进行无标签匹配,这会丢弃所有时间序列的标签信息,最终返回一个无标签的标量向量,这就是结果没有标签的核心原因。要保留标签,需要基于共同标签(比如session_id)进行匹配,让结果继承原指标的标签。

替代实现方案

方案1:布尔比较+标签匹配(兼容所有Prometheus版本)

通过bool修饰比较运算符,返回带标签的0/1向量,再基于共同标签关联两个指标,最后补充不满足条件时的0值并保留标签:

(
  # 接收端速率为0时返回带标签的1,否则返回0
  rate(receiver_audio_track_bitrate{pod_name=~"$pod",session_id=~"$session"}[$__rate_interval]) == bool 0
)
and on(session_id)
(
  # 发送端速率大于0时返回带标签的1,否则返回0
  rate(sender_audio_track_bitrate{session_id=~"$session"}[$__rate_interval]) > bool 0
)
or on(session_id,pod_name)
(
  # 不满足条件时返回带原接收端标签的0
  (
    rate(receiver_audio_track_bitrate{pod_name=~"$pod",session_id=~"$session"}[$__rate_interval]) != bool 0
    or on(session_id) rate(sender_audio_track_bitrate{session_id=~"$session"}[$__rate_interval]) <= bool 0
  ) * 0
)

说明:

  • == bool和> bool会保留原指标的标签,返回值为1(满足条件)或0(不满足)
  • and on(session_id)确保只有session_id匹配的接收端和发送端记录才会被关联,结果继承接收端的pod_name和session_id标签
  • 最后一段or处理所有不满足条件的情况,返回带相同标签的0值

方案2:使用if表达式(Prometheus v2.42+支持)

如果你的Prometheus版本在v2.42及以上,可以直接使用if...then...else表达式,语法更简洁,且自动保留原指标的标签:

if (
  rate(receiver_audio_track_bitrate{pod_name=~"$pod",session_id=~"$session"}[$__rate_interval]) == 0
  and on(session_id) rate(sender_audio_track_bitrate{session_id=~"$session"}[$__rate_interval]) > 0
) then 1 else 0

说明:

  • 条件中的第一个指标是receiver_audio_track_bitrate,结果会自动继承它的pod_name和session_id标签
  • 满足条件时返回1,否则返回0,所有标签都会被保留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:50:47