今天,给大家介绍一款实用的流量监控工具——Nethogs,可以说是Linux运维必备工具!

一、Nethogs是什么?

Nethogs是一款开源的进程级网络流量监控工具。和其他传统的网络监控工具(比如iftop、netstat)不太一样,它不是按照协议或者子网来统计带宽使用情况,而是直接精确到每个进程。这意味着,不管是哪个程序在偷偷占用大量网络带宽,Nethogs都能帮你揪出来,而且它不需要依赖特殊的内核模块就能工作。通过实时监测网络接口,一旦有进程突然占用大量带宽,Nethogs能让你第一时间发现。

二、安装Nethogs

Nethogs对主流的Linux发行版都很友好,通过系统自带的包管理器就能轻松安装。

  • Debian/Ubuntu系统:在终端输入以下命令即可安装:
sudo apt-get install nethogs 
  • Fedora系统:安装命令如下:
sudo dnf install nethogs 
  • Arch Linux系统:执行这条命令进行安装:
sudo pacman -S nethogs 
  • CentOS/RHEL系统:可以使用下面的命令安装,部分系统可能需要手动添加仓库,具体操作参考项目文档:
sudo yum install nethogs # 或使用 EPEL 源 

三、Nethogs基础用法详解

(一)启动监控

要启动Nethogs进行网络流量监控,在终端输入下面的命令:

sudo nethogs 

这里需要注意,必须使用管理员权限运行,否则可能有些进程的流量信息无法显示出来。

Nethogs启动后的输出界面包含了很多关键信息:

  • PID:就是进程的ID号,每个进程都有独一无二的ID,方便我们准确找到对应的进程。
  • USER:表示运行这个进程的用户是谁。
  • PROGRAM:显示的是进程的名字或者路径,通过它能知道具体是哪个程序在占用网络。
  • SENT:记录的是这个进程累计发送出去的网络流量。
  • RECEIVED:指的是进程累计接收到的网络流量。
  • TOTAL:就是发送流量和接收流量加起来的总和。

(二)指定网络接口

如果你只想监控某个特定的网络接口(比如eth0),可以用下面的命令:

sudo nethogs eth0 

要是你还想把环回接口(lo)也包含进去一起监控,加上-a参数就行:

sudo nethogs -a 

(三)交互式操作

在Nethogs运行过程中,有一些快捷键可以使用:

  • 按下q键,就能退出监控界面。
  • s键,会按照发送流量的大小对进程进行排序;按r键,则是按照接收流量排序。
  • m键,可以在不同的流量单位(B/KB/MB)之间进行切换,方便查看。

四、Nethogs高级功能与参数介绍

Nethogs提供了很多参数,能让我们实现更精细化的监控。

  • 设置刷新间隔:使用-d <秒>参数可以设置Nethogs数据刷新的时间间隔,默认是1秒刷新一次。比如想改成每5秒刷新一次,就用这个命令:
sudo nethogs -d 5 
  • 运行指定次数后退出-c <次数>参数可以让Nethogs运行指定次数后自动退出。例如,只运行3次就退出,命令如下:
sudo nethogs -c 3 
  • 设置流量单位模式-v <模式>参数可以设置流量的显示单位模式。0代表以KB/s显示(这是默认模式);1表示显示总KB数;2是显示总字节数(B);3则是以总MB数显示。比如想用MB显示总流量,就执行这个命令:
sudo nethogs -v 3 
  • 追踪模式-t参数开启追踪模式,在这种模式下,Nethogs会输出单列数据,方便记录到日志里。例如,把监控数据记录到/var/log/network.log文件中,命令是:
sudo nethogs -t >> /var/log/network.log 
  • 监听混杂模式-p参数用于开启监听混杂模式,但这个模式要谨慎使用,一般只在测试的时候用。比如在eth0接口上开启混杂模式:
sudo nethogs -p eth0 
  • 静默模式-s参数可以启用静默模式,在这种模式下,Nethogs只会显示统计信息,通常和-t参数一起使用。例如:
