如何使用 Kibana + 弹性搜索检索一个字段的唯一计数

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

如果是,查询的语法是什么?这里有一个链接到 Kibana 界面,我想进行我的查询: http://demo.kibana.org/#/dashboard

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

137090 次浏览

字段值的唯一计数是通过使用方面实现的。请参阅 ES 文档了解完整的故事,但要点是您将创建一个查询,然后要求 ES 为计算字段中找到的值的结果准备方面。您可以自定义所使用的字段,甚至描述如何返回值。最基本的方面类型只是按术语进行分组,类似于上面的 IP 地址。使用这些工具您可能会变得非常复杂,甚至需要在方面中进行查询!

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

齐巴纳4转到 这个答案

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

Adding a terms panel to Kibana

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

Table with IP and count

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

现在 Kibana 4允许您使用聚合。除了像在 这个答案中为 Kibana 3所解释的那样建立一个面板之外,现在我们可以看到不同时期独特 IP 的数量,这正是 OP 最初想要的。

要建立一个这样的仪表板,你应该进入可视化-> 选择你的索引-> 选择一个垂直条形图,然后在可视化面板:

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

Building a visualization

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

Final plot

只要考虑到唯一的计数是 一个 href = “ https://www.elastic.co/guide/en/elasticsearch/reference/current/search- 计数是近似的”rel = “ noReferrer”> 近似的 。为了更多的信息检查也是 这个答案

注意 Unique count 使用的是“基数”度量,这并不总是保证精确的惟一计数。 : -)

基数度量是一种近似算法 HyperLogLog + + (HLL)算法 使用散列中的位对 枢机主教。

根据数据量的不同,我可以得到一个300k 数据集中缺失的700多个条目的差异,通过唯一的弹性计数,否则真的是唯一的。

阅读更多: https://www.elastic.co/guide/en/elasticsearch/guide/current/cardinality.html

使用 Aggs 你可以很容易地做到这一点。 现在写下查询。

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

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

对于 Kibana 7. xUnique Count在大多数可视化中都可用。

例如,在 镜头中:

enter image description here

在基于 聚合的可视化中:

enter image description here

甚至在 TSVB中(不支持普通字段和运行时字段,脚本字段也不支持) :

enter image description here