Bant genişliğini izlemek için vnstat'ta tepe noktası ve tepe noktası dışı saatler ayarlamak mümkün müdür?


10

vnstatİnternet bant genişliği kullanımımı izlemek için kısa bir süre önce indirdim. Sınırlı bir veri planım var, ancak ISS'm yoğun olmayan saatlerde (02:00 - 08:00) ölçülmemiş bant genişliği sağlıyor. Bu nedenle, vnstat'ın en yoğun kullanımı ve en yoğun olmayan kullanımı ayrı ayrı kategorize eden veri kullanımını bildirmesini istiyorum.

Ben yaşadım man vnstatama bu konuda herhangi bir yardım bulamadım. Yoğun ve yoğun olmayan saatler için iki farklı istatistik elde etmek mümkün müdür vnstat? Değilse, bunu başarmak için hangi alternatifler mevcut?


ISS'nin web sitesinden ilginç veriler çıkarmak için bir program yazdım ; iki oranı ayrı ayrı kaydetmeleri gerektiği için sizin durumunuzda yararlı olabilir. Bu, kullanım verilerini kazımak için PhantomJS kullanır. Biraz alfa, ama benim için çalışıyor.
halfer

@halfer Link için teşekkürler .. Her ne kadar php / javascript bilmiyorum (infact fazla programlama bilmiyorum), bir gün yararlanmak olabilir bakın ... Neden bunu kullanarak cevap vermiyorsun bir veya iki ISP için bir örnek veren bir yardımcı program ... bazı insanlar için kullanışlı olabilir .. :)
Aditya

Sorun yok. Önemli bir cevap atm yazmak için zaman yok, bu nedenle yorum - ama başka bir zaman yapabilir!
halfer

Yanıtlar:


5

AFAIK hiçbir bant genişliği izleme aracı daha iyidir vnstat. Ne yazık ki bu özelliği desteklemiyor. Ancak bunu için birden fazla veritabanı kullanarak başarabilirsiniz vnstat.

Verileri yoğun saatlere vnstat1ve yoğun olmayan saatlere kaydedin vnstat2. ifSonsuz bir döngüde bir koşul kullanarak günün saatine göre değiştirecek bir daemon betiği oluşturun ; değilse 02-08 saat arasında vnstat1başka devre dışı bırak vnstat1, etkinleştir vnstat2ve kullanın sleep.

Aşağıdaki bash betiğini yazdım. Bir dosyaya kaydedin ve kullanarak yürütülebilir hale getirin sudo chmod x <filename>. Bir süre test edin. Son olarak komut dosyasının işletim sistemi ile otomatik başlatılmasını sağlayın. rootKullanıcı olarak çalıştırın . (Komut dosyasının /etc/rc.localönyükleme zamanında yürütülmesi için komut dosyasının yolunu eklemeniz yeterlidir).

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

İzlemek i=eth0istediğiniz ağ arabirimine 5. satırdan geçin.

Kullanım koşusunu cat /tmp/onpeakve cat /tmp/offpeaksırasıyla bilmek .

Ayrıca /var/lib/vnstat, komut dosyasındaki her şey yolunda giderse hiçbir zaman güncellenmeyeceğinden , varsayılan veritabanındaki ( ) verileri sıfırlamak iyi bir fikirdir .



2

Umarım bu biraz yardımcı olur.

Size yazdığım bir programı vereceğim çünkü cron çalışmasıyla ilgili problemlerim vardı. Ne yazık ki kabuk komut dosyası bilmiyorum bu yüzden bu python, ama benim için çalıştı ve oldukça basit, ama güzel. Üzgünüm koduma yorum yapmadım, ama gerçekten geri dönmek istemedim. Bazı parçaların en iyi olmayabileceğini biliyorum, ama işe yarıyor.

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()              

