监控Linux中的网络流量的5个系统工具

时间:2020-01-09 10:41:47  来源:igfitidea点击:

如何在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命令行选项来更改所使用的端口。
我故意不将--permanentfirewalld一起使用,因为我只想允许此端口进行临时会话。

[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 &lt;服务器主机名或者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中)