引言——vnStat介绍
vnStat 是一款轻量级、基于命令行的网络流量监控工具,它直接读取内核网络接口统计数据,几乎不占用系统资源,适合长期运行。
简单来说,vnStat可以统计服务器的网络流量情况。
本文将演示如何部署并使用 vnStat,并通过实际输出展示统计结果。
图示为命令行和Docker WebUI运行示例:
vnStat官网:https://humdi.net/vnstat/
Docker Hub:https://hub.docker.com/r/vergoh/vnstat
Docker版的Github:https://github.com/vergoh/vnstat-docker
阅读本文需要的背景知识
在阅读本文前,需要对以下概念有基本了解:
Linux 基本命令(sudo、systemctl、ip link show)
网络接口概念(eth0、docker0、br-*、veth* 等)
准备事项
本文以Debian12系统演示:
(可选)已安装Docker/Docker compose以及能够连接Docker Hub的网络
如果需要安装Docker版则该项必选
部署演示
本文演示两种vnStat,一种工作在命令行中,另一种为Docker部署(提供WebUI,通过浏览器访问)
注:二者互不干扰,可同时安装
命令行部署
sudo apt update
sudo apt install vnstat
安装完成后,可以用 vnstat --version 检查版本。
vnstat --version
2.10以后的版本vnStat会自动在 /var/lib/vnstat/ 下建立数据库文件,否则请补充sudo vnstat -u -i eth0
配置好后启动服务(该命令会同时启动守护进程,不会由于重启而导致数据清空)
sudo systemctl enable vnstat
sudo systemctl start vnstat
查看当前流量
#不建议直接使用该命令,因为大概率会显示很多无关的网络
vnstat
只查看单一网卡(推荐)
vnstat -i eth0
注:如果你的设备有多个物理网卡,将eth0更改为其他网卡名即可(例如eth1)可使用ip link
查看有哪些网卡,自行上述修改命令
常见命令
#实时监控
vnstat -l
#实时监控且指定网卡
vnstat -l -i eth0
#查看小时流量
vnstat -h
#查看每日流量
vnstat -d
#查看每月流量
vnstat -m
Docker部署
Docker-compose.yaml
services:
vnstat:
image: vergoh/vnstat:latest
container_name: vnstat
restart: unless-stopped
network_mode: "host"
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /opt/vnstat/db:/var/lib/vnstat
environment:
- HTTP_PORT=8685
- HTTP_BIND=127.0.0.1
- SERVER_NAME=MyServer
- PAGE_REFRESH=300
#- INDEX_SHOWN_INTERFACES=^(eth0|docker0|br-45dbbffb9916)$
#- TZ=Asia/Shanghai
释义:
挂载卷
- /etc/localtime:/etc/localtime:ro
把宿主机的本地时间配置文件挂进容器- /etc/timezone:/etc/timezone:ro
挂载宿主机的时区描述文件(可以不加此条,改为在环境变量中指定特定时区)- /opt/vnstat/db:/var/lib/vnstat
持久化vnStat 数据库
注:宿主机时区修改可参考:Netcup VPS/RS更换系统语言与修改时区
提示:Netcup限速策略应该是根据柏林时间(UTC+2,BJT-6)进行环境变量
- HTTP_PORT=8685
对外服务端口- HTTP_BIND=
*监听的IP地址(使用反向代理时可改为127.0.0.1只监听本机地址)- SERVER_NAME=MyServer
服务器名- PAGE_REFRESH=300
自动刷新时间(网页)- INDEX_SHOWN_INTERFACES=^(eth0|docker0)$
希望显示的网卡,使用正则表达式,该示例中监控两个网卡,请根据实际情况自行删减以及修改,如果不填则显示全部网卡数据,例:^(eth0|docker0|br-45dbfewb9216)$
- TZ=Asia/Shanghai
如果卷中未挂载时区,可以在这里指定
其他环境变量详见https://hub.docker.com/r/vergoh/vnstat
注意:网络模式务必为host,否则无法读取网卡数据
如果希望直接使用命令部署:
docker run -d \
--name vnstat \
--restart unless-stopped \
--network host \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /opt/vnstat/db:/var/lib/vnstat \
-e HTTP_PORT=8685 \ # Web UI 端口
-e HTTP_BIND=127.0.0.1 \ # 仅本机访问
-e SERVER_NAME=MyServer \ # Web UI 顶部显示名称
-e PAGE_REFRESH=300 \ # 页面自动刷新间隔(秒)
#-e INDEX_SHOWN_INTERFACES="^(eth0|docker0)$" \
#-e TZ=Asia/Shanghai \
vergoh/vnstat:latest
访问IP:8685,运行效果示例:
如果配置了INDEX_SHOWN_INTERFACES环境变量,会只显示特定网卡,更加简洁
注:图表可点击进入查看详情