vnStat – 在 Linux 和 BSD 中监控网络带宽

在本教程中,我们将了解什么是 vnStat、怎样安装它以及怎样在 Linux 和 BSD 操作系统中使用 vnStat 监控网络带宽。

内容

  1. Vnstat 介绍
  2. 在 Linux 上安装 vnStat
  3. 在 FreeBSD 上安装 vnStat
  4. 在 Linux 上配置默认网络接口
  5. 在 FreeBSD 上配置默认网络接口
  6. 在 Linux 和 Unix 中使用 vnStat 监控网络带宽
    1. 查看所有接口的带宽使用情况
    2. 查看特定接口的带宽使用情况
    3. 查看每小时的带宽使用情况
    4. 查看每日带宽使用情况
    5. 查看每周带宽使用情况
    6. 查看每月带宽使用情况
    7. 显示过去前十天的带宽使用情况
    8. 查看特定时间的带宽使用情况
    9. 查看实时带宽使用情况
  7. 结论

Vnstat 介绍

统计数据 是一个免费的、开源的、轻量级的、基于控制台的网络流量监控器。 使用 VnStat,我们可以轻松找到消耗了多少网络带宽,并显示每小时、每天、每月或特定时间段的结果。

Vnstat 收集单个或多个网络接口的使用详细信息,并在命令行中显示摘要。 它还有助于计算每月或每天或特定时间段内 Internet 带宽使用的大致数量。

在 Linux 上安装 vnStat

VnStat 在许多 Linux 和 Unix 操作系统的默认存储库中可用。 您可以使用发行版的包管理器安装它。

在基于 Arch 的系统上:

确保您已启用 [Community] 存储库并使用安装它 吃豆子 像下面这样:

$ sudo pacman -S vnstat

在 Debian、Uubntu、Linux Mint、Pop OS 上:

$ sudo apt install vnstat

在 Ubuntu 上,您可能需要启用 [Universe] 用于安装 vnstat 的存储库。

在 Redhat、CentOS、AlmaLinux、Rocky Linux 上:

首先添加并启用 EPEL 存储库:

$ sudo dnf install epel-release

然后如上图安装 vnStat。

$ sudo dnf install vnstat

在 Fedora:

$ sudo dnf install vnstat

在 openSUSE 上:

$ sudo zypper install vnstat

安装 vnStat 后,使用命令启动其服务:

$ sudo systemctl enable --now vnstat

您不需要在基于 DEB 的系统上启动 vnstat,因为它会在安装期间自动启动。

在 FreeBSD 上安装 vnStat

在像 freeBSD 这样的 BSD 系统上,更新端口树并将 vnStat 安装为 root 用户使用命令:

# pkg update
# pkg install vnstat

安装后,启用并启动 vnStat 服务,如下所示。

# echo 'vnstat_enable="YES"' >> /etc/rc.conf
# service vnstat start

示例输出:

Starting vnstat.
No interfaces found in database, adding available interfaces...
Interface "em0" added with 1000 Mbit bandwidth limit.
-> 1 new interface found.
Limits can be modified using the configuration file. See "man vnstat.conf".
Unwanted interfaces can be removed from monitoring with "vnstat --remove".".

在 Linux 上配置默认网络接口

vnStat 使用 eth0 作为其配置文件中的默认网络接口(/etc/vnstat.conf)。

但是,在某些 Linux 系统(例如 Ubuntu)中,网络接口名称可能会有所不同,例如 enp0s3, enp0s8. 您可以使用验证网络接口的名称 "ip addr" 命令。

让我们来看看 vnstat 配置文件的内容。

$ head /etc/vnstat.conf

示例输出:

# vnStat 1.18 config file
##

# default interface
Interface "eth0"

# location of the database directory
DatabaseDir "/var/lib/vnstat"

# locale (LC_ALL) ("-" = use system locale)

可以看到,默认的界面是 etho 在这个文件中。

让我们检查由 vnstat 识别的可用网络接口。

$ ls /var/lib/vnstat
enp0s3 enp0s8

如您所见,可用的网络接口与 vnstat.conf 文件中定义的网络接口不同。

如果您没有设置正确的默认接口,您可能会在每小时或每月查看网络带宽流量时出现以下错误。

Error: Unable to read database "/var/lib/vnstat/eth0": No such file or directory

发生这种情况是因为,默认接口在 /etc/vnstat.conf 文件。

要配置默认网络接口,请编辑 /etc/vnstat.conf 文件并更新正确的接口名称。 可以直接编辑 /etc/vnstat.conf 文件并全局更新接口名称。 但是,建议在用户的 HOME 目录中创建自己的 vnstat 配置文件。

