VNSTAT - Linux和BSD中的监控网络带宽

时间:2020-03-21 11:48:42  来源:igfitidea点击:

VNSTAT是一个免费的开源,轻量级和基于控制的网络流量监视器。
使用VNSTAT,我们可以轻松地查找在小时,每日,每月或者特定时间段内消耗的网络带宽和显示结果。
它会收集单个或者多个网络接口的使用详细信息,并在命令行中显示摘要。
它还有助于计算每月或者每天或者每天的近似数量的互联网带宽使用量或者针对特定的时间段。
在本教程中,我们将看到如何使用VNSTAT监视Linux和BSD中的网络带宽。

在Linux上安装vnstat

VNStat可在许多Linux和UNIX操作系统的默认存储库中提供。
我们可以使用分发包管理器安装它。

在基于Arch的系统上:

确保已启用[社区]存储库并使用以下使用Pacman安装它:

$sudo pacman -S vnstat

在Debian,Uubntu,Linux Mint:

$sudo apt-get install vnstat

在Ubuntu上,我们可能需要启用[Universe]存储库以安装VNStat。

在Redhat,Centos:

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

$sudo yum install epel-release

然后安装VNSTAT,如上所示。

$sudo yum install vnstat

关于Fedora:

$sudo dnf install vnstat

OpenSUSE:

$sudo zypper install vnstat

启动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在其配置文件(/etc/vnstat.conf)中使用eth0作为默认网络接口。

但是,在某些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文件并全局更新接口名称。
但是,建议在用户的主目录中创建自己的VNSTAT配置文件。

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

我将使用ENP0S3作为我的默认接口。

用自己替换ENP0S3.
保存并关闭文件。

在FreeBSD上:

编辑VNSTAT配置文件:

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

如果未使用配置文件,请使用示例配置文件创建新的文件:

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

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

Interface "em0"

保存并关闭文件。

如果我们是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 /    -

其中

  • 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尚未开始收集统计数据。

查看特定界面的带宽使用情况

要查看特定接口的网络带宽使用,例如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        --     |      --     |      --     |

其中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 -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

如果我们有多个接口,请使用-i参数查看特定卡的每小时网络流量。

$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

查看Live LiveWidth使用情况

要启动实时监控特定接口卡的使用,请运行:

$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

要停止实时监控,请按Ctrl-C。

有关更多详细信息,请参阅Man页面:

$man vnstat