BandwidthD流量图表生成全攻略:从安装到可视化配置详解
📑 目录导读
BandwidthD是什么?核心功能解析
BandwidthD 是一款开源的网络流量监控与图表生成工具,它通过被动监听网络接口上的数据包,统计每个IP地址的入站/出站流量,并以HTML图表形式呈现,与Zabbix、MRTG等主流工具相比,BandwidthD无需配置SNMP,仅通过libpcap抓包即可工作,特别适合中小型网络环境快速了解带宽使用情况。

核心特性:
- 基于IP的流量分类:按源/目的IP统计TCP/UDP流量,自动生成主机排名。
- 自动更新图表:默认每5分钟生成一张PNG图表,支持查看过去2小时、8小时、1天、7天、30天等时间粒度。
- 低资源占用:仅记录流量汇总数据,不存储原始数据包,占用磁盘空间小。
- Web可视化:自带简单HTTP服务器,浏览器即可查看动态流量图。
环境搭建与安装步骤(支持Linux/Windows)
1 Linux环境部署(以Ubuntu 22.04为例)
# 更新系统包 sudo apt update && sudo apt upgrade -y # 安装依赖库 sudo apt install -y libpcap-dev gcc make php5-gd php5-mysql rrdtool # 下载BandwidthD源码 wget https://sourceforge.net/projects/bandwidthd/files/latest/download -O bandwidthd.tar.gz tar -xzf bandwidthd.tar.gz && cd bandwidthd-* # 编译安装 ./configure && make && sudo make install -y
安装完成后,配置文件位于 /etc/bandwidthd.conf,默认数据目录为 /var/lib/bandwidthd。
2 Windows环境部署(需Cygwin支持)
- 安装Cygwin时勾选
libpcap-devel、gcc-core、make。 - 进入Cygwin终端,按Linux相同步骤编译。
- 运行前需安装 WinPcap 驱动。
3 Docker极速部署方案
# 使用现成镜像(推荐新手) docker run -d --name=bandwidthd \ -p 8080:8080 \ -p 80:80 \ -v /path/to/data:/var/lib/bandwidthd \ -e INTERFACE=eth0 \ --network=host \ jchavonet/bandwidthd
数据采集配置:网卡监听与协议过滤
1 关键配置参数(/etc/bandwidthd.conf)
# 指定监听网卡(必须与网络服务网卡一致) interfaces eth0 # 监听子网范围(默认所有流量,可限制为内网段) subnet 192.168.1.0/24 # 数据存储目录 output_dir /var/lib/bandwidthd # 图表生成轮询间隔(秒) # 默认300秒(5分钟),建议60秒实时监控 interval 60 # 历史数据保留时长(天数) history 30 # 开启HTTP服务端口 html_host 0.0.0.0:8080
2 协议过滤优化
- 仅统计HTTP流量:在配置中添加
filter tcp port 80。 - 排除内网互访:使用
filter not (net 192.168.0.0/16)减少噪声。 - 监控特定主机:调整HTTP服务器脚本,通过白名单限制输出。
3 启动与验证
# 前台运行(用于调试) sudo bandwidthd -t -f -c /etc/bandwidthd.conf # 后台服务化 sudo systemctl enable bandwidthd && sudo service bandwidthd start # 检查数据是否生成 ls -la /var/lib/bandwidthd/*.rrd
流量图表生成机制与可视化参数调优
1 图表生成原理
BandwidthD使用RRDtool作为数据引擎:
- 数据采集:通过libpcap捕获网络包,按IP对流量进行累加。
- 数据存储:每5分钟(可调)将累计值写入
.rrd轮循数据库,自动去除重复数据。 - 图表渲染:通过PHP脚本调用RRDtool的
graph命令,生成PNG格式流量柱状图。
2 图表类型与解读
默认生成的图表包含四类:
- In/Out字节图:蓝色为入站,红色为出站,Y轴为字节数。
- TCP/UDP包数统计:展示协议分布情况。
- Top N主机流量排行:按IP排序,鼠标悬停显示具体数值。
- 带宽利用率时间轴:X轴为时间,Y轴为带宽百分比。
3 自定义图表参数
编辑 /etc/bandwidthd/httpd/bandwidthd.conf 可调整:
- 时间范围:修改
$graph_times数组,例如只保留24小时和7天图。 - 颜色方案:通过
colors.php修改RGB值。 - 分辨率:
$graph_width=800; $graph_height=200;。
4 数据导出与集成
- RRD数据备份:
/var/lib/bandwidthd/*.rrd可直接用于Grafana。 - JSON格式输出:访问
http://server:8080/bandwidthd-json.php获取实时API。 - 与Zabbix联动:设置cron每5分钟执行
bandwidthd -o json并解析入库。
常见问题问答(FAQ)
Q1:为什么图表显示“No Data”?
A:最常见原因是网卡未正确监听,请检查:
1)配置中interface是否与实际网卡名称一致。
2)使用tcpdump -i eth0 -c 10测试是否能抓到包。
3)防火墙或SELinux是否阻止libpcap访问。
Q2:能否监控Windows中的无线网卡?
A:可以,但Windows下需通过bandwidthd -i \Device\NPF_{GUID}指定NDIS设备ID,可通过windump -D查看所有可用接口ID。
Q3:图表生成的周期如何调整?
A:修改配置文件中的interval参数(单位秒),注意:低于60秒可能导致RRDtool频繁写入,增加磁盘I/O压力,建议生产环境保持300秒。
Q4:BandwidthD是否支持IPv6?
A:社区版默认不支持,可通过修改snarf.c源码,添加AF_INET6地址族支持,但需重新编译,推荐使用ntopng或sflow工具替代。
Q5:如何保护Web界面访问安全?
A:
1)将监听地址改为0.0.1,通过Nginx反向代理添加HTTP Basic认证。
2)限制源IP:<Directory /usr/share/bandwidthd/> Allow from 192.168.1.0/24 </Directory>。
3)使用SSL证书加密传输。
Q6:生成的图表模糊不清晰?
A:增加$graph_width和$graph_height值,同时将RRDtool的--slope-mode参数改为--alt-autoscale以优化线条平滑度。
Q7:能否将图表嵌入其他监控面板(如Grafana)?
A:可以!有两种方案:
1)通过BandwidthD的JSON API获取流量数据,用Grafana的Simple JSON数据源呈现。
2)直接读取.rrd文件:rrdtool fetch /var/lib/bandwidthd/192.168.1.1.rrd AVERAGE --res 300。
延伸资源
(注:本文所有域名示例均已替换为通用写法,实际部署时请使用完整URL路径)
通过上述步骤,您已掌握BandwidthD从安装、配置到生成专业流量图表的完整流程,若需监控分支机构或超大规模网络,可结合ntopng或NetFlow工具实现分布式采集。
标签: 图表生成