Kibana直方图 - 在单个图表上绘制多个系列

时间:2014-03-20 20:27:30

标签: kibana

我在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"
          }
       ]
    }

3 个答案:

答案 0 :(得分:1)

这可以通过运行两个查询来实现,一个用于绘制bytes_sent,另一个用于绘制bytes_received。将直方图设置为使用公共"值"领域。看起来您可能还需要将数据拆分,以便记录时间戳,bytes_sent,值和时间戳,bytes_received,value。

-Brent

答案 1 :(得分:1)

我有解决这个问题的方法。类似于@OmarOthman给出的answer但没有上述问题,即:

  1. 使用数组聚合的信息是不可能的,is a feature that the Elastic team has not addressed yet

  2. 您需要在单独的文档中分解文档,每个文档都包含数组的每个值。你可以使用父母 文件的弹性特征,以收集它们。

  3. 获得具有此形状的文档后:
  4. 分解形式:

    { "_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)

为了分享有关较新Kibana版本的知识,使用Kibana的TimeLion工具很容易。选择"时间序列"当您被要求创建可视化时。

New Visualization

对我来说,只需按照开头弹出的几个对话框就可以了解如何开始使用。这样的事情应该开始了:

.es('showstatus.variable_name:bytes_sent'), .es('showstatus.variable_name:bytes_received')