尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

iftop:Linux服务器网络流量实时监控与诊断利器

iftop:Linux服务器网络流量实时监控与诊断利器 1. 从“流量去哪儿了”说起为什么你需要iftop做运维或者开发的朋友估计都经历过这样的场景服务器突然变慢CPU和内存看着都挺正常但业务就是卡得不行。这时候你第一反应是什么我猜很多人会去查日志看进程但往往忽略了最基础也最直接的一环——网络。网络是服务的血管流量就是血液。你不知道血液是堵在了哪里还是流向了不该去的地方光看心脏CPU和肺内存是没用的。这时候一个轻量级但极其强大的命令行工具就该登场了iftop。它不是什么复杂的监控系统没有华丽的图形界面但它能给你最实时、最直观的网络流量“快照”。你可以把它想象成一个安装在服务器网卡上的“流量监听器”能告诉你此时此刻你的服务器在和谁“聊天”聊得多火热是正常的业务交互还是异常的流量攻击或数据泄露。很多人知道top看进程知道netstat看连接但iftop才是真正把“流量”这个抽象概念具象化的利器。它特别适合排查一些“幽灵”问题比如某个未知IP在疯狂下载你的数据比如某个内部服务异常地对外产生了大量连接消耗了带宽再比如你想简单评估一下某个新上线的接口其网络吞吐量到底有多大。iftop给出的信息是ping连通性和netstat连接状态无法替代的流量视角。2. iftop的核心原理它到底在“看”什么在深入命令之前我们先搞明白iftop是怎么工作的。这能帮你更好地理解它的输出以及它的局限性。iftop本质上是一个网络流量分析工具它工作在数据链路层OSI模型的第二层。它通过将网卡设置为“混杂模式”Promiscuous mode来捕获流经该网卡的所有数据包而不仅仅是发给本机的包。然后它对捕获到的数据包进行统计和分析按源IP、目的IP、端口等维度进行归类并计算其带宽占用。这里有几个关键点需要理解2.1 混杂模式与权限因为要捕获所有数据包所以iftop通常需要 root 权限使用sudo来运行。没有这个权限它只能看到发给本机的流量意义就小了很多。这也是为什么你在个人电脑上直接运行可能看不到什么流量的原因——你的网卡可能没收到其他主机的包。2.2 基于数据包的实时统计iftop不是通过读取/proc/net/dev这类系统文件来获取全局流量统计的那是ifconfig或ip -s link干的事。它是实时抓包、实时分析。这意味着它的开销比读取静态文件要大但得到的信息维度也丰富得多——它知道流量是谁和谁之间的。2.3 采样与刷新iftop默认每2秒刷新一次屏幕。在这2秒内它持续抓包并累计每个连接会话的流量然后在刷新时计算并显示这2秒内的平均速率。屏幕上的带宽数值如 1.98Kb、 20.1Mb代表的是最近一个采样周期内的瞬时速率而不是累计总量。2.4 与类似工具的对比nload: 更专注于单个网卡的整体进出流量曲线像车速表能看到总速度但不知道具体是哪些车连接贡献的。iptraf-ng/nethogs:iptraf-ng功能更全面类似一个综合仪表盘nethogs则按进程来分组流量告诉你哪个程序在跑流量。iftop: 核心优势在于按主机对连接来展示流量并且是实时、双向的。它能一目了然地告诉你192.168.1.100正在以5MB/s的速度向10.0.0.5发送数据同时从后者接收1MB/s的数据。这个视角对于排查具体通信问题无可替代。理解了这些再看iftop的输出就不会觉得是一堆乱码了。它是一张动态的、以主机对为维度的网络流量地图。3. 手把手安装与基础使用第一次运行iftop大多数主流Linux发行版的仓库里都包含了iftop安装非常简单。3.1 安装iftop对于基于Debian/Ubuntu的系统sudo apt update sudo apt install iftop对于基于RHEL/CentOS/Fedora的系统需要EPEL仓库# CentOS/RHEL 7/8 sudo yum install epel-release sudo yum install iftop # CentOS/RHEL 9 / Fedora sudo dnf install epel-release sudo dnf install iftop对于macOS可以使用Homebrewbrew install iftop需要注意的是在macOS上运行可能需要额外的权限有时使用sudo是必须的。3.2 最基础的启动安装完成后最简单的启动方式就是直接运行sudo iftop如果服务器有多个网卡例如eth0,eth1,ens192iftop默认会监控第一个非回环lo的网卡。你会立刻看到一个不断刷新的文本界面。3.3 解读默认界面第一次看到iftop的界面可能会有点懵我们来拆解一下。一个典型的界面分为三大部分1. 顶部刻度条与统计区 2. 中部连接流量列表核心区域 3. 底部统计汇总与命令提示区顶部区域 第一行通常显示网卡名称、IP地址以及两个刻度条。刻度条左边的数字如0.5Kb、1.0Kb是带宽标尺用于衡量中间区域每条“杠”的长度。右边显示的是最近2秒、10秒和40秒内的平均流量速率。interface: eth0 IP address: 10.0.0.1 MAC address: 00:16:3e:xx:xx:xx ───────────────────────────────────────────────────────────────────────────── 1.0Kb 2.0Kb 4.0Kb └─────────────────────────┴──────────────────────────┴────────────────────────── TX: cum: 1.36MB peak: 5.6Kb rates: 1.6Kb 1.4Kb 1.2Kb RX: 5.21MB 16Kb 4.0Kb 3.8Kb 3.6Kb TOTAL: 6.57MB 22Kb 5.6Kb 5.2Kb 4.8Kb这里TX代表发送TransmitRX代表接收ReceiveTOTAL是总和。cum是本次运行iftop以来的累计流量peak是峰值速率rates后面的三个数字分别对应最近2s、10s、40s的平均速率。中部区域核心 这是最重要的部分每一行代表一个活跃的网络连接会话。默认按最近2秒的带宽使用率降序排列。192.168.1.101 203.0.113.5 1.94Kb 1.94Kb 1.94Kb 3.88Kb 3.88Kb 3.88Kb和箭头清晰地指示了流量的方向。第一行表示从192.168.1.101发送到203.0.113.5的流量。第二行表示从203.0.113.5发送到192.168.1.101的流量。每行有三个带宽数值分别对应最近2秒、10秒、40秒的平均速率。在IP地址和箭头之间以及箭头和带宽数值之间有一条由#符号组成的“条形图”。它的长度直观地反映了该方向流量相对于顶部刻度条的比例。流量越大“杠”越长。底部区域 这里显示所有连接的总发送、总接收流量以及一些常用的命令提示如按h显示帮助按n切换显示主机名等。───────────────────────────────────────────────────────────────────────────── TX: cum: 9.89MB peak: 98.7Kb rates: 98.7Kb 65.8Kb 43.9Kb RX: 58.9MB 394Kb 197Kb 197Kb 197Kb TOTAL: 68.8MB 493Kb 296Kb 263Kb 241Kb按h键可以随时调出完整的帮助菜单里面列出了所有交互命令。4. 高级用法与实战场景让iftop成为你的诊断利器只会看默认界面还不够iftop的强大在于其丰富的过滤和排序功能。下面结合几个典型实战场景介绍如何高效使用它。4.1 场景一监控特定网卡与端口假设你的服务器有eth0内网和eth1公网两张网卡你想监控公网卡上的流量sudo iftop -i eth1-i参数是指定网卡的核心参数。如果你怀疑是某个特定服务比如MySQL端口3306的流量异常你可以使用端口过滤。iftop使用tcpdump风格的过滤表达式通过-f参数指定sudo iftop -f “port 3306”这条命令只会显示涉及源端口或目的端口为3306的流量。过滤表达式非常灵活你可以组合使用sudo iftop -f “host 192.168.1.100”只显示与192.168.1.100相关的所有流量。sudo iftop -f “dst net 10.0.0.0/24”只显示目标网络是10.0.0.0/24的流量。sudo iftop -f “tcp port 443”只显示HTTPS流量。注意过滤表达式要用引号括起来防止shell解析。复杂的过滤可能会增加iftop的CPU开销因为每个包都需要进行规则匹配。4.2 场景二揪出“流量小偷”——定位异常连接服务器带宽被打满但业务量并没增加。你需要快速找到罪魁祸首。全流量扫描首先不加过滤运行sudo iftop观察中部列表。通常占用带宽最高的连接会排在最前面。注意观察那些你不认识的外网IP或者流量比例异常高的内部IP。切换显示按n键可以切换显示主机名或IP地址。有时一个IP对应多个域名显示主机名可能更有助于识别。端口视角按p键可以切换显示端口号。这对于识别是哪个服务在产生流量至关重要。你可能会发现是一个非常用端口如45678在疯狂传输数据这很可能是一个异常进程或后门。排序技巧默认是按2秒速率第一列排序。你可以按1/2/3键分别按第1列2秒速率、第2列10秒速率、第3列40秒速率排序。如果某个连接长期占用带宽按第3列排序它会稳定在前列。和键按源IP或目的IP排序有助于你将来自或去往同一主机的流量归集查看。t键在单行合并收发和双行分开显示收发模式间切换。双行模式更清晰单行模式更节省空间能看到更多连接。4.3 场景三基线比较与简单压测在应用上线或变更前你可以用iftop做一个简单的流量基线。记录安静状态在业务低峰期运行iftop几分钟观察正常的后台流量如监控上报、日志同步、数据库主从复制水平。记住那些常驻连接的IP和大概带宽。执行操作进行你的变更操作例如上线新功能、发起一个压测请求。观察变化紧盯iftop界面。你会立刻看到新的连接出现或者现有连接的带宽柱状图突然增长。这能直观地告诉你你的操作触发了与哪些服务的通信以及流量有多大。使用-N参数如果你发现流量很大但目的端口是数字可以尝试加上-N参数启动iftop它会尝试将端口号解析为服务名称如3306-mysql这比单纯看数字更直观。4.4 场景四长期监控与数据输出iftop虽然是实时工具但也可以用于非交互式的短期监控。-t参数可以让它以纯文本、非交互模式运行结合-s参数指定秒数和输出重定向可以捕获一段时间的流量快照。sudo iftop -t -s 60 -i eth0 iftop_snapshot.log 21这条命令会监控eth060秒然后将输出包括错误信息写入文件。之后你可以用cat,grep,awk等工具来分析这个日志文件。虽然不如专业的监控系统如PrometheusGrafana强大但在紧急情况下这是一个快速获取一段时间内流量TOP N连接的土办法。实操心得iftop的非交互模式输出格式不太友好用于自动化分析比较麻烦。它真正的优势在于实时性和交互性。对于长期监控建议还是集成node_exporter输出网卡总流量或nethogs按进程的数据到Prometheus这类系统中。5. 常见问题、局限与替代方案没有工具是万能的iftop也不例外。了解它的局限能让你在正确的场景使用它并在它力所不及时找到更好的工具。5.1 常见问题与排错问题运行sudo iftop后一片空白没有流量显示。检查网卡确认-i参数指定了正确的、活跃的网卡。使用ip addr或ifconfig查看。检查权限确保使用了sudo。在某些严格的环境下可能需要检查cap_net_raw权限。检查过滤是否不小心设置了-f过滤条件过滤掉了所有流量重新运行不加过滤的命令试试。确认有流量服务器可能真的处于空闲状态。可以尝试从另一台机器ping或curl一下该服务器看iftop是否有显示。问题显示的带宽单位混乱或者数值看起来不对。单位切换按b键可以在bits/s比特每秒和Bytes/s字节每秒之间切换。1 Byte 8 bits所以数值上会差8倍。通常我们更关心Bytes/s因为它和文件大小、下载速度的单位一致。刻度条调整如果流量很大所有连接的“条形图”都顶满了屏幕可以按B键来循环调整刻度条的最大值scale让图形显示更合理。数值是瞬时值记住iftop显示的是采样周期内的平均速率不是总量也不是精确的秒级瞬时值。网络流量本身就有突发性短时间2秒内的峰值可能很高但持续平均速率可能很低。多观察几个周期。问题如何监控多个网卡的聚合流量iftop本身不支持。一个变通的方法是使用nload它可以同时显示多个网卡的流量仪表。如果需要分析聚合流量中的具体连接可能需要借助更专业的流量镜像和分光设备将多个网卡的流量汇聚到一个监控口再用iftop监控该镜像口。5.2 iftop的局限性无历史数据iftop是“实时监视器”关掉就没了。它不存储历史流量数据无法进行趋势分析或回溯查询。进程关联弱iftop看到的是IP和端口的流量但端口背后是哪个进程你需要结合lsof -i:端口号或netstat -tunlp | grep 端口号来进一步定位。这是nethogs工具的优势所在。资源消耗在流量极高的网卡上如10Gbpsiftop的实时抓包和分析可能会消耗可观的CPU资源。在生产环境高流量网卡上长期运行需谨慎。无法深入分析包内容它只统计流量大小和方向不分析包内的具体内容Payload。对于需要分析HTTP请求、SQL查询等场景需要tcpdump或Wireshark。5.3 互补工具链推荐一个成熟的系统监控体系应该是多层次、多工具的集合宏观整体监控What使用Prometheusnode_exporterGrafana。node_exporter提供每个网卡的总进出流量计数器node_network_receive_bytes_total,node_network_transmit_bytes_totalPrometheus负责抓取和存储Grafana用于绘制长期趋势图。这是回答“总带宽用了多少”、“流量增长趋势如何”的标准方案。中观连接监控Who这就是iftop的战场。回答“是谁在和谁通信占用了多少带宽”。微观进程监控Which Process使用nethogs。当你从iftop发现某个IP:Port流量异常时用sudo nethogs可以立刻定位到是哪个进程如nginx,java产生的。两者结合排查路径非常清晰Prometheus告警流量高 -iftop定位到可疑连接10.0.0.5:5432-netstat/lsof或nethogs定位到进程postgres。深度包分析Why使用tcpdump。当你定位到异常连接和进程后如果想进一步知道这个连接到底在传输什么数据是不是异常的SQL查询是不是在拖库就需要用tcpdump抓取该连接的原始包进行分析。所以不要把iftop当成唯一的网络诊断工具而应该把它视为你工具箱里一把非常锋利的“手术刀”在需要精确解剖网络会话时它能发挥无可替代的作用。它的价值在于快速、直观、交互性强能在几分钟内给你一个清晰的网络流量脉络图这是任何配置复杂的图形化监控系统在问题突发时难以比拟的速度优势。
返回列表