如何在Grafana单个变量中展示Elasticsearch多字段内容?
嘿,我刚好碰到过类似的需求!Grafana的Elasticsearch变量查询其实不支持直接在field参数里传数组,你原来写的["region_a.keyword","region_b.keyword"]这种写法是不会生效的。我给你两种可行的解决方案,看哪种更贴合你的需求:
方案1:用脚本合并两个字段的取值(适合需要关联展示的场景)
如果想把两个字段的取值合并成一组结果返回,可以使用Elasticsearch的Painless脚本,在变量查询里指定script参数代替field:
{"find": "terms", "script": { "source": "doc['region_a.keyword'].value + ',' + doc['region_b.keyword'].value", "lang": "painless" }}
这种方式会把每个文档里的region_a和region_b值拼接成一个字符串(比如华东,华北)返回,适合需要把两个字段关联展示的场景。
方案2:获取两个字段的所有独立取值(适合多选或独立筛选)
如果希望得到两个字段各自的所有独立值(不拼接,比如同时拿到region_a的所有区域和region_b的所有区域),可以改用find: query的方式来实现:
{"find": "query", "query": { "bool": { "should": [ {"exists": {"field": "region_a.keyword"}}, {"exists": {"field": "region_b.keyword"}} ] } }, "field": ["region_a.keyword", "region_b.keyword"]}
这个查询会返回所有包含region_a.keyword或region_b.keyword的文档中,这两个字段的所有取值。之后你可以在变量设置里开启Multi-value和Include all option,方便后续筛选使用。
另外补充个小提示:Grafana的Elasticsearch数据源中,find: terms类型的查询只支持单个field参数,这就是你最初的数组写法失效的原因哦。
内容的提问来源于stack exchange,提问作者pioupiou
相关产品推荐
相关产品推荐

