根据Elasticsearch数据在Grafana上正确绘图



我想根据存储在ElasticSearch中的一些文档绘制Grafana上的时间序列。文件结构如下:

{
"timestamp": date,
"name1": str,
"name2": str,
"number": float
}

由于对于给定的name1值,只有name2的某些值是可能的,我在Grafana上设置了两个变量:

Name1: {"find": "terms", "field":"name1.keyword"}
Name2: {"find":"terms", "field":"name2.keyword", "query":"name1:$Name1"}

这两个变量正确地生成了两个下拉菜单,在给定name1的值的情况下,我可以使用它们来选择name2的正确值。现在,在菜单中选择给定的name1name2值后,我希望Grafana绘制与name1name2的(唯一(组合相对应的number的时间序列,我正试图通过以下查询来完成:

name1:$Name1 AND name2:$Name2

选择CCD_ 10和CCD_。问题是,除非每个name1只有一个name2值,否则这将无法正常工作,让我通过一个示例来解释原因。假设我有这两份文件:

{
"timestamp": 20220110,
"name1": "foo",
"name2": "bar",
"number": 2.0
}
{
"timestamp": 20220110,
"name1": "foo",
"name2": "tee",
"number": 3.0
}

并选择CCD_ 14作为度量。在这种情况下,无论我在name2下拉菜单中选择什么,Grafana都将始终绘制一个点(20220110, 3),其中3对应于2和3之间的最大值。我理解这种行为的原因:我不明白的是如何获得我想要的东西。那么:我如何更改我的查询,以便在name2下拉菜单中选择bar,我得到一个点(20220110, 2),如果我从同一菜单中选择了tee,我得到(20220110, 3)

为了完整起见,我找到了解决方案。因此,该行为不应该是我上面描述的行为,原因是name2通常在字符串中使用-字符,Lucene查询对这些字符的解释很差。在这种情况下,唯一安全的方法是以这种方式写入变量:

Name1: {"find": "terms", "field":"name1.keyword"}
Name2: {"find":"terms", "field":"name2.keyword", "query":"name1.keyword:$Name1"}

以及相应的Lucene查询作为

name1.keyword:$Name1 AND name2.keyword:$Name2

这是意料之中的事。

最新更新