You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prometheus/Grafana查询问题:空Tag值致多变量选择结果异常

问题描述

我有一个带有op和type两个标签的Prometheus指标,其中type标签可能为空值("")。在Grafana中,我使用op和type这两个可选多值变量可视化该指标,当前查询语句为:

sum(rate(metric{op=~"$op", type=~"$type"}[1m:15s]))

遇到以下问题:

  • 当op = x时,type标签有值;
  • 当op = y时,type标签为空;
  • 选择op = x, type = All时,查询结果正确;
  • 选择op = y, type = All时,查询结果正确;
  • 同时选择op = x, y, type = All时,结果异常,op = y的指标未被统计。

对应结果截图

  • op = x时的结果:
    op = x
  • op = y时的结果:
    op = y
  • op = x, y时的结果:
    op = x, y
解决方案

问题根源是:当type变量选All时,Grafana默认生成的正则仅匹配所有非空type值(比如.*),但op=y的指标type是空字符串,无法被该正则匹配,因此被过滤。

方法1:修改PromQL兼容空值

直接调整查询语句,让type的匹配规则同时覆盖变量值和空字符串:

sum(rate(metric{op=~"$op", type=~"${type}|^$"}[1m:15s]))

其中${type}|^$表示匹配type变量的所有选项,或者空字符串(^$是空字符串的正则表达式)。

也可以用逻辑拆分的写法:

sum(rate(metric{op=~"$op"}[1m:15s] and (type=~"$type" or type="")))

方法2:优化Grafana变量配置

如果不想改PromQL,可调整type变量的查询逻辑,让其包含空值选项:

  1. 进入Grafana的变量配置界面,找到type变量;
  2. 将变量的查询语句从默认的label_values(metric, type)替换为:
label_values(metric, type) or on() vector("")

这样变量的选项会包含空值,选择All时会自动匹配所有type(包括空值)。

修改后再同时选择op=x,y和type=All,op=y的指标就能被正确统计。

内容的提问来源于stack exchange,提问作者Arya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:26:08