是否可以在vnstat中设置峰值和非峰值时间以监控带宽?

Modified on: Sun, 10 Jun 2018 04:35:23 +0800

我最近下载了vnstat来监控我的Internet带宽使用情况。我有一个有限的数据计划,但我的ISP在非高峰时段(凌晨2:00到8:00)提供未计量的带宽。因此,我希望vnstat能够单独报告数据使用情况,分类为峰值使用情况和非峰值使用情况。

我已经通过man vnstat但在这方面找不到任何帮助。是否可以使用vnstat为高峰时段和非高峰时段获取两个不同的统计数据?如果没有,我可以选择哪些替代方案?

作者:,Aditya

最佳答案

AFAIK无带宽监控工具优于vnstat。不幸的是它不支持这个功能。但您可以通过为vnstat使用多个数据库来实现此目的。

将高峰时段的数据保存到vnstat1,将非高峰时间的数据保存到vnstat2。制作一个守护程序脚本,它将根据一天中的时间使用无限循环中的if条件来切换它们;如果不是在02-08小时之间使用vnstat1,则禁用vnstat1,启用vnstat2sleep

我写了以下bash脚本。将其保存在文件中,并使用sudo chmod x <filename>使其可执行。测试一段时间。最后使脚本自动启动OS。以root用户身份运行它。 (只需在/etc/rc.local中添加脚本的路径,以便在启动时执行该脚本。)

#!/bin/bash
# vnstat_switcher.sh

# Select the interface to monitor e.g: eth0, eth1, ppp0
i=eth0

# Location of database used by vnstat
db1='/var/lib/vnstat1'   # on-peak
db2='/var/lib/vnstat2'   # off-peak

onpeakdb='/tmp/onpeak'
offpeakdb='/tmp/offpeak'

debug=false
iscatdata=true
current=0

# Create database for db1 if it doesn't exist
if ! [ -d "$db1" ]
    then
    mkdir -p "$db1"
    vnstat -i $i --dbdir "$db1" -u
fi

# Create database for db2 if it doesn't exist
if ! [ -d "$db2" ]
    then
    mkdir -p "$db2"
    vnstat -i $i --dbdir "$db2" -u
fi

$debug && echo 1
#vnstat -i $i --disable

while true
    do
    t=$( date  %H )
    $debug && t=$( date  %S )
    if [ "$t" -lt 2 ] || [ "$t" -gt 7 ]    # if peak hours
        then
        $debug && echo 'On-peak hours'
        vnstat -i $i --dbdir "$db1" -u
        $debug && echo 2
        if [ "$iscatdata" ]
            then
            vnstat -i $i --dbdir "$db2" > "$offpeakdb"
            iscatdata=false
        fi
        vnstat -i $i --dbdir "$db1" > "$onpeakdb"
        if [ $current != 1 ]
            then
            vnstat -i $i --disable --dbdir "$db2"
            $debug && echo 3
            vnstat -i $i --enable --dbdir "$db1" --sync
            $debug && echo 4
            current=1
        fi
    else
        $debug &&  echo 'Off-peak hours'
        vnstat -i $i --dbdir "$db2" -u
        $debug && echo 5
        if [ "$iscatdata" ]
            then
            vnstat -i $i --dbdir "$db1" > "$onpeakdb"
            iscatdata=false
        fi
        vnstat -i $i --dbdir "$db2" > "$offpeakdb"
        if [ $current != 2 ]
            then
            vnstat -i $i --disable --dbdir "$db1"
            $debug && echo 6
            vnstat -i $i --enable --dbdir "$db2" --sync
            $debug && echo 7
            current=2
        fi
    fi
    $debug && sleep 1 || sleep 1m
    done


#### Notes
# Ignore this message at first execution
# Interface "lo" is already disabled.
# Interface "lo" is already enabled.

#For debugging use interface 'lo' then
# `ping -s 2222 0.0.0.0`

将第5行的i=eth0更改为您要监控的网络接口。

要知道用法分别运行cat /tmp/onpeakcat /tmp/offpeak

同样最好重置默认数据库(/var/lib/vnstat)上的数据,因为如果脚本中的所有内容都运行良好,它将永远不会更新。

作者:,totti

相关问答

添加新评论