PromQL 中如何写 OR 逻辑运算?

PromQL 的 or 运算符合并两个向量的结果集:up{job="a"} or up{job="b"};标签匹配内部用 =~"a|b" 正则更简洁。本文讲解 or/and/unless 的语义与常见写法。

最佳实践
PromQL 中如何写 OR 逻辑运算?封面

两种写法按场景选:标签内取值用正则 =~"a|b";合并两个不同查询的结果集用集合运算符 or

场景一:同一标签取多个值(正则)

http_requests_total{status=~"500|502|503"}

最常用、最高效——一个查询搞定。

场景二:or 合并两个查询

# job=a 的实例 或 job=b 的实例
up{job="app"} or up{job="db"}

# 告警经典写法:错误率高 或 无数据
error_rate > 0.05 or absent(http_requests_total{job="app"})

or 的语义:左向量结果 + 右侧中标签集不与左侧重复的序列。

and / unless

# 且:CPU 高 且 内存高
cpu_usage > 0.8 and memory_usage > 0.9

# 排除:请求量大但错误率低的(除非)
rate(http_requests_total[5m]) unless rate(http_errors_total[5m])

常见问题(FAQ)

Q:or 之后标签对不上会怎样? 结果集标签取各自原有标签——面板图例可能不一致,必要时用 label_replace 规整。

Q:能用 or 合并不同指标名吗? 可以,metric_a or metric_b 合法,常用于兜底指标。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台