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

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

vnstat介绍

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" 命令。

自由BSD,网卡名称为 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 服务提供商的帮助或使用任何第三方工具。

资源: