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个事件的标签
和0个事件的标签mode=A
则应每秒报告300/50m=1个事件mode=B
- 如果有300个事件的标签
和1+个事件的标签mode=A
则应报告为空(无数据)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
)