क्या बैंडविड्थ की निगरानी के लिए vststat में चोटी और ऑफ-पीक घंटे सेट करना संभव है?


10

मैंने हाल ही में vnstatअपने इंटरनेट बैंडविड्थ उपयोग की निगरानी करने के लिए डाउनलोड किया है। मेरे पास एक सीमित डेटा प्लान है लेकिन मेरा आईएसपी ऑफ-पीक आवर्स (2:00 पूर्वाह्न से 8:00 पूर्वाह्न) के दौरान बिना बैंडविड्थ के उपलब्ध कराता है। इसलिए, मैं vnstat को ऑन-पीक उपयोग और ऑफ-पीक उपयोग को वर्गीकृत करने वाले डेटा उपयोग की रिपोर्ट करना चाहूंगा।

मैं गुजर गया man vnstatलेकिन इस संबंध में कोई मदद नहीं मिली। क्या ऑन-पीक और ऑफ-पीक आवर्स के लिए दो अलग-अलग आँकड़े प्राप्त करना संभव होगा vnstat? यदि नहीं, तो क्या विकल्प मुझे प्राप्त करने के लिए उपलब्ध हैं?


मैंने ISP की वेबसाइट से दिलचस्प डेटा खींचने के लिए एक कार्यक्रम लिखा ; यह आपके मामले में उपयोगी हो सकता है, क्योंकि उन्हें दो दरों को व्यक्तिगत रूप से लॉग इन करना चाहिए। यह उपयोग डेटा को परिमार्जन करने के लिए PhantomJS का उपयोग करता है। यह थोड़ा अल्फा है, लेकिन मेरे लिए काम करता है।
halfer

@halfer लिंक के लिए धन्यवाद .. हालाँकि मैं php / javascript (बहुत प्रोग्रामिंग नहीं जानता हूँ) को नहीं जानता, अगर किसी दिन मैं इसका उपयोग कर सका तो देखूँगा ... आप इसका उपयोग करके उत्तर क्यों नहीं देते उपयोगिता एक या दो आईएसपी के लिए एक उदाहरण दे रही है ... जो कुछ लोगों के लिए काम आ सकती है .. :)
आदित्य

समस्या नहीं। कोई पर्याप्त जवाब लिखने का समय नहीं है, इसलिए टिप्पणी - लेकिन एक और समय अच्छी तरह से कर सकता है!
रोकें

जवाबों:


5

AFAIK कोई बैंडविड्थ निगरानी उपकरण से बेहतर है vnstat। दुर्भाग्य से यह इस सुविधा का समर्थन नहीं करता है। लेकिन आप इसके लिए कई डेटाबेस का उपयोग करके प्राप्त कर सकते हैं vnstat

पीक ऑवर्स के लिए vnstat1और ऑफ-पीक के लिए डेटा को सेव करें vnstat2। एक डेमॉन स्क्रिप्ट बनाएं जो उन्हें दिन के समय के आधार पर ifएक अनंत लूप में एक स्थिति का उपयोग करके स्विच करेगा ; यदि 02-08 घंटे के बीच नहीं है तो vnstat1अन्य अक्षम vnstat1, सक्षम vnstat2और का उपयोग करें sleep

