我想监控 Linux 服务器的带宽使用情况,但有一个问题:两台服务器之间的流量不计入我的流量,只计入整个互联网的流量。但是,我的服务器只有一个网络接口,我尝试过的几乎所有方法都是基于每个接口进行测量的。有谁知道有什么工具可以生成带宽图表,而不计算往返于特定 IP 范围的流量?
如果它能生成 RRD 文件(我已经可以轻松地绘制它们的图表)则可以获得加分,如果它能与 collectd 一起工作(标准 collectd 的配置,或者是它的插件),则可以获得双倍的加分。
答案1
假设您无法访问提供与您的 ISP 相同的数据视图的上游路由器或交换机,您可以在每台主机上使用 iptables 统计来计算发往除您的其他 IP 地址(或 IP 范围)之外的任何地址的字节数/数据包数,然后自己将其放入 RRD 中。
编辑
举个例子,你可以使用 iptables 中的一些规则来创建会计:
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
这将创建两个新链,ACCOUNT_IN 和 ACCOUNT_OUT。然后我在 INPUT 和 OUTPUT 链的顶部插入跳转。在每个链中,我添加一个没有跳转目标的规则来匹配远程地址 - 对于输入,任何没有我本地 /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% 确定它会起作用
答案2
您应该能够通过 IPTables 执行此操作。但是,我真的很怀疑您是否能找到任何可以执行此操作的预编写软件。 http://wiki.openvz.org/Traffic_accounting_with_iptables通过 IPTables 来做这件事是一个好的开始。
我猜你无权访问你所在的交换机,这使得迄今为止的大多数其他建议都毫无用处。
答案3
您可以使用带宽。它允许您传递 pcap 过滤器,这样您就可以排除服务器之间的流量。
答案4
听起来你想要类似的东西ntop。还有很多其他工具,但这可能是最快获得所需信息的工具。它可以收集网络数据并报告,或者使用 Netflow 和 sFlow 等其他输入。