如何合并两个Prometheus布尔查询并按指定逻辑输出结果?
Prometheus布尔查询合并实现
基础查询(均输出布尔值)
- Query1:
state{token="59cdefc6f4e9ac94"} == 1
- Query2:
state{token="c86fc1f35d479759"} == 0
合并规则
- 当Query2能查到结果时,执行逻辑与运算:
- 1 与 1 → 返回1
- 1 与 0 → 返回0
- 0 与 1 → 返回0
- 0 与 0 → 返回0
- 当Query2无结果时,直接返回Query1的结果
最终可用的PromQL语句
用以下查询就能实现上述逻辑:
(bool state{token="59cdefc6f4e9ac94"} == 1) and on() (bool state{token="c86fc1f35d479759"} == 0 or vector(1))
逻辑说明
- 当Query2存在结果时,
vector(1)会被忽略,直接用Query2的布尔值和Query1做逻辑与; - 当Query2无结果时,
vector(1)会生成一个值为1的虚拟序列,此时逻辑与就等价于直接返回Query1的结果。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

