菜鸟科技网

Linux网络流量监控,有哪些实用命令?

在Linux系统中,网络流量监控是系统管理和故障排查的重要环节,通过实时或定期分析网络接口的数据传输情况,管理员可以及时发现异常流量、优化网络配置、定位性能瓶颈,以下将详细介绍常用的Linux网络流量监控命令,涵盖基础工具、高级分析工具及特定场景的解决方案,并结合实例说明其使用方法。

Linux网络流量监控,有哪些实用命令?-图1
(图片来源网络,侵删)

基础网络流量监控命令

这类命令通常预装于大多数Linux发行版,适合快速查看实时流量或基础统计信息。

ifconfig

ifconfig(接口配置)是最传统的网络工具之一,不仅能配置网络接口,还能显示流量统计,执行ifconfig后,输出中包含RX packets(接收包)、TX packets(发送包)、RX bytes(接收字节数)、TX bytes(发送字节数)等字段。

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500  
        RX packets 12345  bytes 1234567 (1.2 MB)  
        TX packets 6789  bytes 789012 (789.0 KB)  

通过对比两次执行的差值,可计算某段时间内的流量,但缺点是无法实时动态更新,需手动重复执行。

ip命令

ip命令是ifconfig的替代工具,功能更强大,使用ip -s link可显示网络接口的详细统计信息,包括接收/发送的字节数、包数、错误数等:

Linux网络流量监控,有哪些实用命令?-图2
(图片来源网络,侵删)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000  
    link/ether 00:0c:29:xx:xx:xx brd ff:ff:ff:ff:ff:ff  
    RX: bytes  packets  errors  dropped overrun mcast   
    1234567    12345    0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns   
    789012     6789     0       0       0       0       

ifconfig类似,需通过差值计算流量,但ip命令的输出更规范,适合脚本处理。

netstat

netstat主要用于显示网络连接、路由表和接口统计,结合-i参数可查看网络接口流量:

Kernel Interface table  
Iface       MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg  
eth0       1500    12345      0      0 0          6789      0      0      0 BMRU  

其中RX-OKTX-OK分别表示接收和发送的成功包数。netstat的优势在于能同时显示连接状态(如-t显示TCP连接),适合综合排查网络问题。

实时动态流量监控工具

这类工具支持实时刷新流量数据,适合持续监控网络接口的瞬时速率。

Linux网络流量监控,有哪些实用命令?-图3
(图片来源网络,侵删)

iftop

iftop(Interface Top)类似top命令,可实时显示网络接口的带宽占用情况,按连接或IP地址排序,默认安装可能需通过yum install iftopapt install iftop完成,执行iftop -i eth0后,界面会显示:

                 192.168.1.100 => 192.168.1.1     1.2Mb  1.5Mb  1.1Mb  
                 192.168.1.1 <= 192.168.1.100     0.8Mb  0.9Mb  0.7Mb  
---------------------------------------------  
TX total:       2.0Mb  RX total:       1.5Mb  TOTAL: 3.5Mb  

箭头表示数据流向,右侧三列分别代表2秒、10秒、40秒的平均带宽,通过-P参数可显示端口号,-n参数禁用DNS解析以提升效率。

nload

nload是一个简洁的实时流量监控工具,以图形化方式显示接收和发送的速率,安装后执行nload eth0,界面分为上下两部分:

  • 上半部分:接收(RX)速率,实时显示当前、平均、最大速率。
  • 下半部分:发送(TX)速率,同样包含实时和统计信息。
    nload的优势是直观易用,适合快速查看单个接口的流量趋势,支持-u参数指定单位(如-u M显示为MB/s)。

bmon

bmon(Bandwidth Monitor)是一款功能更强大的实时监控工具,支持图形化界面和多种输出格式,执行bmon -p eth0后,可显示详细的流量图形、速率曲线及错误统计,通过-o参数可指定输出格式(如-o ascii在终端显示文本图形),适合需要可视化分析的场景。

高级流量分析与统计工具

这类工具适合深度分析网络协议、连接详情或长期流量统计。

tcpdump

tcpdump是网络抓包工具,可捕获并分析网络数据包,支持按协议、端口、IP等条件过滤,抓取eth0接口上HTTP流量:

tcpdump -i eth0 -n 'tcp port 80'  

-n参数禁用DNS解析,-w参数可将抓包结果保存到文件(如-w capture.pcap),供Wireshark等工具进一步分析。tcpdump适合定位具体应用层的流量问题,如HTTP请求异常、TCP连接失败等。

nethogs

nethogs按进程显示网络带宽占用,解决了传统工具无法区分进程流量的问题,安装后执行nethogs eth0,输出如下:

  PID USER     PROGRAM                      DEV    SENT   RECEIVED       
 1234 root     nginx                        eth0   1.2MB   5.6MB         
 5678 user     ssh                          eth0   0.1MB   0.2MB         

当系统出现异常流量时,可通过nethogs快速定位占用带宽高的进程,结合kill命令终止异常进程。

vnstat

vnstat是一个网络流量统计工具,长期记录网络接口的流量数据并生成报告,安装后需先启动服务(systemctl start vnstat),执行vnstat -i eth0 -d显示每日流量统计:

 eth0  /  daily  
         day         rx      |     tx      |    total    |   avg. rate  
     ------------------------+-------------+-------------+---------------  
     2023-10-01     1.2GB   |    0.8GB    |    2.0GB    |   231.5kbit/s  
     2023-10-02     1.5GB   |    0.9GB    |    2.4GB    |   277.8kbit/s  
     ------------------------+-------------+-------------+---------------  
     estimated      1.8GB   |    1.1GB    |    2.9GB    |               

vnstat适合长期监控服务器的流量趋势,支持-m(月统计)、-h(小时统计)等参数,数据存储在本地数据库中,重启后不丢失。

工具对比与选择

不同工具的适用场景和功能特点差异较大,以下为简要对比:

工具名称 实时性 功能特点 适用场景
ifconfig 基础接口统计 快速查看累计流量
ip -s 规范化统计信息 脚本处理或自动化任务
iftop 按连接/IP显示实时带宽 实时监控异常流量来源
nload 图形化显示速率 快速查看接口实时速率
tcpdump 抓包分析协议详情 定位应用层网络问题
nethogs 按进程统计带宽 定位高带宽占用进程
vnstat 长期流量统计与报告 分析长期流量趋势

相关问答FAQs

Q1: 如何实时监控某个特定端口(如80端口)的网络流量?
A1: 可结合tcpdumpiftop实现,首先使用tcpdump抓取80端口流量并保存到文件:tcpdump -i eth0 -n 'tcp port 80' -w http_traffic.pcap,然后通过iftop -f 'tcp port 80'实时过滤显示80端口的带宽占用,若需分析抓包结果,可用tcpdump -r http_traffic.pcap读取文件或用Wireshark打开。

Q2: vnstat统计的数据不准确,如何重置或重新初始化数据库?
A2: vnstat的数据库默认存储在/var/lib/vnstat/目录下,以接口名命名(如eth0),重置数据库需先停止服务:systemctl stop vnstat,然后删除对应数据库文件:rm -f /var/lib/vnstat/eth0,最后重新启动服务并初始化:systemctl start vnstat && vnstat -u -i eth0,注意,重置后历史数据将丢失,建议提前备份。

分享:
扫描分享到社交APP
上一篇
下一篇