如何在Linux上收集简洁的流量统计数据?

如何在Linux上收集简洁的流量统计数据?

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

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 日志然后清除它们的工具。应该有一些现成的工具可以解决这个标准问题。

答案1

我倾向于使用 iptables 中的会计规则来实现这一点。我创建了一个自定义审计规则

iptables -N GKT-AUDIT

然后,我先将所有经过的流量(在本例中为链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,因此规则对数据流没有影响。但数据包在匹配规则通过时增加数据包计数,这样我就可以从统计角度对流量进行任意分割。然后我通常使用穆宁插件,并让 munin 绘制它们的图表,但这种改进可能适合你,也可能不适合你。

使用 iptables 的好处是它可以用很多不同的方式切分流量,所以我可以非常精确地知道任何特定规则匹配的流量:如果我只想计算从某个地址到某个其他地址的数据包,但只在某个源端口范围内,并且只有当它是传输量超过 10MB 的连接的一部分时,我才能这样做。

答案2

不知道这是否对您有帮助,但也许值得研究。

您可以在 wireshark 中导入原始 tcpdump 文件,这是一个非常好的工具。但不确定是否可以使用汇总文件。

问候,jgr

答案3

您的后端网络基础设施是什么?Netflow 几乎就是为您描述的用例而构建的。它由 Cisco 开发,但可在大多数高端交换机上使用。

如果你必须在主机级别执行此操作,这听起来像是ntop。我认为它的报告不会像您希望的那样增量,但您可能可以结合其 Python API 来获得您想要的内容。

相关内容