Prometheus 查询

从实际使用场景出发,介绍夜莺 Prometheus 告警规则的查询配置:开源版的普通模式(写 PromQL、多档位阈值分级、变量查询、逐 series 判定),以及商业版额外提供的高级模式(查询与判定分离、多指标表达式运算)。

概述

Prometheus 是夜莺最常用的告警数据源。告警引擎按执行频率在 Prometheus 上跑一段 PromQL,把返回的时序结果交给「告警条件」做布尔判定——满足就触发告警事件。VictoriaMetrics、Thanos、Mimir 等兼容 Prometheus HTTP API 的系统也走同一套配置。

配置分布在告警规则编辑页的两个区块:

  • 第 2 步「数据源」:数据源类型选 Prometheus,再用数据源筛选选中具体实例;
  • 第 3 步「告警条件」:写 PromQL 查询,配置阈值判定,设执行频率与持续时长。
字段 必填 说明
数据源类型 / 数据源 Prometheus 类型,并选中已接入的 Prometheus 数据源 实例
PromQL 查询语句,支持全部 PromQL 函数;阈值直接写进查询(如 cpu_usage_idle < 20
告警分级 一级 Critical / 二级 Warning / 三级 Info
执行频率 多久跑一次查询,默认 @every 60s
持续时长 满足条件持续多久才触发,用于抖动抑制

Prometheus 告警条件有两种规则模式:

  • 普通模式:每条 PromQL 自带阈值与告警分级,适合单指标场景。开源版与商业版都支持,也是默认模式;
  • 高级模式:查询与判定条件分离,支持多指标代数表达式运算。仅商业版(PLUS)提供,详见文末商业版:高级模式

下面先按实际使用场景介绍开源版就能用的普通模式。

场景一:单个 PromQL + 阈值

最常见的告警:一条 PromQL 加一个阈值。比如「CPU 空闲率低于 20% 就告警」,把阈值直接写进 PromQL:

cpu_usage_idle{cpu="cpu-total"} < 20

写完点「数据预览」,能看到查询当前返回的时序和值,确认没写错再保存:

Prometheus 查询与数据预览

几条要点:

  • 阈值写进 PromQL 后,任何被过滤出来的 series(上例即空闲率 < 20 的机器)都会触发告警;
  • 「告警分级」选 Critical/Warning/Info,会成为告警事件的级别;
  • 「执行频率」控制多久跑一次查询,「持续时长」控制满足条件持续多久才触发(用于抑制瞬时抖动)。

场景二:多档位阈值分级(多条查询 + 级别抑制)

同一个指标想分档告警——比如磁盘使用率「超过 80% 报 Warning,超过 90% 报 Critical」——点「+查询与阈值」再加一条查询即可。每条查询各写各的 PromQL、各选各的告警分级:

# 查询 1:告警分级 = 二级 Warning
disk_used_percent{path="/"} > 80

# 查询 2:告警分级 = 一级 Critical
disk_used_percent{path="/"} > 90

多条查询之间相互独立,引擎逐条查询、逐条判定,各自触发各自的事件。

配置 2 条及以上查询后,「查询与阈值」标题旁会出现「级别抑制」开关:

  • 关闭:使用率 95% 的机器会同时命中两条查询,产生 Warning 和 Critical 两条事件;
  • 开启:同一条曲线只保留最高级别的事件,上例只发 Critical(1 级 > 2 级 > 3 级)。

注意抑制的判定口径:只有指标名和标签完全相同的曲线产生的事件才会互相抑制。上例两条 PromQL 返回的 series 标签一致,所以能正常抑制;如果两条查询用了不同的聚合维度,标签对不上,抑制不会生效。

场景三:一条规则适配多台机器 / 多套阈值(启用变量)

同一条规则想覆盖一批机器,但个别机器要用不同阈值;或者只想监控筛选出来的某些机器——打开告警条件里的「启用变量」开关,在 PromQL 里用 $变量名 占位,执行时自动展开。

开源版支持三种变量类型:

  • 阈值(threshold):给不同的标签组合配不同的阈值;
  • 枚举(enum):把一批取值列举出来,逐个展开查询;
  • 机器(host):用机器筛选条件挑出一批机器,展开成 ident 过滤。

详细用法见 PromQL 变量查询

变量类型里的「网络设备(device)」是商业版(PLUS)独有能力,开源版不提供。

逐 series 判定:一条规则可能产生多条事件

理解这一点能避免"告警怎么产生了几百条"的困惑:PromQL 返回几条 series,告警引擎就逐条独立判定,每条满足阈值的 series 各触发一次告警事件,事件标签就是该 series 的标签。

比如 cpu_usage_idle 返回 100 台机器的数据,就可能产生最多 100 条告警事件(每台机器一条)。如果不希望产出这么多事件,在 PromQL 里用 sum by(维度) 把粒度聚合到你真正关心的维度。

商业版:高级模式(PLUS)

[PLUS] 高级模式是夜莺企业版(PLUS)独有功能,开源版的告警条件区域不会出现「规则模式」选择器。关于开源版与商业版的差异,见 夜莺商业版

普通模式把阈值写死在 PromQL 里,一条查询只能得出一个布尔结论。当告警逻辑要跨多个指标做运算时(比如「QPS 高错误率高才告警」、「错误数 / 总数 > 5%」),普通模式就不够用了。商业版在告警条件顶部提供「规则模式」选择器,切到「高级模式」后:

1)查询与判定分离

