我在Elasticsearch中有一个索引,其中包含一组简单对象(键值请参见下面的示例)。
文件有时间戳。
我可以在Kibana为每个键值创建单独的直方图(即bytes_sent的一个图表和bytes_received的另一个图表)。
我想知道是否有办法在一个直方图上显示两个系列。
感谢
亚西尔
"_index": "myindex",
"_type": "showstatus",
"_id": "JhyLAGbcRDyXmrIMmP5lLg",
"_score": 1,
"_source": {
"_datetime" : "2014-03-21 10:10:10",
"showstatus": [
{
"value": 96451,
"variable_name": "bytes_sent"
},
{
"value": 435322,
"variable_name": "bytes_received"
}
]
}
答案 0 :(得分:1)
这可以通过运行两个查询来实现,一个用于绘制bytes_sent,另一个用于绘制bytes_received。将直方图设置为使用公共"值"领域。看起来您可能还需要将数据拆分,以便记录时间戳,bytes_sent,值和时间戳,bytes_received,value。
-Brent
答案 1 :(得分:1)
我有解决这个问题的方法。类似于@OmarOthman给出的answer但没有上述问题,即:
使用数组聚合的信息是不可能的,is a feature that the Elastic team has not addressed yet。
您需要在单独的文档中分解文档,每个文档都包含数组的每个值。你可以使用父母 文件的弹性特征,以收集它们。
分解形式:
{ "_datetime" : "2014-03-21 10:10:10", "bytes_sent": 12312, "bytes_received" : 123123 }
{ "_datetime" : "2014-03-21 10:10:11", "bytes_sent": 12310, "bytes_received" : 12313 }
而不是:
[…]
"_datetime" : "2014-03-21 10:10:10",
"showstatus": [
{
"value": 96451,
"variable_name": "bytes_sent"
},
{
"value": 435322,
"variable_name": "bytes_received"
}
]
}
[…]
您可以在Timelion中绘制多个系列,例如@OmarOthman said,但您也可以使用Timelion的方法yaxis添加辅助(甚至是三级)Y轴,如:
.es('avg:bytes_sent').yaxis(1, label='Bytes sent').bars(), .es('avg:bytes_received').yaxis(2, label='Bytes received', positon='right').bars()
使用方法bars,您可以将其绘制为日期直方图。
@ OmarOthman提出的另一种方法只显示从showstatus数组的所有文档中获取所有“值”数据的平均“值”。这样做是因为查询'showstatus.variable_name:bytes_sent'始终为true,因为所有文档的数组showstatus中都有“变量名”。因此,除非某些文档在数组showstatus中没有bytes_sent variable_name,否则两个系列都是相同的。尝试绘制它,它不能按预期工作。
答案 2 :(得分:-2)