2021-12 通过 Docker 部署 vnStat 监控主机流量使用
原载于 2021 年的旧博客(已关闭)
简介
vnStat 是一款老牌的 Linux 系统流量监控工具。由于我之前做的一个项目需要监控服务器的流量使用,使我最后找到了它。
vnStat 的优点在于便捷部署加轻松使用。它不仅能够从全局监控流量,更能监控不同的 Docker 容器使用的流量。是一款非常轻量的神器。
安装
由于是 Docker 部署,这里跳过 Docker 相关安装步骤,如需要请移步我的Docker 安装帖子
docker run -d \
--restart=unless-stopped \
--network=host \
-e HTTP_PORT=8685 \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
--name vnstat \
vergoh/vnstat很简单,一段这样的命令运行之后,vnStat 就能够运行了

vnStat安装
使用方式
以图片形式输出数据
安装完成之后我们通过访问http://你的服务器ip:8685即可进入默认的 vnStat 界面

vnStat默认显示界面
其中
eth0代表着主网卡,可以将其理解为所有外网流量docker0代表 Docker 内使用的流量,包括了内外网使用流量vethXXXXX对应不同的 Docker 容器使用的网络,可以通过此来区分不同的 Docker 容器使用的流量
点击 eth0 我们就能够进入 eth0 这个网卡的详细流量数据

eth0网卡数据
之后我们还可以点击不同区域来进入不同的时间区间视图

eth0网卡的5分钟数据
以控制台控制输出
在主机中,我们可以通过如下命令直接将指令传输到 vnStat 的容器中已实现通过控制台访问数据
docker exec vnstat vnstat --longhelp这里可以通过修改--longhelp 来实现各种命令

longhelp界面
例-5 就是展示最近 5 分钟的流量情况
docker exec vnstat vnstat -5
通过控制台查看5分钟流量
以 Json 形式输出数据
在我们原先访问的图形地址http://你的服务器ip:8685后面加入/json.cgi之后我们就能够以 Json 的形式返回响应的流量参数。

json字符串返回
跟控制台一样,如果需要看更详细的数据,是需要我们进一步更改访问地址的。
使用方法
添加一个网卡
由于 vnStat 只会自动添加首次部署时候的所有网卡,因此新的 Docker 容器需要通过下面步骤将其添加进监控列表
检查是否有新增的可添加的网卡
docker exec vnstat vnstat --iflist![]()
查询网卡结果
将尚未添加的网卡增加到监控
docker exec vnstat vnstat -i 网卡名称 --add重启服务
docker exec vnstat killall -HUP vnstatd移除一个网卡
对于不再需要监控的网卡,我们可以通过如下指令来移除
docker exec vnstat vnstat -i 网卡名称 --remove --force给网卡添加备注
如网卡开始多起来之后,查询名称会变得不方便,因此我们可以通过如下指令将原本为字符串的网卡名称改为可识别的叫法
docker exec vnstat vnstat -i eth0 --setalias "Network_Main"![]()
更改备注名结果

更改备注名后效果
注意事项
数据备份
在 Docker 运行的时候添加-v 主机地址路径:/var/lib/vnstat能够确保 vnStat 的数据直接保存到主机中。这确保我们能够在重装容器的时候保证数据连贯性。
推荐阅读
- 敏捷项目管理之一页纸搞懂 Scrum 方法
- 书籍分享《重新定义团队:谷歌如何工作》(第 5 章)
- 解决宝塔的 Nginx 无法在服务器重启之后自动启用服务的问题
- 群辉 Synology NAS 实现 WOL(Wake On Lan)唤醒局域网内任意设备+siri 语音唤醒电脑
- 我是如何 43 天内拿下 PMP 证书的
---
欢迎关注我的公众号“凯文有事找你”,原创技术、生活、经验教训文章第一时间推送。