先配置若干条查询语句,每条有一个引用名(AB…),只写查询不写阈值;再单独配置「触发条件」,用 $A$B 引用查询结果做运算:

$A > 1000 && $B > 0.05

触发条件支持两种编辑方式:简单模式(下拉选引用名、比较符、阈值,界面拼装)和表达式模式(直接手写表达式)。完整的运算符(算术、比较、逻辑、字符串、时间等)见 告警表达式语法

2)多条触发条件、各带分级

可以配置多条触发条件,每条有独立的告警分级,实现分档告警,配合「级别抑制」使用。

3)高级模式还提供

  • 恢复条件:可选「查不到数据就恢复」/「必须查到数据且不满足告警条件才恢复」/「结果满足自定义条件才算恢复」(如 $A < 50),用来做迟滞、防抖动,详见 恢复条件使用场景
  • 集合操作:多条查询做内联 / 左联 / 右联 / 左斥 / 右斥等标签集合运算,处理两侧 series 标签对不齐的情况;
  • 数据缺失告警:之前查到过数据、现在查不到就告警,并可设置无数据超过多久自动恢复;
  • 辅助配置(单位):给查询结果指定单位(如字节、百分比、秒),告警事件的现场值按单位格式化展示;
  • 现场值展开每条查询:告警事件会把 $A$B 各自的取值都记下来,排查时不用再手动跑一遍查询。

此外,商业版还支持在变量查询中使用「网络设备」类型变量,以及基于 FlashCat AI 能力的智能(异常检测)告警触发条件。

常见问题

Q1:PromQL 返回了几千条 series,会产生几千条告警吗?

A:会——引擎对每条 series 独立判定,每条满足阈值的 series 触发一条事件。用 sum by(维度) 把无关标签聚合掉可以控制事件数量。

Q2:告警事件的标签从哪来?

A:来自 PromQL 返回时序的标签。如 up{instance="…",job="…"} 返回的 series 带 instancejob 标签,事件就带这两个标签。还可以在基础配置的「附加标签」里补业务侧标签。

Q3:明明满足了 PromQL 阈值,为什么没产生事件?

A:按顺序排查:持续时长还没满足(默认要持续 N 秒才触发);去即时查询用同样的 PromQL 验证能否返回数据;告警引擎是否健康;数据源是否被禁用或数据延迟。

Q4:能查 VictoriaMetrics / Thanos / Mimir 吗?

A:可以,它们都兼容 Prometheus HTTP API,直接用 Prometheus 数据源类型接入即可。接入时把数据源表单里的「时序库类型」选成实际的库(VictoriaMetrics / Thanos / M3 / SLS),夜莺会针对该类型做一些查询适配。

Q5:开源版能不能做多指标混合运算($A / $B > 0.1 这种)?

A:不能。开源版只有普通模式,阈值必须写在 PromQL 里,多条查询之间相互独立。有两个思路:

  • 用 PromQL 自身的向量运算在单条语句里表达。比率类直接写 sum(rate(err[5m])) / sum(rate(total[5m])) > 0.05;要把多个指标凑到一条语句里,可以用 or 连接(or 不要求两侧标签一致,比跨查询运算宽松)。注意 PromQL 的二元运算(/and 等)仍然要求两侧 series 标签能配对,对不齐时先用 sum by(维度) / sum without(维度) 对齐。
  • 使用商业版的高级模式,把查询和判定拆开写表达式。

Q6:高级模式下多查询混合运算不生效?

A:最常见原因是两条查询返回的 series 标签对不齐,无法配对运算。用数据预览看两侧实际标签,再用 sum by/without 对齐维度,或者用触发条件高级设置里的「集合操作」显式指定关联方式。详见 告警表达式语法 的「基于标签的对齐」。

参考资料

更新时间 2026-07-17

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云