监控Linux中的网络流量的5个系统工具
如何在Linux中监控网络流量?
如何在Linux中实时监视应用程序网络流量?
如何在Linux中使用命令行执行速度测试?
如何在Linux中以图形和CLI监视网络速度。
我们将在本教程中讨论这些问题。
有多种开源软件和商业软件可用于监视网络流量。
但是我将专注于Linux发行版中提供的工具,而不是第三方工具。
我将在所有演示中使用CentOS 8,其中" 192.168.43.154"(server.example.com)将充当服务器,而" 192.168.43.10"(client.example.com)将充当客户端。
如果我们使用的是其他发行版,则某些命令及其参数可能会有所不同。
方法1:使用iperf3检查网络带宽
" iperf3"是用于执行网络吞吐量测量的工具。
它可以测试TCP,UDP或者SCTP吞吐量。
要执行" iperf3"测试,用户必须同时建立服务器和客户端。
我们可以使用" yum search"来获取软件包名称。
~]# yum search iperf Last metadata expiration check: 1 day, 1:47:01 ago on Thu 17 Sep 2017 01:25:43 PM IST. ============================================ Name Matched: iperf ============================================ iperf3.i686 : Measurement tool for TCP/UDP bandwidth performance iperf3.x86_64 : Measurement tool for TCP/UDP bandwidth performance
在服务器和客户端节点上均安装iperf3
[root@server ~]# yum install iperf3 -y [root@client ~]# yum install iperf3 -y
在充当服务器的节点上,我将启用端口" 5201",这是" iperf3"使用" firewalld"使用的默认端口。
可以使用-p命令行选项来更改所使用的端口。
我故意不将--permanent
与firewalld
一起使用,因为我只想允许此端口进行临时会话。
[root@server ~]# firewall-cmd --add-port=5201/tcp --zone=public success
在服务器系统上,命令" iperf3"使用" iperf3 -i 5 -s"监听客户端连接:
其中
-i
提供定期带宽更新的间隔-s作为服务器监听
来自我的服务器的输出示例。
客户端停止发送数据包后,按Ctrl + C
在服务器上运行的iperf3
在客户端节点上,执行" iperf3 -i 5 -t 60 -c <服务器的IP /主机名>"
客户端的iperf3会话
其中
-i
提供定期带宽更新的间隔-t
运行测试的时间,以秒为单位-c连接到位于...的侦听服务器
因此,我的服务器和客户端之间的"网络吞吐量"为~6 GB /秒。
方法2:使用qperf进行网络黑白和延迟测量
qperf是一种网络带宽和延迟测量工具,可用于许多传输,包括TCP/IP,RDMA,UDP和SCTP。
它在RHEL和CentOS服务器通道中可用,因此不需要第三方软件包。
在服务器和客户端主机上从安装qperf:
[root@server ~]# yum install qperf -y [root@client ~]# yum install qperf -y
默认情况下,服务器侦听TCP端口" 19765"。
这可以通过--listen_port选项来改变。
[root@server ~]# firewall-cmd --add-port=19765/tcp --add-port=19766/tcp success
由于我不打算使用该端口,因此我没有使用过--permanent,因此防火墙规则的更改将不会持久。
在服务器上执行qperf
开始接收包装
[root@server ~]# qperf
同时在客户端上执行以下命令以检查" TCP带宽"。
其中将192.168.43.154替换为启动qperf的服务器的IP或者主机名。
[root@client ~]# qperf -ip 19766 -t 60 --use_bits_per_sec 192.168.43.154 tcp_bw
其中
-ip
使用Port运行套接字测试-t将测试持续时间设置为时间。
--use_bits_per_sec在显示网络速度时使用位/秒而不是字节/秒
同样,我们可以检查服务器和客户端之间的" TCP延迟"。
这里的等待时间为83.1微秒,由于我们使用了-v,因此结果更加详细。
[root@client ~]# qperf -ip 19766 -t 60 --use_bits_per_sec 192.168.43.154 -vvs tcp_lat
方法3:将nc或者netcat与dd命令一起使用
dd是在coreutils
软件包中,而nc
是在nc
软件包中,两者均由Red Hat和CentOS默认存储库提供。
在服务器上,启用用于监视网络吞吐量的端口。
我将使用端口" 12345",因此仅在本次会话中临时启用了该端口,而未使用" --permanent"。
[root@server ~]# firewall-cmd --add-port=12345/tcp success
接下来在服务器上启动一个netcat
监听器。
[root@server ~]# nc -l -n 12345 > /dev/null
同时让客户机使用dd if =/dev/zero bs = 1M count = 10240 |连接到侦听器| nc -n <服务器主机名或者IP地址> 12345
。
dd命令将报告吞吐量/秒:
使用dd和nc监视网络吞吐量
说明:
netcat使用的缓冲区比其他工具小,并且该缓冲区的大小无法更改,这在netcat中引入了瓶颈,因此netcat的吞吐量将明显低于iperf等专用工具
方法4:使用TX和RX字节来计算每个接口的实时网络使用率
有多种系统工具可为我们提供各个接口的TX(传输)和RX(接收)数据。
我们可以轻松地监视这些值,以获取实时网络带宽使用情况的详细信息。
来自eth1接口的ifconfig输出
~]# ifconfig eth1 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.43.154 netmask 255.255.255.0 broadcast 192.168.43.255 inet6 fe80::a00:27ff:fe95:c0e3 prefixlen 64 scopeid 0x20 inet6 2401:4900:120d:cd6b:a00:27ff:fe95:c0e3 prefixlen 64 scopeid 0x0 ether 08:00:27:95:c0:e3 txqueuelen 1000 (Ethernet) RX packets 3902476 bytes 85261651441 (79.4 GiB) RX errors 0 dropped 1 overruns 0 frame 1 TX packets 2516956 bytes 168473567 (160.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
/proc/net/dev的内容
~]# grep -E 'eth1|Inter' /proc/net/dev Inter-| Receive | Transmit eth1: 85261669043 3902679 0 1 0 1 0 0 168491603 2517170 0 0 0 0 0 0
ip命令的输出
~]# ip -s link show eth1 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 08:00:27:95:c0:e3 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 85261675055 3902749 0 1 0 0 TX: bytes packets errors dropped carrier collsns 168497603 2517238 0 0 0 0
因此,如我们所见,所有这些命令为我们提供了一段时间内从eth1接口接收的总传输和接收字节的数据。
我们将使用一个自定义脚本,通过使用这些TX和RX字节来监控" eth1"接口上的实时流量使用情况
其中我写了一个shell脚本,它可以在Linux服务器上实时监视各个接口:
我们必须使用要监视的接口来执行此shell脚本:
~]# /tmp/monitor_nic.sh eth1 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 Fri Sep 18 21:47:25 IST 2017 traffic RX : 1230.01Mbps traffic TX : 819.57Kbps
屏幕将每隔2秒刷新一次,我们将在提供的界面上获得实时网络带宽使用情况。
方法5:使用sar监视网络流量
sar是S系统的一个短期缩写。
它可用于实时监视Linux系统性能。
sar命令根据count和interval参数中的值写入标准输出
收集的数据除了显示在屏幕上之外,还可以保存在-o filename标志指定的文件中。
我们可以使用标志选择有关特定系统活动的信息。
不指定任何标志只会选择CPU活动。sar命令提取并写入先前保存在文件中的标准输出记录。
该文件可以是由-f标志指定的文件。所有数据均以二进制形式捕获,并保存到默认位置为"/var/log/sa/saXX"的文件(数据文件)中,其中" XX"指定了每月的某天。
sar是sysstat软件包的一部分。
默认情况下可能未安装此软件包,因此我们可以手动安装它:
~]# yum -y install sysstat
用于监视每个接口的实时网络流量的语法:
# sar -n DEV [interval] [count]
在此示例中,我们以2
秒为间隔执行sar 10次。
这给出了每个接口发送和接收的数据包的实时信息。
我们可以查看sar的手册页以了解有关各个部分的信息
~]# sar -n DEV 2 10 Linux 4.18.0-193.14.2.el8_2.x86_64 (server.example.com) 09/18/2017 _x86_64_ (1 CPU) 09:52:16 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 09:52:18 PM eth1 1.50 1.50 0.11 0.12 0.00 0.00 0.00 0.00 09:52:18 PM virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:52:18 PM eth0 0.50 0.50 0.03 0.35 0.00 0.00 0.00 0.00 09:52:18 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:52:18 PM virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 <Output trimmed> Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil Average: eth1 2154.42 1015.83 99623.28 65.86 0.00 0.00 0.00 0.00 Average: virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: eth0 0.67 0.67 0.04 0.29 0.00 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
我们可以阅读有关sar和支持监视其他类型的系统资源的许多其他选项的更多信息(在CLI和GUI中)