比较运算符与 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) < 容差 这类写法。