मैंने निम्नलिखित बैश स्क्रिप्ट लिखी। इसे एक फ़ाइल में सहेजें और इसका उपयोग करके निष्पादन योग्य बनाएं 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`

i=eth05 वीं पंक्ति पर उस नेटवर्क इंटरफ़ेस पर बदलें जिसे आप मॉनिटर करना चाहते हैं।

उपयोग चलाने cat /tmp/onpeakऔर cat /tmp/offpeakक्रमशः जानने के लिए ।

डिफ़ॉल्ट डेटाबेस ( /var/lib/vnstat) पर डेटा रीसेट करने के लिए भी यह एक अच्छा विचार है , क्योंकि यह कभी भी अपडेट नहीं होगा यदि स्क्रिप्ट में सबकुछ ठीक हो जाता है।



2

उम्मीद है कि यह थोड़ा मदद करता है।

इसलिए मैं आपको एक कार्यक्रम देने जा रहा हूं जो मैंने लिखा था, क्योंकि मुझे क्रॉन के काम करने में समस्या हो रही थी। मुझे नहीं पता कि शेल स्क्रिप्टिंग दुर्भाग्य से इसलिए यह अजगर में है, लेकिन इसने मेरे लिए काम किया, और यह बहुत सरल है, लेकिन अच्छा है। क्षमा करें, मैंने अपना कोड टिप्पणी नहीं किया, लेकिन मैं वास्तव में इसके माध्यम से वापस नहीं जाना चाहता था। मुझे पता है कि कुछ हिस्से सर्वश्रेष्ठ नहीं हो सकते हैं, लेकिन यह काम करता है।

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

त्वरित गाइड

  • ओपन आइडल, कॉपी> पेस्ट।

  • के रूप में सहेजें filename.py

  • टर्मिनल खोलें।

  • इसे पायथन 3 (python3 filename.py`) के साथ चलाएं।

  • घंटे आप vnstat को चलाने के लिए शेड्यूल करना चाहते हैं।

  • उस मिनट में रखें जिसे आप उस घंटे के लिए चाहते हैं।

  • घंटे की मात्रा आप इसे के लिए निगरानी करना चाहते हैं रखो।

  • जितने मिनट के लिए आप इसे मॉनिटर करना चाहते हैं उतने मिनट लगाएं।

वह उपकरण दर्ज करें जिसे आप मॉनिटर कर रहे हैं (मैं नहीं गया और त्रुटि की जांच कर रहा हूं, इसलिए यदि आप बंदरबट जैसी किसी चीज को दर्ज करते हैं, तो यह कोशिश करेगा और vnstat -i monkeybuttहर 15 सेकंड में, बस Ctrl+ Cबाहर चला जाए)।

यह कार्यक्रम प्रत्येक 15 सेकंड में चलेगा, यह देखने के लिए कि क्या समय मेल खाता है, यह कोई संदेश नहीं देगा। यह पृष्ठभूमि में चलाने के लिए है। एक बार शुरू होने के बाद, यह आपके द्वारा चुने गए डिवाइस पर नेटवर्क के हर 15 सेकंड में एक शॉट लेगा। Vnstat कमांड का उपयोग करना, साथ ही एक काउंटर यह कहना कि आपके पास निगरानी के कितने सेकंड बचे हैं।

स्कैन पूरा करने के बाद यह पूछेगा कि क्या आप बाहर निकलना चाहते हैं, और आपको एक विकल्प देना है यदि आप एक रिपोर्ट दिखाना चाहते हैं, अन्यथा आप बस बाहर निकल सकते हैं। सभी सामान vnstats डेटाबेस में वैसे भी संग्रहीत है।


पोस्ट का पुराना हिस्सा (कुछ लोगों के लिए उपयोगी हो सकता है)

आप सूक्ति-शेड्यूल प्राप्त कर सकते हैं, फिर उदाहरण के लिए vnstat -h के लिए अपनी कमांड में रख सकते हैं, और इसे मॉनिटर करने की कोशिश कर रहे समय के दौरान इसे फिर से सेट करें। शायद बहुत आसान है, लेकिन उम्मीद है कि कोई और आगे विस्तार कर सकता है।

अतिरिक्त (संपादन): मैंने vnstat का उपयोग बहुत अधिक नहीं किया है, यही कारण है कि मैं उम्मीद कर रहा था कि कोई उस हिस्से पर विस्तार कर सकता है, लेकिन सूक्ति-शेड्यूल के साथ, आप दिन के विशिष्ट भागों के दौरान निष्पादित करने के लिए एक कमांड शेड्यूल कर सकते हैं। तो vntstat -tr -l (यातायात स्विच, मॉनिटर लाइव ट्रैफ़िक) का उपयोग करते हुए, ट्रैफ़िक को चलाते समय दिखाएगा (जिसे आप सूक्ति-शेड्यूल में शेड्यूल कर सकते हैं, लेकिन आपको मैन्युअल रूप से Ctrl+ C] बाहर करना पड़ सकता है ।)