$ cp /etc/vnstat.conf ~/.vnstatrc
$ nano ~/.vnstatrc

我要使用 enp0s3 作为我的默认界面。

为 VnStat 配置默认网络接口

用你自己的替换 enp0s3。 Save 和 close 文件。

在 FreeBSD 上配置默认网络接口

编辑 vnstat 配置文件:

# vi /usr/local/etc/vnstat.conf

如果配置文件不可用,请使用示例配置文件创建一个新的:

# cp /usr/local/etc/vnstat.conf.sample /usr/local/etc/vnstat.conf

然后,更新正确的默认网络接口:

Interface "em0"

Save 和 close 文件。

在 Linux 和 Unix 中使用 vnStat 监控网络带宽

如果您不熟悉 vnStat,请打开 vnStat 的帮助部分并通过运行以下命令查看可用选项列表:

$ vnstat --help

示例输出:

 vnStat 1.18 by Teemu Toivola <tst at iki dot fi>

         -q,  --query          query database
         -h,  --hours          show hours
         -d,  --days           show days
         -m,  --months         show months
         -w,  --weeks          show weeks
         -t,  --top10          show top 10 days
         -s,  --short          use short output
         -u,  --update         update database
         -i,  --iface          select interface (default: eth0)
         -?,  --help           short help
         -v,  --version        show version
         -tr, --traffic        calculate traffic
         -ru, --rateunit       swap configured rate unit
         -l,  --live           show transfer rate in real time

See also "--longhelp" for complete options list and "man vnstat".

查看所有接口的带宽使用情况

现在,让我们显示所有接口的网络流量。

为此,只需运行:

$ vnstat

示例输出:

                      rx      /      tx      /     total    /   estimated
 enp0s3:
       Sep '19       120 KiB  /      66 KiB  /     186 KiB  /       0 KiB
         today       120 KiB  /      66 KiB  /     186 KiB  /      --    

 enp0s8:
       Sep '19       128 KiB  /      88 KiB  /     216 KiB  /       0 KiB
         today       128 KiB  /      88 KiB  /     216 KiB  /      --
使用 vnstat 查看所有网络接口的带宽使用情况

这里,

  • rx – 收到的流量
  • tx – 转移的流量

等待几分钟,让 Vnstat 开始收集网络流量使用情况。 如果您在安装后立即启动 vnstat,您可能会得到如下结果。

enp0s3: Not enough data available yet.

或者,您将在基于 RPM 的发行版(例如 CentOS)中获得以下输出。

No database found, nothing to do. Use --help for help.

A new database can be created with the following command:
 vnstat --create -i eth0

Replace 'eth0' with the interface that should be monitored.

The following interfaces are currently available:
 enp0s3 (1000 Mbit) lo

现在什么都不显示。 这是因为,vnStat 还没有开始收集统计信息。

查看特定接口的带宽使用情况

要查看特定接口的网络带宽使用情况,例如 example enp0s3,只需提及如下所示的网卡名称。

$ vnstat -i enp0s3

示例输出:

Database updated: Mon Sep  9 08:26:47 2019

   enp0s3 since 09/09/2019

          rx:  136 KiB      tx:  74 KiB      total:  210 KiB

   monthly
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
       Sep '19       136 KiB |      74 KiB |     210 KiB |    0.00 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        --     |      --     |      --     |

   daily
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
         today       136 KiB |      74 KiB |     210 KiB |    0.06 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        --     |      --     |      --     |
使用 vnstat 查看特定网络接口的网络带宽使用情况使用 vnstat 查看特定网络接口的网络带宽使用情况

这里, enp0s3 是我的网卡名称。 您可以使用找到您的网卡名称 "ip addr" 命令。

FreeBSD,网卡名称为 em0. 要查看其带宽,只需运行:

# vnstat -i em0

示例输出:

Database updated: 2019-09-09 16:40:00

   em0 since 2019-09-09

          rx:  606.84 KiB      tx:  56.12 KiB      total:  662.96 KiB

   monthly
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
       2019-09    606.84 KiB |   56.12 KiB |  662.96 KiB |        7 bit/s
     ------------------------+-------------+-------------+---------------
     estimated       --      |     --      |     --      |

   daily
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
         today    606.84 KiB |   56.12 KiB |  662.96 KiB |       90 bit/s
     ------------------------+-------------+-------------+---------------
     estimated       873 KiB |      80 KiB |     953 KiB
使用 vnstat 查看 FreeBSD 上的网络带宽使用情况使用 vnstat 查看 FreeBSD 上的网络带宽使用情况

查看每小时的带宽使用情况

