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

qlzsbp2j  于 2022-11-07  发布在  Lucene
关注(0)|答案(1)|浏览(165)

我想从存储在ElasticSearch中的一些文档中绘制一个时间序列。这些文档的结构如下:

{
    "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"}

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

name1:$Name1 AND name2:$Name2

选择Group By: Date Histgramtimestamp作为时间轴。问题是,除非每个name1只有一个name2值,否则这个方法无法正常工作,让我通过一个例子来解释原因。假设我有这两个文档:

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

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

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

q1qsirdb

q1qsirdb1#

为了完整起见,我找到了解决方案。所以,行为不应该是我上面描述的那种,原因是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

这和预期的一样有效。

相关问题