PromQL 变量查询
夜莺( Nightingale )变量查询介绍
使用场景
PromQL 变量设置主要应用于以下场景:
-
差异化监控配置
- 对不同重要程度的机器设置不同的告警阈值
- 针对特定设备组设置专门的监控规则
-
灵活的监控范围调整
- 快速切换监控目标设备
- 动态调整监控规则的覆盖范围
-
批量规则管理
- 使用同一个规则模板,通过变量适配不同环境
- 减少重复配置,提高规则维护效率
什么是变量?
在告警规则上下文中,变量是指那些可以在定义告警查询条件时被引用、但在实际触发告警时其值会被特定信息替换掉的占位符。使用变量可以让告警消息变得更加具体和个人化,同时也使得单个告警模板能够适应多种情况下的不同需求。
支持的类型
- 机器标识变量
在某些场景,如果只想对某些网络设备进行监控,这个时候,可以使用机器标识变量

定义好变量名称之后,可以在 promql 查询条件中,使用 $ident 作为占位符,在查询之前,将变量替换为上面机器标识筛选到的机器
mem_available_percent{ident="$ident"}>80
- 网络设备变量
在某些场景,如果只想对某些网络设备进行监控,这个时候,可以使用网络设备变量

定义好变量名称之后,可以在 promql 查询条件中,使用 $ip 作为占位符,在查询之前,将变量替换为上面筛选到的网络设备
snmp_icmp_packet_loss{agent_host="$ip"}>0
- 阈值变量:
在某些场景,我们管理了一批机器,其中有几台机器比较特殊,告警阈值和其他机器不同,此时可以使用阈值变量,给特殊的机器配置不同的阈值,如下图所示

上面配置中,业务组为 Default Busi Group 的机器,阈值都是 80,如果在这个业务组的某两台机器,我们想设置特殊的阈值,可以在查询条件下面添加 变量筛选,机器标识选择这两台机器,阈值设置为 90,这个只有这两台机器的阈值是 90,其他机器是 80
- 枚举值变量
有些场景,对于某个标签,只想对某几个值进行监控,可以使用枚举值

概述
PromQL 变量查询 = 在告警规则里用预定义变量简化 PromQL — 一处定义、多处复用,避免重复写长查询。
适用场景:
- 告警规则间共享通用过滤条件(如
env="prod"、region="cn-east"); - 集中维护"业务关键阈值"(如统一调整某指标的阈值);
- 跨告警规则的标签筛选保持一致。
字段说明
| 字段 | 必填 | 说明 |
|---|---|---|
| 变量名 | 是 | 在 PromQL 里用 $变量名 引用 |
| 变量值 | 是 | 可以是字符串、PromQL 片段、标签选择器 |
操作步骤
- 在告警规则的"变量配置"区域新增变量;
- 定义变量名 + 值(如
$prod_filter=env="prod",region="cn-east"); - 在 PromQL 中引用:
http_requests_total{$prod_filter, status=~"5.."}; - 该变量会在执行时被替换为实际值,效果等同于
http_requests_total{env="prod",region="cn-east",status=~"5.."}。
常见问题
Q1:变量能跨告警规则共享吗?
A:当前仅在单条告警规则内有效。跨规则共享建议把通用变量放到附加标签或者用 标签词表 注入。
Q2:变量值可以包含其他变量吗?
A:不支持嵌套引用。变量值必须是字面 PromQL 片段,不能 $a = $b + "..."。
Q3:和 Grafana 变量有什么区别?
A:
- Grafana 变量:用于仪表盘交互,下拉切换不同值;
- 本变量:用于告警 PromQL 的静态替换 — 一旦定义就固定。
需要动态切换的场景用仪表盘变量;告警规则用本特性。