让我们显示每小时的网络流量结果。 为此,请运行:

$ vnstat -h

示例输出:

 enp0s3                                                                   09:46 
  ^                                                                    r        
  |                                                                 r  r        
  |                                                                 r  r        
  |                                                                 r  r        
  |                                                                 r  r  r     
  |                                                                 rt rt r     
  |                                                                 rt rt r     
  |                                                                 rt rt rt    
  |                                                                 rt rt rt    
  |                                                              r  rt rt rt    
 -+---------------------------------------------------------------------------> 
  |  10 11 12 13 14 15 16 17 18 19 20 21 22 23 00 01 02 03 04 05 06 07 08 09    
                                                                                
 h  rx (KiB)   tx (KiB)  ][  h  rx (KiB)   tx (KiB)  ][  h  rx (KiB)   tx (KiB) 
10          0          0 ][ 18          0          0 ][ 02          0          0
11          0          0 ][ 19          0          0 ][ 03          0          0
12          0          0 ][ 20          0          0 ][ 04          0          0
13          0          0 ][ 21          0          0 ][ 05          0          0
14          0          0 ][ 22          0          0 ][ 06         12          7
15          0          0 ][ 23          0          0 ][ 07         86         48
16          0          0 ][ 00          0          0 ][ 08         88         45
17          0          0 ][ 01          0          0 ][ 09         59         32
使用 vnstat 查看每小时网络带宽使用情况使用 vnstat 查看每小时网络带宽使用情况

如果您有多个接口,请使用 -一世 参数以查看特定卡的每小时网络流量,如下所示。

$ vnstat -h -i enp0s8

建议阅读:

  • 怎样使用 Wondershaper 在 Linux 中限制网络带宽

查看每日带宽使用情况

'-d' 标志以显示每天默认网络接口的网络流量。

$ vnstat -d

示例输出:

enp0s3  /  daily

         day         rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
     09/09/2019      258 KiB |     138 KiB |     396 KiB |    0.09 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        --     |      --     |      --     |

查看每周带宽使用情况

$ vnstat -w

示例输出:

enp0s3  /  weekly

                      rx      |     tx      |    total    |   avg. rate
   ---------------------------+-------------+-------------+---------------
    last 7 days       258 KiB |     138 KiB |     396 KiB |    0.00 kbit/s
   current week       258 KiB |     138 KiB |     396 KiB |    0.09 kbit/s
   ---------------------------+-------------+-------------+---------------
      estimated        --     |      --     |      --     |

查看每月带宽使用情况

要查看网络接口卡的每月使用情况,请使用 '-m' 转变。

$ vnstat -m

示例输出:

enp0s3  /  monthly

       month        rx      |     tx      |    total    |   avg. rate
    ------------------------+-------------+-------------+---------------
      Sep '19       258 KiB |     138 KiB |     396 KiB |    0.00 kbit/s
    ------------------------+-------------+-------------+---------------
    estimated        --     |      --     |      --     |

显示过去前十天的带宽使用情况

要显示过去十天的网络使用情况,请使用 '-t' 旗帜。

$ vnstat -t

示例输出:

enp0s3  /  top 10

    #      day          rx      |     tx      |    total    |   avg. rate
   -----------------------------+-------------+-------------+---------------
                              no data available
   -----------------------------+-------------+-------------+---------------

它没有显示前十天的任何数据,因为我今天安装了Vnstat。

建议阅读:

  • 在 Linux 上安装 NetData 性能监控工具

查看特定时间的带宽使用情况

我们还可以查看特定时间的带宽使用情况。

要显示过去十秒的带宽使用情况,请运行:

$ vnstat -i enp0s3 -tr 10

示例输出:

7 packets sampled in 10 seconds
Traffic average for enp0s3

      rx         0.28 kbit/s             0 packets/s
      tx         0.14 kbit/s             0 packets/s

查看实时带宽使用情况

要开始实时监控特定接口卡的使用情况,请运行:

$ vnstat -i enp0s3 -l

示例输出:

Monitoring enp0s3...    (press CTRL-C to stop)

   rx:        0 kbit/s     0 p/s          tx:        0 kbit/s     0 p/s
使用 vnstat 查看实时带宽使用情况使用 vnstat 查看实时带宽使用情况

要停止实时监控,请按 CTRL-C.

有关更多详细信息,请参阅手册页:

$ man vnstat

结论

VnStat 是一个方便且有用的工具,用于监控单个或多个网络接口的 Internet 使用情况或网络流量。 如果您想知道每天/每月消耗多少带宽,您可以使用此工具来查找,而无需您的 Internet 服务提供商的帮助或使用任何第三方工具。

资源: