Можно ли установить часы пиковой и непиковой нагрузки в vnstat для мониторинга пропускной способности?

Я недавно загрузил vnstat для мониторинга использования моей пропускной способности Интернет. У меня ограниченный тариф на передачу данных, но мой интернет-провайдер обеспечивает неограниченную пропускную способность в непиковые часы (с 2:00 до 8:00). Итак, я хотел бы, чтобы vnstat сообщал об использовании данных, классифицируя пиковое использование и непиковое использование отдельно.

Я прошел man vnstat, но не смог найти никакой помощи в этом отношении. Можно ли получить две разные статистические данные за часы пиковой и непиковой нагрузки, используя vnstat? Если нет, то какие альтернативы мне доступны для достижения того же самого?

10
задан 19.05.2020, 06:42

2 ответа

AFAIK никакой контрольный инструмент пропускной способности лучше, чем vnstat. К сожалению, это не поддерживает эту функцию. Но можно достигнуть этого при помощи нескольких баз данных для vnstat.

Сохраняют данные для на часах пик к vnstat1 и для непикового к vnstat2. Сделайте сценарий демона, который переключит их на основе времени дня с помощью if условие в бесконечном цикле; если не между использованием 02-08 часов vnstat1 еще отключают vnstat1, включают vnstat2 и sleep.

я записал следующий сценарий удара. Сохраните его в файле и сделайте его исполняемым файлом с помощью [1 110]. Тестируйте его в течение некоторого времени. Наконец сделайте автоматический запуск сценария с ОС. Выполните его как root пользователь. (Просто добавьте путь к сценарию в [1 112] для него, чтобы быть выполненными во время начальной загрузки).

#!/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`

Изменение i=eth0 на 5-й строке к сетевому интерфейсу Вы хотите контролировать.

Для знания использования работает cat /tmp/onpeak и cat /tmp/offpeak соответственно.

Также это - хорошая идея сбросить данные по базе данных по умолчанию (/var/lib/vnstat), поскольку это никогда не будет обновлять, если все в сценарии будет подходить.

5
ответ дан 19.05.2020, 06:43

Надо надеяться, это помогает немного.

, Таким образом, я собираюсь дать Вам программу, которую я записал, потому что у меня были проблемы с работой крона. Я не знаю оболочку, пишущую сценарий, к сожалению, таким образом, это находится в Python, но это работало на меня, и это довольно просто, но хорошо. Извините я не прокомментировал свой код, но я действительно не хотел возвращаться через него. Я знаю, что некоторые части не могли бы быть лучшими, но это работает.

def main():    
    while True:
        import time
        import os
        from subprocess import call
        schedule=tim3()
        print(schedule)
        interface=" "
        while interface==" ":

            interface=input("""
Enter your interface:
(Be careful there is no error checking for this part)
Examples are eth0, wlan0...
""")
            if interface == "":
                break

        while True:
            x= clogger(schedule[2],schedule[3],schedule[4],\
                   schedule[5],interface)

            if x== "done":
                break
        while True:
            x= exit_q()
            if x== "y":
                user_exit=input('''
How would you like your output?
Type (From vnstat --longhelp):
     q,  --query          query database
     h,  --hours          show hours
     d,  --days           show days
     m,  --months         show months
     w,  --weeks          show weeks
     t,  --top10          show top10
     s,  --short          use short output
''')
                call(["vnstat", "-"+str(user_exit), "-i", str(interface),])
            break
        break



def tim3():
    import time

    #current_time=["16", "20"]
    tim3= time.strftime("%H %M")
    current_time=tim3.split()
    print("""


        """+ str(tim3)+"""
        Current time
        """)
    hour=current_time[0]
    minute=current_time[1]
    ui = inputs()
    newlist=[hour, minute]
    schedule=newlist+ui
    print(schedule)
    return schedule
def inputs():
    print("""
------------------------------------------
""")
    while True:
        start_hour=(input("Enter the starting hour (24hr): "))
        start_min=(input("Enter the starting minute: "))
        x = checker(start_hour, start_min)
        endh=(input("How many hours would you like to run? "))
        endm=(input("How many minutes would you like to run? "))
        y = checker(endh,endm)
        if str(x)=="Great":
            if str(y) == "Great":
                return [start_hour, start_min, endh, endm]

def checker(h,m):
    error=0
    message=("Incorrect Format")
    while error==0:
        if h =="":
            print(message)
            break
        if len(str(h))> 2:
            print(message)
            break
        if m =="":
            print(message)
            break
        if len(str(m))>2:
            print(message)
            break
        for x in str(h):
            if x.isdigit() == False:
                error+=1
                print(message)
                break
            if error>0:     
                print(message)
                break
        for y in str(m):
            if y.isdigit() == False:
                error+=1
                print(message)
                break
            if error>0:     
                print(message)
                break
        else:
            return("Great")

