Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prometheus 仅当在指定时间内未记录标签B的相同度量时,如何返回标签A的度量?_Prometheus_Promql - Fatal编程技术网

Prometheus 仅当在指定时间内未记录标签B的相同度量时,如何返回标签A的度量?

Prometheus 仅当在指定时间内未记录标签B的相同度量时,如何返回标签A的度量?,prometheus,promql,Prometheus,Promql,我有一个计数器度量值my_event,它有标签mode=a | B、标签pod(pod是一个k8s pod id)和一些其他标签。我需要的是显示图表,显示每个pod的my\u事件/每秒。但是,我只想考虑带有标签mode=A的事件,并且仅当带有标签mode=B的事件在给定时间内未被记录时(对于同一pod)。如果在给定时间内,标签为mode=B的事件至少记录了一次,则此时的图形值应为空。“给定时间”是指类似于[5m]的“回望”向量 因此,当prom检查一个吊舱最后[5m]的每个“点”时,则: 如果

我有一个计数器度量值
my_event
,它有标签
mode=a | B
、标签
pod
(pod是一个k8s pod id)和一些其他标签。我需要的是显示图表,显示每个
pod
my\u事件/每秒
。但是,我只想考虑带有标签
mode=A
的事件,并且仅当带有标签
mode=B
的事件在给定时间内未被记录时(对于同一pod)。如果在给定时间内,标签为
mode=B
的事件至少记录了一次,则此时的图形值应为空。“给定时间”是指类似于
[5m]
的“回望”向量

因此,当prom检查一个吊舱最后[5m]的每个“点”时,则:

  • 如果有300个事件的标签
    mode=A
    和0个事件的标签
    mode=B
    则应每秒报告300/50m=1个事件
  • 如果有300个事件的标签
    mode=A
    和1+个事件的标签
    mode=B
    则应报告为空(无数据)
所有这些都应按标签
pod
(显示每个pod的数据)分组

目前,我的查询如下所示(它为每个pod每秒显示标签为
mode=A
的事件:

sum (rate(event_proc_worker_events_total{mode="A"}[5m])) by (pod)

如果[5m]期间同一pod上发生
mode=B
事件,我如何修改此查询以返回null?

这可以使用逻辑运算符实现,特别是“除非”。引用文档:

vector1,除非vector2生成一个由vector1元素组成的向量,而vector2中没有具有完全匹配标签集的元素。两个向量中的所有匹配元素都将被删除

像这样的方法应该会奏效:

sum(                                                
  rate(event_proc_worker_events_total{mode="A"}[5m])
) by (pod)
unless 
(      
  sum( 
    rate(event_proc_worker_events_total{mode="B"}[5m])
  ) by (pod)
  > 0
)