家用住宅主机Linux eBPF实时监控服务器流量

为什么选eBPF监控家用服务器流量

如果你有一台在家运行的Linux服务器,想实时看到是哪个进程占用了带宽、连了哪些IP,传统做法是用iptables记日志或tcpdump抓包,但这两者要么性能开销大,要么需要很多后处理。
eBPF(扩展伯克利包过滤器)可以在内核中安全高效地收集网络数据,而且对系统几乎无侵入。
本文用eBPF生态中最易上手的BCC工具集,让你在十分钟内就能看到一个实时刷新的流量面板。

第一步:检查环境并安装BCC

eBPF要求较新的Linux内核。
大多数Ubuntu 20.04+、Debian 11+、CentOS 8+都满足条件。
你可以先确认内核版本:

uname -r

输出如果大于4.8,通常就可以。
接着安装BCC工具(不同发行版命令不同,此处以Ubuntu为例):

sudo apt update
sudo apt install bpfcc-tools linux-headers-$(uname -r)

安装完成后,BCC工具会放在 /usr/sbin/ 下,名称后缀带有 -bpfcc,例如 tcptop-bpfcc
你可以先试运行一个命令看是否正常:

sudo tcptop-bpfcc -C

如果终端开始每秒刷新连接统计,说明环境就绪。

第二步:用tcptop查看实时流量

tcptop-bpfcc 可以按进程显示每个TCP连接的收发速率。
常用参数:

sudo tcptop-bpfcc -C # 每1秒刷新一次,显示所有连接
sudo tcptop-bpfcc -C 5 # 每5秒刷新一次
sudo tcptop-bpfcc -C -p 1234 # 只监控PID为1234的进程

输出示例:

13:45:01 loadavg: 0.12 0.08 0.05 1/345 6789

PID    COMM         LADDR            RADDR             RX_KB  TX_KB
1234   nginx        192.168.1.2:80   10.0.0.5:54321      12.3    8.7
4567   python3      127.0.0.1:9090   ::ffff:127.0.0.1:   0.2     0.1

如果你只关心总流量而不关心每个连接,可以用 tcplife-bpfcc 记录连接生命周期和收发字节:

sudo tcplife-bpfcc

这个命令会实时打印每一笔新建连接的信息,适合抓大文件传输或异常连接。

第三步:用bpftrace写一个简单的流量统计(可选)

如果你喜欢更轻量的方式,可以安装bpftrace,然后用一行脚本对本机所有网络出口进行计数。
注意这一步需要额外安装bpftrace:

sudo apt install bpftrace

然后执行:

sudo bpftrace -e 'kfunc:napi_gro_receive { @[prog]=count(); }'

这个命令会统计每个网卡驱动接收的数据包次数,虽然不是精确的字节数,但能帮你快速判断哪个网口流量大。
对于家用服务器通常只有一个网口,这个命令可以让你看到流量是否突发。

常见问题与避坑指南

  • 命令找不到? Ubuntu 21.10之后,BCC工具包名改为 bpfcc-tools,命令后缀从 -bpfcc 变为 -bpfcc,但执行时仍需用完整名称如 tcptop-bpfcc。如果提示“command not found”,先运行 dpkg -L bpfcc-tools | grep bin 查看工具的实际安装路径。
  • Permission denied? 所有eBPF工具都需要root权限,记得加 sudo。如果sudo后仍报错,检查 /proc/sys/kernel/unprivileged_bpf_disabled 是否为1,如果是1则只能root使用,属于正常。
  • 没有输出? 确认你有活跃的网络连接。可以开启一个 ping baidu.com 看是否能在tcptop中看到连接。
  • 性能影响? eBPF本身开销极低,但频繁刷新用户态数据会有一点CPU占用。在低配树莓派上建议把刷新间隔设为5秒以上。

验证监控结果

启动tcptop后,在另一台设备上用scpiperf3向服务器发送数据,观察tcptop中对应进程的RX_KB是否增长。
或者自己用浏览器访问服务器的web服务,tcptop应当显示nginx(或你用的web服务器)的连接和流量。
如果一切正常,你已经成功用eBPF实时监控了服务器流量。

后续你可以将tcptop命令放入cron或systemd服务中,把输出重定向到日志文件,实现历史流量记录。
如果你对eBPF编程感兴趣,推荐学习BCC官方示例或bpftrace one-liners,进一步定制自己的监控脚本。

分享到:
上一篇
外贸站宝塔面板网站图片WebP格式转换脚本
下一篇
跨境独立站宝塔面板Nginx负载均衡海外访客分发
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意