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=app 的实例 或 job=db 的实例
up{job="app"} or up{job="db"}

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

or 的语义:左向量结果 + 右侧中未匹配左侧标签集的序列。默认匹配忽略指标名;左侧即使值为 0 也优先保留,不是按数值真假选择。absent 只在整个选择结果为空时返回一条序列,不会逐台发现消失的实例。

and / unless

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

# 排除:从有请求的 job 中排除错误率超过阈值的 job
sum by (job) (rate(http_requests_total[5m])) > 0
  unless on (job) (error_rate > 0.05)

常见问题(FAQ)

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

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

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台