如何可视化 Kibana 中数组字段中所有值的计数

How to visualize a count of all values in an array field in Kibana

我在 Kibana 中创建特定类型的可视化时遇到问题。我在 Kibana 中的事件是两个 ip 地址之间通信的统计信息。其中两个字段是特定 IP 地址使用的端口列表。这些字段的示例是:

ip1 = 192.168.101.2
ip2 = 192.168.101.3
ip2Ports = 80,443
ip1Ports = 80,57000,0

我想对所有值进行计数,例如

port    count
80      2
57000   1
443     1

我已经能够将 ip2Ports 解析为 ip2Ports_List.column1、ip2Ports_List.column2 等,但我只能在可视化中选择一个具有术语聚合的术语。我可以拆分图表,但这会导致每个字段的单独计数。如果我通过原始 ip2Ports 字段,它只是聚合为字符串,例如“80,443”。

甚至可以创建具有多个值的字段的最高计数可视化吗?如果是这样,我会怎么做。如果没有,有没有办法重组我的数据以便我可以做到?谢谢!

我的问题源于 Logstash 发送的值 的 格式。我原以为 'ip2Ports_List.column1' 格式是数组的一部分,这是使用 csv 过滤器的结果。事实并非如此。分析了一下,'ip2Ports_List.column1'好像和新领域没什么区别。

Elastic 需要一个数组 来提供我想要的可视化效果。我不确定制作它的最佳方法是什么,所以我最终使用了 ruby 过滤器。这就是代码最终的样子:

ruby {
  code => "fields = event.get('portsIp').split(',')
  event.set('portsIpArray',fields)"
}

其中 'portsIp' 看起来像“80,443”。拆分它会将 'portsIp' 变成 Ruby 数组 。我只是将该数组设置为新事件字段 'portsIpArray' 的值。

从那里开始,当我尝试可视化 'portsIpArray' 字段时,它看起来正是我想要的,将每个端口视为单独的值,并且仍然将每个端口与相同的 event/field 相关联。

额外: 我还发现,如果您像我一样直接在 Logstash conf 文件中编写代码,Logstash 不喜欢在双引号代码中使用双引号。事后看来是有道理的,但没有给出明确的错误,所以很难弄清楚。