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

如何为Grafana的namespace和service变量实现OR逻辑?

Grafana多变量指标查询逻辑实现方案

问题背景

在Grafana中配置了两个变量:

  • namespace:取值为app1|app2|app3(多值用管道符分隔)
  • service:取值为app4、app5、app6的可选列表

现有指标http_request_count包含app标签,需要实现:

  • 同时选中两个变量时,查询app标签匹配任一变量值的指标
  • 仅选中其中一个变量时,仅查询对应变量值的指标
  • 未选中变量时,不匹配app标签为空的序列,也不返回全量数据

实现方案

利用PromQL的正则匹配运算符=~,结合Grafana模板变量的条件渲染语法,动态拼接匹配规则,避免空值干扰:

最终查询语句

http_request_count{app=~"[[ if or (ne .namespace \"\") (ne .service \"\") ]][[ if ne .namespace \"\" ]]${namespace}[[ end ]][[ if and (ne .namespace \"\") (ne .service \"\") ]]|[[ end ]][[ if ne .service \"\" ]]${service}[[ end ]][[ else ]]no_match[[ end ]]"}

逻辑说明

  1. 非空变量判断:通过[[ if ne .变量名 "" ]]语法,仅当变量有选中值时才将其加入匹配规则
  2. 多变量分隔:当两个变量都非空时,插入管道符|作为正则匹配的分隔符
  3. 空变量兜底:当两个变量都未选中时,用no_match作为匹配值,确保不会匹配到任何真实的app标签值

变量配置注意事项

如果service是多值选择变量,需在变量设置中:

  • 开启「Multi-value」选项
  • 将「Separator」设置为管道符|,确保多选时变量值自动拼接为app4|app5|app6格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:52:37