如何使用系统工具监控CentOS服务器的网络流量?

在 CentOS 服务器上监控网络流量,可以使用多种系统自带或轻量级的命令行工具。以下是常用、可靠且无需额外安装(或仅需简单安装)的方案,按推荐顺序和场景分类说明:


✅ 一、系统自带工具(无需安装,开箱即用)

1. ss(替代 netstat,更高效)

查看实时连接及流量统计(需配合 -i 显示接口信息):

# 查看所有 TCP/UDP 连接及其接收/发送队列(含字节数)
ss -tuln

# 查看每个 socket 的详细统计(需内核支持,部分版本支持 -i)
ss -ti  # 显示 TCP 连接的重传、RTT、接收/发送字节等(高级诊断)

⚠️ 注意:ss -i 不直接显示总流量,但可观察连接级实时吞吐特征。

2. /proc/net/dev(最底层、最准确的接口级流量)

直接读取内核网络设备统计:

# 实时刷新查看 eth0 流量(单位:bytes)
watch -n 1 'cat /proc/net/dev | grep eth0'

# 或格式化输出(接收/发送字节 + 包数)
awk '/eth0/{printf "RX: %.2f MB, TX: %.2f MBn", $2/1024/1024, $10/1024/1024}' /proc/net/dev

优点:零开销、绝对权威;
缺点:无历史趋势、需手动计算速率。

3. iftop(类 top 的实时流量监控 —— 需安装

虽非默认安装,但属于 EPEL 中标准工具,极轻量实用:

# 启用 EPEL(CentOS 7/8/9 均适用)
sudo yum install epel-release -y    # CentOS 7/8
# 或 CentOS 9+:sudo dnf install epel-release -y

# 安装 iftop
sudo yum install iftop -y            # CentOS 7/8
sudo dnf install iftop -y            # CentOS 9+

# 使用示例
sudo iftop                     # 按连接显示实时带宽(TOP N)
sudo iftop -P                  # 显示端口
sudo iftop -f "port 80"        # 过滤 HTTP 流量
sudo iftop -B                  # 以 Bytes/s 显示(而非 bps)

亮点:实时排序、支持过滤、直观显示源/目标 IP:Port。

4. nethogs(按进程监控流量 —— 强烈推荐用于排障

定位“谁在吃带宽”:

sudo yum install nethogs -y   # 安装
sudo nethogs eth0             # 监控指定网卡,按进程显示实时上下行
sudo nethogs -t               # 显示时间戳

💡 适合排查异常进程(如X_X、备份、未授权服务)。


✅ 二、轻量级长期监控与绘图(可选进阶)

vnstat(基于 /proc/net/dev 的轻量数据库,低开销)

  • 不抓包,只轮询 /proc/net/dev,资源占用极低;
  • 支持日/月/小时流量统计与图表。
# 安装
sudo yum install vnstat -y

# 初始化数据库(针对 eth0)
sudo vnstat -u -i eth0

# 启动服务并开机自启
sudo systemctl enable vnstat
sudo systemctl start vnstat

# 查看统计
vnstat                    # 今日/本月汇总
vnstat -d                 # 按天查看
vnstat -h                 # 按小时查看(最近24h)
vnstat --oneline          # 简洁一行输出(适合脚本调用)

✅ 优势:无性能影响、数据持久化、支持导出 CSV/JSON。


✅ 三、其他实用技巧

🔍 快速诊断高流量来源

# 统计当前 ESTABLISHED 连接最多的 IP(可能为攻击源或爬虫)
sudo ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10

# 查看各端口流量(需结合 netstat/ss + /proc)
# 或使用:sudo lsof -iTCP -sTCP:ESTABLISHED -n -P | awk '{print $9}' | cut -d: -f2 | sort | uniq -c | sort -nr

📊 可视化(可选)

  • bmon(终端带宽监视器,支持多网卡、颜色图表):
    sudo yum install bmon -y && sudo bmon
  • 配合 Grafana + Prometheus + node_exporter 实现企业级监控(适合生产环境长期运维)。

🚫 不推荐的做法

  • tcpdump 抓包分析(除非深度排错):性能开销大、产生大量日志、不适用于常规监控;
  • iftop / nethogs 长期后台运行(它们是交互式工具,应按需启动);
  • ❌ 修改内核参数或加载额外模块(除非特殊需求,违背“系统工具”原则)。

✅ 总结:按场景选择工具

场景 推荐工具 命令示例
✅ 快速查看网卡总流量(实时) watch -n 1 'cat /proc/net/dev' watch -n 1 'awk "/eth0/{print $2,$10}" /proc/net/dev'
✅ 实时连接级带宽排名 iftop sudo iftop -B -P
✅ 定位哪个进程在发包 nethogs sudo nethogs eth0
✅ 长期流量统计(日/月报表) vnstat vnstat -d
✅ 深度 TCP 连接分析(重传、延迟) ss -ti ss -s; ss -ti state established

需要我为你生成一个一键流量监控脚本(如每5秒打印 eth0 RX/TX 速率 + top 5 进程),或配置 vnstat 的邮件告警/微信通知?欢迎随时提出 👍