sudo nethogs -t -s 

下面是一个组合使用的例子,每10秒监控enp1s0接口,一共监控3次,然后把数据记录到nethogs.log文件中:

sudo nethogs -t -d 10 -c 3 enp1s0 >> nethogs.log 

五、Nethogs实战应用

(一)快速排查网络拥堵

当你感觉网速不对劲,变得很慢的时候,就可以运行sudo nethogs命令,它能马上帮你找到占用大量带宽的进程PID。比如说,发现PID为1234的进程一直在上传大量数据,这时候可以通过ps -ef | grep 1234命令来查看这个进程的详细信息,然后根据情况终止这个异常的任务。

(二)带宽优化配置

通过长期使用Nethogs进行监控,你可以发现一些不必要占用网络带宽的进程。比如,发现某个后台同步工具总是在深夜持续下载数据,这可能会影响白天正常的业务网络使用,就可以调整它的运行时间,避免对业务造成影响。

(三)安全监控

如果突然出现某个进程占用大量网络流量,这可能意味着有恶意程序在搞破坏。我们可以结合像awk这样的日志分析工具来定位异常。下面这条命令可以从nethogs.log文件中提取出高流量的进程:

# 提取高流量进程 awk '{print $1,$2,$7}' nethogs.log | sort -nrk 3 | head 

这条命令的作用是,从日志文件中提取出进程ID、运行用户和总流量这几列数据,然后按照总流量从大到小排序,最后只显示前几条数据,这样就能快速找到那些高流量的进程了。

六、Nethogs与同类工具对比

在网络监控领域,有很多工具可以选择,下面来看看Nethogs和其他常见工具的区别:

  • iftop:主要按照协议或者子网来统计流量,适合用来分析实时的网络流量分布情况。
  • netstat:它的主要功能是查看网络连接状态,比如统计端口使用情况、连接数量等。
  • nload:专注于网卡级别的实时带宽统计,比较适合用来监控单个网卡的性能。
  • Nethogs:最大的特点就是能够进行进程级的网络流量监控,而且不需要内核模块支持,还可以实时交互操作。当你想要确定是哪个进程在占用网络带宽时,Nethogs就非常合适。

七、常见问题解答

(一)为什么运行Nethogs需要sudo权限?

因为Nethogs要获取底层网络接口的信息,普通用户的权限是不够的,所以必须使用管理员权限(sudo)才能正常运行,这样它才能全面地监控到所有进程的网络流量情况。

(二)怎么才能显示完整的进程路径?

默认情况下,Nethogs显示的是进程名。有些版本可以通过-p参数来显示完整路径(部分版本可能不支持这个功能)。另外,也可以直接查看PROGRAM列,有些进程的路径信息会直接显示在那里。

(三)为什么监控不到网卡流量?

首先要确认网卡名称是不是正确,可以使用ip a命令查看。如果名称没问题,还监控不到,可以尝试加上-a参数,让它包含所有的网络接口进行监控。另外,如果是在容器或者虚拟机环境下,可能还需要调整相关权限才能正常监控。

(四)如何实现自动化监控?

可以结合脚本让Nethogs周期性地运行。比如下面这个脚本,它能让Nethogs每小时记录一次流量数据:

# 每小时记录一次流量数据 while true; do sudo nethogs -t -d 3600 >> /var/log/nethogs_hourly.log; done 

这个脚本的意思是,让Nethogs一直循环运行,每次运行时以追踪模式,每隔3600秒(也就是1小时)记录一次数据,然后把数据追加到/var/log/nethogs_hourly.log文件中。

八、总结

Nethogs作为一款强大的进程级网络流量监控工具,有着进程级带宽监控和无需内核依赖的优势,在排查网络问题、优化带宽配置和保障网络安全方面都能发挥很大的作用。它丰富的参数和功能,可以满足不同的监控需求。对于运维人员来说,掌握Nethogs的高级用法,比如自动化日志记录和与其他工具的集成,能大大提高工作效率,这样你的网络运维工作也更加轻松。