अन्यथा मुझे यकीन है कि आप इसे एक फ़ाइल में पाइप कर सकते हैं, या यदि आपके पास है तो vnstat के लिए ग्राफिकल आउटपुट प्रोग्राम का उपयोग करें। ग्राफिकल आउटपुट प्रोग्राम vnstati -i 'filename'इसे पीएनजी फ़ाइल के लिए आउटपुट करेगा। यदि आप चाहते हैं कि आगे कमांड vnstat --longhelp में और कमांड्स हैं।

स्क्रीनशॉट

(चीजों की नमूना स्क्रीन को सूक्ति-अनुसूची में कैसे रखा जाए।)

क्या आप जानते हैं कि पहले से ही vnstat का उपयोग करके बैंडविड्थ का 'स्नैपशॉट' कैसे प्राप्त किया जा सकता है, या क्या आपको उन आदेशों पर और सहायता की आवश्यकता है? मैं कार्यक्रम के साथ अधिक काम करने की कोशिश कर सकता हूं।


मुझे हर समय संबंधित सामान से पूछने की आवश्यकता क्यों है ... मैं चाहता हूं कि यह नेटवर्क के उपयोग की निरंतर निगरानी करे और ऑन-पीक घंटे और ऑफ-पीक घंटे के लिए अलग से डेटा दिखाए ... मैं जब भी दोनों डेटा देखना चाहूंगा मुझे चाहिए। इसके अलावा, इस पायथन कार्यक्रम में कुछ इंडेंटेशन बग हैं ... (यदि आप इस बीच ऐसा नहीं करते हैं तो मैं उन्हें साफ़ करने की कोशिश करूंगा ...
आदित्य

हाँ, इंडेंट फ़ोरम पर गड़बड़ हो जाते हैं, मुझे हर चीज़ के माध्यम से दौड़ना पड़ता है और रिक्त स्थान जोड़ना पड़ता है, इसके बारे में खेद है। मैं बस py कार्यक्रम पोस्ट कर सकता हूँ कहीं मुझे लगता है। मुझे इसके लिए डेटाबेस पर भी ध्यान देना चाहिए।
नो टाइम

@ आदित्य, मैंने टोटी से स्क्रिप्ट से आपके त्रुटि संदेश को देखा। आपको शायद इसे sudo / root के रूप में चलाना होगा क्योंकि जिन फ़ाइलों को एक्सेस / मूव किया जा रहा है उनमें आमतौर पर उपयोगकर्ता स्तर की अनुमति नहीं है। मैं टोट्टी की स्क्रिप्ट का अधिक परीक्षण करूंगा, लेकिन मैं यह देखने के लिए समय का चयन नहीं कर सकता (या अभी परीक्षण कर रहा हूं) कि क्या यह मुझे अच्छा आउटपुट दे रहा है। मुझे इसे लगभग 8 घंटे चलाने की आवश्यकता होगी, और वास्तव में उस लंबे समय तक इंतजार नहीं करना चाहिए। मैं इसे ठीक करने के लिए शेल स्क्रिप्ट को नहीं जानता। यदि आप इसे बदल सकते हैं तो यह देखने के लिए मुश्किल समय निर्धारित नहीं है कि यह काम करता है, यह अच्छा होगा। (मेरे पास कोई प्रतिनिधि नहीं है मैं अन्य पीपीएल के सामान पर टिप्पणी नहीं कर सकता)
कोई समय

@totti शायद एक चर / उपयोगकर्ता इनपुट समय जोड़ सकते हैं?
नो टाइम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.