我有一台专用服务器,它有几个虚拟网络接口,每个接口都映射到一个公共 IP 地址。我如何才能监控每个流量的实时流量(以数据包/秒或 Mb/s 为单位),最好是在单个屏幕上?
我正在寻找类似的东西:
eth0:0 123 packets/s
eth0:1 234 packets/s
eth0:2 345 packets/s
我尝试过、、,iptraf
但我无法让它们中的任何一个按虚拟界面将显示分组:它们都显示整体。iftop
jnettop
eth0
请注意,我对其他工具持开放态度,只要它们可以在 CentOS(+ EPEL / remi)上使用。
答案1
在这种情况下,设备方法不是解决方案,因为内核不会将“虚拟网络设备”视为单独的设备。从技术上讲,“虚拟网络设备”只是特定 IP 地址上的标签。查看它的输出ip addr
可以清楚地发现,即使在检查输出时将其列为单独的设备块,也没有真正的“设备” ifconfig
。的手册页ip-address
还显示它被视为“标签”。使用ip addr
设置此类配置需要使用选项label
。
几乎所有用于可视化实时流量的命令行工具都依赖于协议netlink
(例如参见ip net link
)或从中读取接口数据/proc/net/dev
。由于在这两种情况下都没有列出虚拟设备,因此无法让此类实用程序以您需要的方式显示信息。
因此(在当前网络设置内)只有使用socket
基于信息并根据ip
基于过滤器/分组来按要求可视化数据才是可行的。
ntopng
例如,可以实时可视化套接字基础上的连接数据。它还应提供灵活性,可以在一个屏幕中对多个 IP 执行此操作。它仍然是基于 Web 的用户界面,不能在命令行中使用。对于 RHEL/CentOS,它可在单独的 ntopng (http://packages.ntop.org/centos/) 存储库和需求epel
。
另一个解决方案是将虚拟网络设备重新设计为被视为真实网络设备的设备类型。例如,使用veth
设备对和桥接器连接到物理设备。最终,该macvlan
设备类型也可以正常工作,并且可能更容易设置。
答案2
iptables statistics(iptables -vL)在每个规则中实现数据包计数。您可以在输入和输出链中建立不同的基于 ip 的规则,以允许所有具有源或目标的流量到达您的虚拟 IP 的每个 IP
/sbin/iptables -A INPUT -d XXX.XXX.XXX.XXX -j ACCEPT /sbin/iptables -A INPUT -d YYY.YYY.YYY.YYY -j ACCEPT /sbin/iptables -A OUTPUT -s XXX.XXX.XXX.XXX -j ACCEPT /sbin/iptables -A OUTPUT -s YYY.YYY.YYY.YYY -j ACCEPT
无论如何,我建议使用不同的 VLAN(eth0.tag1、eth0.tag2、...,而不是 eth0:1、eth0:2),因为使用正确的网络配置,除了 Linux 服务器之外,网络设备中还可以提供统计信息。
答案3
Observium 是一款出色的开源工具,我会一次又一次地推荐它。它不仅适用于大型安装,也适用于像这样的小型安装。只要您给它时间进行收集,它就会提供半实时和历史数据。
答案4
桥接虚拟接口和监控桥