首页/云/可观测性速查/比较运算符:过滤语义与 bool 修饰
Prometheus 与采集64 条

比较运算符:过滤语义与 bool 修饰

向量与标量比较默认是过滤语义:只保留满足条件的样本;加 bool 则改为输出 0/1 且不丢样本。标量与标量比较必须加 bool。

可观测性速查云更新于 2026-10-13

比较运算符与 bool 是什么

PromQL 的比较运算符有 >、<、>=、<=、==、!=。向量与标量比较时默认是过滤语义:只保留满足条件的样本,不满足的直接从结果里消失;加上 bool 修饰符后改为输出 0 或 1,并保留全部样本。标量与标量比较必须写 bool,否则是语法错误。分清这两种语义,才能正确写出阈值过滤与状态线。

基本信息

运算符> < >= <= == !=
向量与标量默认过滤,不满足的样本消失
加 bool输出 0/1,样本全保留
标量与标量必须加 bool,如 2 > bool 1
向量与向量默认按标签匹配后过滤
常见用途阈值筛选、状态线、布尔统计

典型使用场景

  • 只保留可用内存低于阈值的实例,画一张异常清单
  • 用 bool 生成 0/1 状态线,判断某个条件是否持续满足
  • 先比较过滤再计数:count(node_load1 > 4) 统计超载机器数
  • 告警规则里做阈值判断,比较运算是最基础的表达式骨架
  • 配合 avg_over_time 计算「最近一小时有多少时间满足条件」
  • 用 != 排除特定实例或环境,收窄查询范围

对比示例

对比示例
# 过滤:只保留可用内存低于 1GiB 的序列
node_memory_MemAvailable_bytes < 1073741824

# bool:把结果转成 0/1 状态线
node_memory_MemAvailable_bytes < bool 1073741824

# 先过滤再计数
count(node_load1 > 4)

# 标量与标量比较必须加 bool
2 > bool 1

两种语义对照

写法结果典型用途
v < 10只留 <10 的样本异常清单、TopN 前置过滤
v < bool 10样本全留,值变 0/1状态线与占比计算
2 > bool 1标量比较,返回 1语法要求,无实际筛选
v > v2按标签匹配后过滤两个指标间的比较
过滤语义下条件不再满足时序列会消失,图形断开而不是回落到 0;要画状态曲线请用 bool。
布尔结果序列无法直接做 rate:要算「持续满足时长」,应把 bool 结果送进 avg_over_time(...[1h]),得到满足条件的比例。
== 在向量与标量之间很少有意义(只有恰好相等的点会留下),判断是否命中通常用 abs(x - target) < 容差 这类写法。

易错点

  • 标量与标量比较必须提供 bool,例如 2 > bool 1;漏写会直接报错
  • 布尔结果序列无法直接做 rate,想表达「持续满足时长」应结合 avg_over_time 换算成比例
  • 过滤语义会让序列消失,用它做告警时要注意首值与恢复点附近的判定,避免抖动
  • 浮点相等比较不可靠:等于判断在浮点噪声下会漏判或误判,用量级容差更稳
  • 向量与向量比较默认按标签全匹配,标签不一致时结果为空,需要先 on/ignoring 对齐

数据来源与参考

  • Prometheus 文档 · Operators(Comparison operators)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