Grafana 7.15中如何用site变量过滤ElasticSearch JSON查询的id变量
解决Grafana动态变量关联ElasticSearch查询的问题
针对你的需求——在生成id动态变量的JSON查询中引用site变量,筛选出包含site值的id(比如site=TORT时匹配LR_TORT_2354),可以用以下两种实用方式实现:
方式1:通配符模糊匹配(wildcard查询)
在Grafana的变量查询框中,输入以下JSON查询:
{ "size": 0, "aggs": { "id_values": { "terms": { "field": "id", "size": 1000 } } }, "query": { "wildcard": { "id": "*${site}*" } } }
- 逻辑:
wildcard查询会匹配id字段中任意位置包含site变量值的内容,*作为通配符代表任意字符(包括空字符)。 - 适配性:因为
id是keyword类型,该查询可直接生效,无需额外字段处理。
方式2:精确子串匹配(match_phrase查询)
如果需要更严格的子串匹配(避免无关字符误匹配),可以使用match_phrase:
{ "size": 0, "aggs": { "id_values": { "terms": { "field": "id", "size": 1000 } } }, "query": { "match_phrase": { "id": "${site}" } } }
- 逻辑:
match_phrase会精确匹配id字段中包含完整site变量值的条目,完全适配你的示例场景(TORT作为完整子串存在于id中)。
配置注意事项
- 确保
site变量已正确创建,类型为查询变量或自定义变量,能正常输出有效值。 - 在
id变量的设置中,数据源选择你的ElasticSearch实例,查询类型选JSON,再粘贴上述查询内容。 - 若需调整返回的
id数量,修改aggs.terms.size的值(默认值可能较小,按需调大即可)。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

