监控一段时间的带宽,排除某些networking?

我想监视我的Linux服务器的带宽使用情况,但有一个问题:我的两台服务器之间的stream量不计算在内,只有stream量到达互联网。 但是,我的服务器只有一个networking接口,几乎所有我已经尝试在每个接口基础上的措施。 有没有人知道一个工具,可以生成带宽,而不计算stream量/从某些IP范围?

如果它生成RRD文件(我已经可以很容易地绘制它们),则可以获得奖励积分,如果与collectd(标准collectd或插件的configuration)一起使用则可以获得双倍奖励积分。

假设您无法访问上游路由器或交换机,以提供您的ISP所看到的相同数据视图,则可以在每台主机上使用iptables accounting来统计指向除您的其他IP地址(或IP范围),然后将其自动插入RRD。

编辑

举个例子,你可以在iptables中使用这些规则来创build记帐:

iptables -N ACCOUNT_IN iptables -N ACCOUNT_OUT iptables -I INPUT -j ACCOUNT_IN iptables -I OUTPUT -j ACCOUNT_OUT iptables -I ACCOUNT_IN -s ! 10.66.1.0/24 iptables -I ACCOUNT_OUT -d ! 10.66.1.0/24 

这会创build两个新链,ACCOUNT_IN和ACCOUNT_OUT。 然后在INPUT和OUTPUT链的顶部插入跳转。 在每个链中,我添加了一个没有跳转目标的规则,以便在远程地址上进行匹配 – 对于input,任何在本地/ 24上没有地址作为源的东西; 用于输出,任何在我的本地/ 24上没有地址作为目的地。 然后数据包从此链返回到正常的INPUT / OUTPUT链,因为没有跳转规则。

检查会计数据:

 # iptables -L ACCOUNT_IN -n -v Chain ACCOUNT_IN (1 references) pkts bytes target prot opt in out source destination 5 2138 all -- * * !10.66.1.0/24 0.0.0.0/0 # iptables -L ACCOUNT_OUT -n -v Chain ACCOUNT_OUT (1 references) pkts bytes target prot opt in out source destination 15 2846 all -- * * 0.0.0.0/0 !10.66.1.0/24 

从那里你可以得出这些pkt /字节计数并传递给rrdupdate(我假设你可以将数据传递到rrd,正如你所说的将数据从rrd中提取出来是可以的,否则,这个问题可能已经在这里问过了)。

如果您想在每次读取计数器时清零,请传递-Z命令(零计数器)以清零字节计数器。

如果你的主机是路由器,那么你需要在FORWARD链上进行记帐 – 你可以在FORWARD链的顶部插入一个跳转到ACCOUNT_IN和ACCOUNT_OUT,它会做正确的事情,但我还没有想到这足以100%肯定会工作

你应该可以通过IPTables来做到这一点。 不过,我真的怀疑你会find任何可以做到的预写软件。 http://wiki.openvz.org/Traffic_accounting_with_iptables将是通过IPTables做这件事的一个很好的开始。

我猜你没有权限访问你所托pipe的交换机,这使得大多数其他build议目前无用。

你可以使用bandwithd 。 它允许你通过pcapfilter,所以你可以排除你的服务器之间的stream量。

我会使用支持Netflow的交换机来解决这个问题。 Netflow工具并不总是免费的,但这应该做你想要的。

听起来像你想要的东西像ntop 。 有很多其他的工具,但这可能是最快得到你想要的。 它可以收集电报并报告,或使用Netflow和sFlow等其他input。