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


70

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

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

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

Answers:


49

对于Kibana 4,请转到此答案

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

向Kibana添加术语面板

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

带IP和计数的表


1
是否可以计算唯一术语(例如IP)?如果有可能,将其绘制成时间间隔怎么办,从而确定每天的唯一术语数?谢谢
Klu 2014年

3
@Klu您可以获取IP的唯一计数,还可以设置带有自定义日期的时间戳过滤器,以获取该天中每个IP的计数。您不能做的是,显示多天的图表,以及每天不同术语的唯一计数。
Pigueiras 2014年

如何使用kibana +弹性搜索获取IP的唯一计数?感谢您的快速回复
克鲁2014年

现在,如果由于某种原因,仅日期未转换为多头。最好有一个表格布局来详细说明最近10天之内的计数。
Ellesedil 2014年

@Pigueiras“您不能做的是,显示多天的图表以及每一天不同术语的唯一计数”我现在的问题-是不是像Kibana中所支持的那样简单地散布了时间表?我在这里有一个问题。stackoverflow.com/questions/26141659/...
Beamie

45

现在,Kibana 4允许您使用聚合。除了构建像在此答案中为Kibana 3所解释的那样的面板外,现在我们还可以看到不同时期内唯一IP的数量,这是OP最初想要的(IMO)。

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

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

建立可视化

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

最终情节

只需考虑唯一计数是近似值即可。有关更多信息,请查看此答案


7

请注意,您使用的是“基数”量度,它并不总是保证确切的唯一计数。:-)

基数度量是一种近似算法。它基于HyperLogLog ++(HLL)算法。HLL通过对输入进行散列并使用散列中的位对基数进行概率估计来工作。

根据数据量,我可以通过Elastic中的唯一计数获得300k数据集中缺少的700多个条目的差异,否则它们是真正唯一的。

在此处阅读更多信息:https : //www.elastic.co/guide/zh-CN/elasticsearch/guide/current/cardinality.html


6

在“ clientip”上创建“ topN”查询,然后在“ clientip”上创建带有计数的直方图,并将“ topN”查询设置为源。然后,您将看到每次不同IP的计数。


1
Kibana 3的一个好技巧:)
daks

但是由于GDPR的缘故,我们无法再在弹性搜索中存储clientip,我们该如何存储md5哈希呢?
伊贾兹·艾哈迈德·汗

3

通过使用构面可以实现字段值的唯一计数。有关完整内容,请参见ES文档,但要点是您将创建一个查询,然后要求ES在结果上准备方面以对字段中找到的值进行计数。您可以自定义使用的字段,甚至描述如何希望返回值。构面类型的最基本类型只是按术语分组,就像上面的IP地址一样。您可能会变得非常复杂,甚至需要在您的方面进行查询!

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

2
谢谢,但是我想知道如何使用Kibana作为我的弹性搜索界面进行查询。以下是指向Kibana仪表板的链接:demo.kibana.org/ #/dashboard 。您如何进行在此信息中心中提到的查询?
Khosravian

啊,对此感到抱歉。
JT

1
ES中现在不建议使用各个方面,并且现在已替换聚合
Kartoch 2015年

1

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.