宝塔面板需手动修改network.py脚本以动态识别全部虚拟网卡,并结合tc限速、vnstat聚合及终端命令实现多网卡流量监控与分配管理。

如果您在宝塔面板中部署了多网卡服务器,但无法直观查看或调控各虚拟网卡的实时流量分配,则可能是由于宝塔默认仅监控主网卡(如 eth0 或 ens33)且未启用多网卡流量采集功能。以下是实现多虚拟网卡流量可视化与分配管理的具体操作步骤:
一、启用宝塔多网卡流量监控支持
宝塔面板默认使用 /proc/net/dev 读取网卡统计信息,但仅解析首个匹配的物理/虚拟网卡设备。需手动修改监控脚本以识别全部虚拟网卡(如 eth0:1、ens33:2、vethabc123 等),并确保其名称被纳入采集白名单。
1、通过SSH登录服务器,执行命令进入宝塔监控脚本目录:cd /www/server/panel/class。
2、备份原始网络监控文件:cp network.py network.py.bak。
3、使用vi编辑 network.py:vi network.py,定位到包含 net_info = get_net_info() 的代码段附近。
4、在 get_net_info() 函数内部,将硬编码的网卡名列表(如 ['eth0', 'ens33'])替换为动态扫描结果:import os; interfaces = [f for f in os.listdir('/sys/class/net') if os.path.islink(f'/sys/class/net/{f}') and not f.startswith('lo')]。
二、配置自定义流量分组策略
宝塔不内置虚拟网卡流量分配策略引擎,但可通过系统级 tc(traffic control)工具结合宝塔计划任务实现按接口限速与优先级标记,再将 tc 统计输出映射至宝塔自定义监控面板。
1、确认内核已启用 QoS 支持:modprobe sch_htb && echo $? 返回 0 表示正常。
2、为虚拟网卡 veth1 创建根队列规则:tc qdisc add dev veth1 root handle 1: htb default 30。
3、添加两个类别分别对应高优业务与后台任务:tc class add dev veth1 parent 1: classid 1:1 htb rate 50mbit ceil 50mbit;tc class add dev veth1 parent 1: classid 1:2 htb rate 5mbit ceil 10mbit。
4、使用 iptables 对指定端口流量打标:iptables -t mangle -A OUTPUT -o veth1 -p tcp --dport 8080 -j CLASSIFY --set-class 1:1。
三、部署第三方流量聚合插件
宝塔官方应用市场未提供多网卡聚合视图插件,但可手动集成开源工具 vnstat,通过其数据库持久化记录各虚拟网卡历史吞吐,并利用宝塔自定义面板调用 JSON API 展示。
1、安装 vnstat 并初始化所有虚拟网卡数据库:yum install vnstat -y && for i in $(ls /sys/class/net | grep -E '^(eth|ens|veth|docker)' | grep -v 'lo'); do vnstat -u -i $i; done。
2、启动 vnstatd 后台服务并设为开机自启:systemctl enable vnstat && systemctl start vnstat。
3、创建宝塔自定义监控页面所需的数据接口脚本 /www/server/panel/vnstat-api.py,内容为读取 vnstat -j -i veth1 输出并转为标准 JSON。
4、在宝塔「软件管理」→「宝塔插件」→「自定义面板」中新增入口,URL 指向该脚本地址,类型选「JSON 数据」。
四、通过宝塔终端实时抓取多网卡流量快照
宝塔内置终端可执行轻量级流量采样命令,无需安装额外组件即可获得各虚拟网卡当前秒级收发速率,适用于临时诊断与对比分析。
1、进入宝塔面板「终端」模块,执行以下命令刷新显示:watch -n 1 'cat /proc/net/dev | grep -E "(veth|docker|br-|ens|eth)" | awk "{print $1, \" \", $2, \" \", $10}"'。
2、观察输出中每行首列为网卡名(含冒号后缀的虚拟接口),第二列为接收字节数,第四列为发送字节数;连续两次输出差值除以时间间隔即为瞬时速率。
3、若需导出为 CSV 格式供外部分析,追加重定向语句:... >> /www/wwwroot/traffic_log.csv。