Hızlı rehber

  • Bekleme'yi açın, kopyalayın> yapıştırın.

  • Farklı kaydet filename.py.

  • Terminal'i açın.

  • Python 3 (python3 dosyaadı.py`) ile çalıştırın.

  • Vnstat'ın çalışması için zamanlamak istediğiniz saati girin.

  • O saate istediğiniz dakikayı koyun.

  • İzlemesini istediğiniz saat sayısını girin.

  • İzlemesini istediğiniz dakika sayısını girin.

İzlediğiniz cihaza girin (geçmedim ve hata kontrolü yapmadım, bu yüzden monkeybutt gibi bir şey girerseniz vnstat -i monkeybutt, her 15 saniyede bir, sadece Ctrl+ Cdışarı) dener ve çalışır .

Program, zamanın eşleşip eşleşmediğini görmek için 15 saniyede bir çalışacak ve herhangi bir mesaj vermeyecektir. Arka planda çalıştırılması gerekiyordu. Başladıktan sonra, seçtiğiniz cihazda ağın her 15 saniyesinde bir çekim yapar. Vnstat komutunu ve izlemeden kaç saniye kaldığınızı söyleyen bir sayaç kullanın.

Taramaları tamamladıktan sonra çıkmak isteyip istemediğinizi soracak ve bir rapor göstermek istiyorsanız size bir seçenek sunacaktır, aksi takdirde çıkabilirsiniz. Her şey zaten vnstats veritabanında saklanır.


Yazının eski kısmı (bazı insanlar için yararlı olabilir)

Gnome-zamanlama alabilir, sonra komutunuzu girebilirsiniz, örneğin vnstat -h ve izlemeye çalıştığınız zamanlarda tekrar tekrar ayarlayabilirsiniz. Belki çok basit, ama umarım başka biri daha da genişleyebilir.

Ek (Düzenle): Vnstat'ı çok fazla kullanmadım, bu yüzden birinin o kısımda genişleyebileceğini umuyordum, ancak gnome-çizelgesi ile günün belirli bölümlerinde yürütmek için bir komut planlayabilirsiniz. Bu nedenle, vntstat -tr -l (trafik anahtarı, canlı trafiği izleme) kullanmak, trafiği çalışırken gösterir (gnome-programında zamanlayabilirsiniz, ancak manuel olarak Ctrl+ C] yapmanız gerekebilir .)

Aksi takdirde, bunu bir dosyaya bağlayabileceğinizden eminim veya varsa vnstat için grafik çıktı programını kullanabilirsiniz. Grafik çıktı programı vnstati -i 'filename'png dosyasına çıktı verecektir. Daha fazla komut istiyorsanız vnstat --longhelp'nin daha fazla komutu vardır.

ekran görüntüsü

(İşleri gnome-programına nasıl koyacağınıza dair örnek ekran.)

Vnstat kullanarak bant genişliğinin 'anlık görüntüsünü' nasıl alacağınızı biliyor musunuz, yoksa bu komutlar hakkında daha fazla yardıma mı ihtiyacınız var? Programla daha fazla çalışmayı deneyebilirim.


Neden her zaman ilgili şeyleri sormak gerekiyor? Şebeke kullanımını sürekli olarak izlemesini ve yoğun saatlerde ve yoğun saatlerde verileri ayrı ayrı göstermesini istiyorum ... Her iki veriyi de her zaman görmek istiyorum İstiyorum. Dahası, bu Python programında birkaç girinti hatası var ... (Bu arada yapmazsanız onları temizlemeye çalışırım) ...
Aditya

Evet, girintiler forumda dağılmış durumda, her şeyden geçip boşluk eklemeliyim, bunun için üzgünüm. Py programını sanırım bir yere gönderebilirim. Bunun için veritabanlarına da bakayım.
Hayır Zaman

@Aditya, totti'nin senaryodaki hata mesajına baktım. Erişilen / taşınan dosyalar normalde kullanıcı düzeyinde izinlere sahip olmadığından, muhtemelen sudo / root olarak çalıştırmanız gerekecektir. Totti'nin senaryosunu daha fazla test ederdim, ama bana iyi çıktı verip vermediğini görmek için zaman seçemiyorum (veya şimdi bir test yapamıyorum). Yaklaşık 8 saat çalıştırmam gerekecek ve gerçekten bu kadar beklemek istemiyorum. Bunu düzeltmek için yeterli kabuk komut dosyası bilmiyorum. eğer değiştirebilirseniz, işe yarayıp yaramadığını görmek için çok zor bir zaman değil, bu harika olurdu. (Diğer ppl şeyler hakkında yorum yapamam hiçbir temsilcisi
yok

@totti değişken / kullanıcı giriş zamanı ekleyebilir mi?
Zaman Yok
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.