如何使用Kibana + Elastic Search检索字段的唯一计数

时间:2013-09-30 19:28:13

标签: elasticsearch logstash kibana

是否可以使用Kibana查询字段的不同/唯一计数?我使用弹性搜索作为我的Kibana后端。

如果是这样,查询的语法是什么?下面是我想要查询的Kibana界面的链接:http://demo.kibana.org/#/dashboard

我正在使用logstash解析nginx访问日志并将数据存储到弹性搜索中。然后,我使用Kibana运行查询并在图表中可视化我的数据。具体来说,我想知道使用Kibana在特定时间范围内的唯一IP地址数。

6 个答案:

答案 0 :(得分:50)

对于Kibana 4,请转到this answer

使用术语面板很容易做到:

Adding a terms panel to Kibana

如果要选择日志中不同IP的计数,则应在字段clientip中指定,您应该在长度上放置足够大的数字(否则,它将加入不同的IP相同的组)并在样式表中指定。添加面板后,您将拥有一个包含IP的表,以及该IP的计数:

Table with IP and count

答案 1 :(得分:42)

现在,Kibana 4允许您使用聚合。除了建立一个类似于this answer中针对Kibana 3所解释的面板之外,现在我们可以看到不同时期的唯一IP数量,即(IMO)OP首先想要的内容。

要构建这样的仪表板,您应该去Visualize - >选择您的索引 - >选择垂直条形图,然后在可视化面板中:

  • 在Y轴中,我们需要唯一的IP数(选择存储IP的字段),在X轴中我们需要一个带有时间字段的日期直方图。

Building a visualization

  • Apply 按钮后,我们应该有一个图表,显示按时分发的IP的唯一计数。我们可以在X轴上更改时间间隔,以便每小时/每天查看唯一的IP ...

Final plot

请注意,唯一计数为 approximate 。有关更多信息,请查看this answer

答案 2 :(得分:7)

请注意您使用“基数”指标的唯一计数,这并不总能保证确切的唯一计数。 : - )

  

基数度量是近似算法。它是基于   HyperLogLog ++(HLL)算法。 HLL的工作原理是对您的输入进行哈希处理   使用散列中的比特对数据进行概率估计   基数。

根据数据量的不同,我可以通过Elastic中的Unique Count获得300k数据集中缺失的700多个条目的差异,否则这些条目确实是唯一的。

在此处阅读更多内容:https://www.elastic.co/guide/en/elasticsearch/guide/current/cardinality.html

答案 3 :(得分:6)

创建" topN"查询" clientip"然后直方图计数" clientip"并设置" topN"查询作为来源。然后你会看到每次不同ips的数量。

答案 4 :(得分:3)

使用构面可以实现字段值的唯一计数。有关完整故事,请参阅ES documentation,但要点是您将创建一个查询,然后要求ES在结果上准备facet以计算字段中找到的值。您可以自定义所使用的字段,甚至可以描述您希望返回值的方式。最基本的facet类型只是按术语分组,就像上面的IP地址一样。你可以在这些方面变得非常复杂,甚至需要在你的方面进行查询!

{
    "query": {
        "match_all": {}
    },
    "facets": {
        "terms": {
            "field": "ip_address"
        }
    }
}

答案 5 :(得分:1)

使用Aggs,您可以轻松地做到这一点。 现在写下查询。

GET index/_search
{
  "size":0,
  "aggs": {
    "source": {
      "terms": {
        "field": "field",
        "size": 100000
      }
    }
  }
 }

这将返回具有文档计数的field的不同值。