PromQL 变量查询

夜莺( Nightingale )变量查询介绍

使用场景

PromQL 变量设置主要应用于以下场景:

  1. 差异化监控配置

    • 对不同重要程度的机器设置不同的告警阈值
    • 针对特定设备组设置专门的监控规则
  2. 灵活的监控范围调整

    • 快速切换监控目标设备
    • 动态调整监控规则的覆盖范围
  3. 批量规则管理

    • 使用同一个规则模板,通过变量适配不同环境
    • 减少重复配置,提高规则维护效率

什么是变量?

在告警规则上下文中,变量是指那些可以在定义告警查询条件时被引用、但在实际触发告警时其值会被特定信息替换掉的占位符。使用变量可以让告警消息变得更加具体和个人化,同时也使得单个告警模板能够适应多种情况下的不同需求。

支持的类型

  1. 机器标识变量

在某些场景,如果只想对某些网络设备进行监控,这个时候,可以使用机器标识变量

机器标识变量

定义好变量名称之后,可以在 promql 查询条件中,使用 $ident 作为占位符,在查询之前,将变量替换为上面机器标识筛选到的机器

mem_available_percent{ident="$ident"}>80
  1. 网络设备变量

在某些场景,如果只想对某些网络设备进行监控,这个时候,可以使用网络设备变量

网络设备变量

定义好变量名称之后,可以在 promql 查询条件中,使用 $ip 作为占位符,在查询之前,将变量替换为上面筛选到的网络设备

snmp_icmp_packet_loss{agent_host="$ip"}>0
  1. 阈值变量

在某些场景,我们管理了一批机器,其中有几台机器比较特殊,告警阈值和其他机器不同,此时可以使用阈值变量,给特殊的机器配置不同的阈值,如下图所示

阈值变量

上面配置中,业务组为 Default Busi Group 的机器,阈值都是 80,如果在这个业务组的某两台机器,我们想设置特殊的阈值,可以在查询条件下面添加 变量筛选,机器标识选择这两台机器,阈值设置为 90,这个只有这两台机器的阈值是 90,其他机器是 80

  1. 枚举值变量

有些场景,对于某个标签,只想对某几个值进行监控,可以使用枚举值

枚举值变量

概述

PromQL 变量查询 = 在告警规则里用预定义变量简化 PromQL — 一处定义、多处复用,避免重复写长查询。

适用场景:

  • 告警规则间共享通用过滤条件(如 env="prod"region="cn-east");
  • 集中维护"业务关键阈值"(如统一调整某指标的阈值);
  • 跨告警规则的标签筛选保持一致。

字段说明

字段 必填 说明
变量名 在 PromQL 里用 $变量名 引用
变量值 可以是字符串、PromQL 片段、标签选择器

操作步骤

  1. 在告警规则的"变量配置"区域新增变量;
  2. 定义变量名 + 值(如 $prod_filter = env="prod",region="cn-east");
  3. 在 PromQL 中引用:http_requests_total{$prod_filter, status=~"5.."}
  4. 该变量会在执行时被替换为实际值,效果等同于 http_requests_total{env="prod",region="cn-east",status=~"5.."}

常见问题

Q1:变量能跨告警规则共享吗?

A:当前仅在单条告警规则内有效。跨规则共享建议把通用变量放到附加标签或者用 标签词表 注入。

Q2:变量值可以包含其他变量吗?

A:不支持嵌套引用。变量值必须是字面 PromQL 片段,不能 $a = $b + "..."

Q3:和 Grafana 变量有什么区别?

A:

  • Grafana 变量:用于仪表盘交互,下拉切换不同值;
  • 本变量:用于告警 PromQL 的静态替换 — 一旦定义就固定。

需要动态切换的场景用仪表盘变量;告警规则用本特性。

参考资料

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