我想从存储在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
)。现在,在菜单中选择了name1
和name2
的给定值后,我希望Grafana绘制与之对应的number
的时间序列name1
和name2
的(唯一的)组合,我尝试通过以下查询来实现:
name1:$Name1 AND name2:$Name2
选择Group By: Date Histgram
和timestamp
作为时间轴。问题是,除非每个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)
?
1条答案
按热度按时间q1qsirdb1#
为了完整起见,我找到了解决方案。所以,行为不应该是我上面描述的那种,原因是
name2
通常在字符串中使用-
字符,Lucene查询对这些字符的解释很差。在这种情况下,唯一安全的方法是以下面的方式编写变量:和相应的Lucene查询
这和预期的一样有效。