def clogger(s1,s2,t1,t2,I):
    import time
    import os
    from subprocess import call
    total_time=int(t1)*60*60+int(t2)*60


    while True:
        h1=int(time.strftime('%H'))
        m2=int(time.strftime('%M'))
        if len(str(s1))<2:
            s1="0"+str(s1)

        if len(str(s2))<2:
            s2="0"+str(s2)

        if len(str(h1))<2:
            h1="0"+str(h1)

        if str(h1)==str(s1) and str(m2)==str(s2):
            while True:
                if total_time>0:

                    call (["vnstat", "-i",str(I)])
                    time.sleep(15)
                    total_time=total_time-15
                    print(total_time," seconds")

                elif total_time<=0:
                    return "done"

        time.sleep(15)




def exit_q():

    while True:
        question=input("Would you like to show a report? (y/n) ")
        if question == "y" or question == "n":
            return question



main()              

Краткое руководство по

  • Открывают Idle, копия> вставка.

  • Сохраняют как filename.py.

  • Открытый Терминал.

  • Выполнение это с Python 3 (python3 filename.py').

  • Вставленный в час Вы хотите запланировать для vnstat работать.

  • Вставленный в минуту Вы хотите того часа.

  • Помещенный сумма часов Вы хотите, чтобы он контролировал для.

  • Помещенный сумма минут Вы хотите, чтобы он контролировал для.

Вводят устройство, которое Вы контролируете (я не прошел и проверка на ошибки, поэтому если Вы введете что-то как monkeybutt, это попытается работать vnstat -i monkeybutt, каждые 15 секунд, просто Ctrl + C ).

программа будет пробегать каждые 15 секунд, чтобы видеть, соответствует ли время, это не даст сообщений. Это предназначено, чтобы быть выполненным в фоновом режиме. Как только это запускается, это сделает снимок каждые 15 секунд сети на устройстве, которое Вы выбрали. Используя команду vnstat, плюс счетчик, говорящий, сколько секунд Вы уехали контроля.

После завершения сканирований это спросит, хотите ли Вы выйти, и дать Вам опцию, если Вы хотите показать отчет, иначе можно просто выйти. Весь материал хранится в vnstats базе данных так или иначе.

<час>

Старая часть сообщения (может быть полезно некоторым людям)

Вы могли получить расписание гнома, затем вставить Вашу команду, например, vnstat-h и установить его повторяющийся в течение времен, которые Вы пытаетесь контролировать. Возможно, слишком простой, но надо надеяться кто-то еще мог расшириться далее.

Дополнительный (Редактирование): Я не использовал vnstat очень, который является, почему я надеялся, что кто-то мог подробно остановиться на той части, но с расписанием гнома, можно запланировать команду для выполнения во время определенных частей дня. Так с помощью vntstat - TR-l (переключение трафика, монитор живой трафик), показал бы трафик при выполнении (который можно запланировать в расписании гнома, но Вы можете иметь к вручную Ctrl + C ].)

Иначе я уверен, что Вы могли передать это по каналу в файл или использовать программу вывода графических данных для vnstat, если у Вас есть это. Программа вывода графических данных vnstati -i 'filename', произведет его в png файл. Если Вы хотите дальнейшие команды vnstat --longhel, p имеет больше команд.

screenshot

(Демонстрационный экран того, как поместить вещи в расписание гнома.)

Вы знаете, как уже получить 'снимок' пропускной способности с помощью vnstat, или Вы нуждаетесь в дальнейшей помощи на тех командах? Я могу попытаться работать с программой больше.

2
ответ дан 19.05.2020, 06:44
  • 1
    Почему это должно спросить меня все время связанный материал... Я хочу, чтобы он непрерывно контролировал использование сети и выставочные данные отдельно в течение и часов неполной нагрузки на часах пик... Я хотел бы видеть обоих данные каждый раз, когда я хочу. Кроме того, в этой программе Python существует несколько ошибок добавления отступа... (Я попытался бы разрешить их если Вы don' t делают это тем временем)... – Fadrian Sudaman 19.05.2020, 06:44
  • 2
    @Aditya, я посмотрел на Ваше сообщение об ошибке из сценария totti. Необходимо будет, вероятно, выполнить его как sudo/root начиная с файлов, которые получаются доступ/перемещаются, обычно не имеют полномочий уровня пользователя. Я протестировал бы totti' s сценарий больше, но я can' t выбирают время (или сделайте тест теперь) видеть, дает ли оно мне хороший вывод. Я должен был бы выполнить его в течение приблизительно 8 часов, и действительно don' t хотят ожидать настолько долго. Я don' t знают, что сценарий оболочки достаточно фиксирует его. если Вы могли бы изменить его так это isn' t как набор трудного времени, чтобы видеть, работает ли это, который был бы прохладен. (У меня нет представителя I can' t комментируют другой ppl' s материал) – matt 19.05.2020, 06:44
  • 3
    @totti, возможно, добавляют время переменной/ввода данных пользователем? – Stewart 19.05.2020, 06:44
  • 4
    Да отступы испорчены на форуме, я должен пробежать каждую вещь и добавить пробелы, извините об этом. Я мог просто отправить py программу где-нибудь, я предполагаю. Позвольте мне изучить базы данных для этого также. – Fadrian Sudaman 19.05.2020, 06:45

Теги

Похожие вопросы