是否可以使用 Kibana 查询字段的不同/唯一计数?我使用弹性搜索作为 Kibana 的后端。
如果是这样,查询的语法是什么?这是我想查询的 Kibana 界面的链接:http: //demo.kibana.org/#/dashboard
我正在使用 logstash 解析 nginx 访问日志并将数据存储到弹性搜索中。然后,我使用 Kibana 运行查询并在图表中可视化我的数据。具体来说,我想知道使用 Kibana 在特定时间范围内唯一 IP 地址的计数。
是否可以使用 Kibana 查询字段的不同/唯一计数?我使用弹性搜索作为 Kibana 的后端。
如果是这样,查询的语法是什么?这是我想查询的 Kibana 界面的链接:http: //demo.kibana.org/#/dashboard
我正在使用 logstash 解析 nginx 访问日志并将数据存储到弹性搜索中。然后,我使用 Kibana 运行查询并在图表中可视化我的数据。具体来说,我想知道使用 Kibana 在特定时间范围内唯一 IP 地址的计数。
对于 Kibana 4,请转到此答案
使用术语面板很容易做到这一点:
如果您想选择日志中不同 IP 的数量,您应该在字段中指定clientip
,您应该在长度中输入足够大的数字(否则它将加入同一组下的不同 IP)并在样式中指定桌子。添加面板后,您将有一个带有 IP 的表,以及该 IP 的计数:
现在 Kibana 4 允许您使用聚合。除了像 Kibana 3 的这个答案中解释的那样构建一个面板之外,现在我们可以看到不同时期的唯一 IP 的数量,这就是(IMO)OP 首先想要的。
要构建这样的仪表板,您应该转到可视化 -> 选择您的索引 -> 选择垂直条形图,然后在可视化面板中:
请注意,您正在使用“基数”指标的唯一计数,这并不总是能保证准确的唯一计数。:-)
基数度量是一种近似算法。它基于 HyperLogLog++ (HLL) 算法。HLL 通过散列您的输入并使用散列中的位对基数进行概率估计来工作。
根据数据量,我可以通过 Elastic 中的 Unique Count 获得 300k 数据集中缺失的 700 多个条目的差异,这些条目在其他方面确实是独一无二的。
在此处阅读更多信息:https ://www.elastic.co/guide/en/elasticsearch/guide/current/cardinality.html
在“clientip”上创建“topN”查询,然后在“clientip”上创建带有计数的直方图,并将“topN”查询设置为源。然后您将看到每次不同 ip 的计数。
字段值的唯一计数是通过使用构面来实现的。有关完整的故事,请参阅ES 文档,但要点是您将创建一个查询,然后要求 ES 在结果上准备构面,以计算字段中找到的值。您可以自定义使用的字段,甚至描述您希望如何返回值。最基本的方面类型只是按术语分组,就像上面的 IP 地址一样。您可以使用这些变得非常复杂,甚至需要在您的方面进行查询!
{
"query": {
"match_all": {}
},
"facets": {
"terms": {
"field": "ip_address"
}
}
}
使用 Aggs,您可以轻松做到这一点。现在写下查询。
GET index/_search
{
"size":0,
"aggs": {
"source": {
"terms": {
"field": "field",
"size": 100000
}
}
}
}
这将返回field
带有文档计数的不同值。