魔法猫
魔法猫
Published on 2025-08-14 / 53 Visits
0
0

vnStat (流量统计/监控)部署及使用示例

#PT

引言——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环境变量,会只显示特定网卡,更加简洁

注:图表可点击进入查看详情


Comment