是否可以使用Kibana查询字段的不同/唯一计数?我使用弹性搜索作为我的Kibana后端。
如果是这样,查询的语法是什么?下面是我想要查询的Kibana界面的链接:http://demo.kibana.org/#/dashboard
我正在使用logstash解析nginx访问日志并将数据存储到弹性搜索中。然后,我使用Kibana运行查询并在图表中可视化我的数据。具体来说,我想知道使用Kibana在特定时间范围内的唯一IP地址数。
答案 0 :(得分:50)
对于Kibana 4,请转到this answer
使用术语面板很容易做到:
如果要选择日志中不同IP的计数,则应在字段clientip
中指定,您应该在长度上放置足够大的数字(否则,它将加入不同的IP相同的组)并在样式表中指定。添加面板后,您将拥有一个包含IP的表,以及该IP的计数:
答案 1 :(得分:42)
现在,Kibana 4允许您使用聚合。除了建立一个类似于this answer中针对Kibana 3所解释的面板之外,现在我们可以看到不同时期的唯一IP数量,即(IMO)OP首先想要的内容。
要构建这样的仪表板,您应该去Visualize - >选择您的索引 - >选择垂直条形图,然后在可视化面板中:
请注意,唯一计数为 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
的不同值。