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

如何在Grafana中基于指标结果创建动态标签过滤器?

解决Grafana中基于指标值过滤标签的问题

你之前的写法错误在于混淆了标签匹配器和指标值过滤的逻辑:label_values的第一个参数仅支持标签匹配器筛选时间序列,不能直接对指标值做比较,也不能把value当作标签来用(value是指标的数值,不是标签)。

以下是两种可行的实现方式:

方法一:直接在label_values中结合值过滤

使用last_over_time获取每个资源的最新指标值,再筛选出符合$status条件的序列,最后提取resourceName标签:

label_values(last_over_time(azure_metric_loadbalancer_heartbeat{subscriptionID=~"$sub"}[1m]) == $status, resourceName)
  • [1m]表示取最近1分钟内的指标数据,你可以根据实际数据采集频率调整这个时间范围;
  • last_over_time会返回每个时间序列在指定窗口内的最后一个值,确保你拿到的是最新的健康状态;
  • == $status会筛选出状态匹配的序列,最终label_values提取这些序列的resourceName标签。

如果你的指标是瞬时值(每次采集都是最新状态),也可以简化为子查询写法:

label_values(azure_metric_loadbalancer_heartbeat{subscriptionID=~"$sub"}[1m] == $status, resourceName)

方法二:通过query_result配合正则提取标签

  1. 先确保$status变量已配置(值为0或1);
  2. 创建新变量(比如$filtered_resources),设置查询语句为:
    query_result(last_over_time(azure_metric_loadbalancer_heartbeat{subscriptionID=~"$sub"}[1m]) == $status)
    
  3. 在变量的Regex字段中填入正则表达式,提取resourceName的值:
    .*resourceName="([^"]+)".*
    

这种方法更灵活,适合复杂的标签提取场景。

关键说明

  • 所有值过滤逻辑必须基于PromQL的数值比较操作,不能直接写在标签匹配器的花括号内;
  • 时间范围窗口(比如[1m])要适配你的指标采集间隔,避免因没有数据导致筛选结果为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:22:35