如何收集在Linux上简洁的stream量统计?

我需要按时间段来划分统计数据,如下所示:

time_1 - time_1 + 5mins from_ip1 > to_ip2 total_packages_size1 from_ip3 > to_ip4 total_packages_size2 time_1 + 5mins - time_1 + 10mins from_ip1 > to_ip2 total_packages_size3 from_ip5 > to_ip6 total_packages_size4 ... 

我看了tcpdump ,我知道如何得不到它的总结统计。 但我真的不想做一个处理tcpdump日志的工具,然后清除它们。 这个标准问题应该有一些现成的工具。

我倾向于在iptables中使用会计规则来做到这一点。 我创build了一个自定义审计规则

 iptables -N GKT-AUDIT 

然后我发送所有的stream量,在这种情况下, OUTPUT链,通过该规则之前的任何其他

 iptables -I OUTPUT 1 -j GKT-AUDIT 

然后,我将没有目标的规则引入GKT-AUDIT

 iptables -A GKT-AUDIT -s 5.5.5.1 -d 7.7.7.2 iptables -A GKT-AUDIT -s 5.5.5.3 -d 7.7.7.4 

等等。 由于这些规则没有目标,匹配的包不会终止,而是继续通过GKT-AUDIT链,然后退出并返回到OUTPUT链,因此规则对数据stream没有影响。 但是这些数据包的确会增加匹配规则的数据包数量,所以我可以从统计的angular度来分割和切割我的stream量。 然后,我通常会用一个munin插件收集它们,然后用munin绘制它们,但这是一个可能适用或不适合你的改进。

关于使用iptables的好处在于它可以对stream量进行多种不同的分割,所以我可以非常精确地知道任何特定规则匹配的stream量:如果我只想从某个地址到某个其他地址的数据包进行计数,但是只能在一个特定的源端口范围内,而且只有当它是一个超过10MB的连接的一部分时,我才能做到这一点。

不知道这是否会帮助你,但也许值得一看。

你可以用wireshark导入原始的tcpdump文件,这是一个非常好的工具。 不知道是否可以使用汇总文件。

问候,jgr

你的后端networking基础设施是什么? Netflow基本上就是你所描述的用例。 它由思科开发,但在大多数高端交换机上都可用。

如果你必须在主机层面上这样做,这听起来像ntop的工作。 我不认为它的报告是按照你想要的那样递增的,但是你可以绑定到它的Python API来得到你想要的。