Grafana 10中基于InfluxDB 2.7.4创建关联依赖变量的方法
在InfluxDB 2.7.4中用Flux实现Grafana级联依赖变量
按照需求,需要创建三层级联的Grafana变量:OwnerGroup → GroupManager → Service_Name,以下是每个变量对应的Flux实现代码及配置说明:
1. 顶层变量:OwnerGroup
该变量无需依赖其他变量,直接获取Owner_Group标签的所有可选值:
import "influxdata/influxdb/schema" schema.tagValues( bucket: "Vbuck", tag: "Owner_Group" )
配置时Grafana变量类型选「Query」,数据源指定你的InfluxDB 2.7.4实例,变量名设为OwnerGroup。
2. 中间变量:GroupManager
依赖OwnerGroup,仅显示选中Owner_Group对应的Group_Manager标签值,同时处理变量未选中(空值)时返回全量选项的情况:
import "influxdata/influxdb/schema" import "strings" // 引用Grafana中的OwnerGroup变量 selectedOwner = "${OwnerGroup}" schema.tagValues( bucket: "Vbuck", tag: "Group_Manager", // 过滤条件:未选Owner则返回所有,否则匹配选中的Owner_Group predicate: (r) => if strings.length(v: selectedOwner) == 0 then true else r.Owner_Group == selectedOwner )
Grafana变量名设为GroupManager,选择Query类型和对应数据源,勾选「Refresh」选项中的「On dashboard load」和「On variable change」,确保选中OwnerGroup后自动更新该变量的选项。
3. 底层变量:Service_Name
同时依赖OwnerGroup和GroupManager,仅显示符合两个选中条件的Service_Name标签值:
import "influxdata/influxdb/schema" import "strings" // 引用Grafana中的两个上级变量 selectedOwner = "${OwnerGroup}" selectedManager = "${GroupManager}" schema.tagValues( bucket: "Vbuck", tag: "Service_Name", predicate: (r) => { // 处理Owner未选中的情况 ownerMatch = if strings.length(v: selectedOwner) == 0 then true else r.Owner_Group == selectedOwner // 处理Manager未选中的情况 managerMatch = if strings.length(v: selectedManager) == 0 then true else r.Group_Manager == selectedManager // 同时满足两个条件 return ownerMatch and managerMatch } )
Grafana变量名设为Service_Name,配置同上述变量,开启随上级变量变化自动刷新。
关键说明
- Flux中通过
${变量名}引用Grafana变量,注意变量名大小写要和Grafana中定义的完全一致 - 使用
strings.length判断变量是否为空,避免未选中选项时返回空结果 schema.tagValues的predicate参数是在InfluxDB端直接过滤,比先获取所有标签再用|> filter更高效
内容的提问来源于stack exchange,提问作者ivbtar
相关产品推荐
相关产品推荐

