ব্যান্ডউইদথ পর্যবেক্ষণের জন্য vnstat এ অন-পিক এবং অফ-পিক আওয়ারগুলি সেট করা কি সম্ভব?


10

আমি সম্প্রতি vnstatআমার ইন্টারনেট ব্যান্ডউইথের ব্যবহার পর্যবেক্ষণ করতে ডাউনলোড করেছি। আমার একটি সীমিত ডেটা প্ল্যান রয়েছে তবে আমার আইএসপি অফ-পিক আওয়ারের সময়গুলি (2:00 AM থেকে 8:00 AM) অবিরত ব্যান্ডউইদথ সরবরাহ করে। সুতরাং, আমি vnstat অন-পিক ব্যবহার এবং অফ-পিক ব্যবহার পৃথকভাবে শ্রেণিবদ্ধ করে ডেটা ব্যবহারের প্রতিবেদন করতে চাই।

আমি পেরিয়েছি man vnstatকিন্তু এ ব্যাপারে কোনও সাহায্য পাইনি। অন ​​পিক এবং অফ-পিক আওয়ার ব্যবহারের জন্য দুটি পৃথক পরিসংখ্যান পাওয়া সম্ভব হবে vnstat? যদি তা না হয় তবে তা অর্জনের জন্য আমার কাছে কী বিকল্প রয়েছে?


আইএসপি-র ওয়েবসাইট থেকে আকর্ষণীয় তথ্য টানতে আমি একটি প্রোগ্রাম লিখেছি ; এটি আপনার ক্ষেত্রে কার্যকর হতে পারে, কারণ তাদের পৃথকভাবে দুটি হার লগ করা উচিত। এটি ব্যবহারের ডেটা স্ক্র্যাপ করতে ফ্যান্টমজেএস ব্যবহার করে। এটি কিছুটা আলফা, তবে আমার জন্য কাজ করে।
অর্ধেক

@ হাইফার এই লিঙ্কটির জন্য ধন্যবাদ .. যদিও আমি পিএইচপি / জাভাস্ক্রিপ্ট জানি না (প্রকৃতপক্ষে খুব বেশি প্রোগ্রামিং জানে না), আমি যদি কোনও দিন এটি ব্যবহার করতে পারি কিনা তা দেখতে পাবে ... আপনি কেন এই উত্তর দিয়ে উত্তর দিচ্ছেন না? এক বা দুটি আইএসপি-র উদাহরণ দেওয়ার জন্য ইউটিলিটি ... এটি কিছু লোকের পক্ষে কার্যকর হতে পারে .. :)
আদিত্য

কোন প্রব। একটি যথেষ্ট উত্তর এটিএম লেখার সময় নেই, সুতরাং মন্তব্য - তবে ভাল অন্য সময়টি করতে পারে!
অর্ধ

উত্তর:


5

এএফআইকে-র কোনও ব্যান্ডউইথ মনিটরিং সরঞ্জাম এর চেয়ে ভাল vnstat। দুর্ভাগ্যক্রমে এটি এই বৈশিষ্ট্যটিকে সমর্থন করে না। তবে আপনি একাধিক ডাটাবেস ব্যবহার করে এটি অর্জন করতে পারেন vnstat

পিক আওয়ারে vnstat1এবং অফ-পিক থেকে অফ পিকের জন্য ডেটা সংরক্ষণ করুন vnstat2। একটি ডেমন স্ক্রিপ্ট তৈরি করুন ifযা সীমাহীন লুপের শর্ত ব্যবহার করে দিনের সময়ের ভিত্তিতে এগুলি পরিবর্তন করে ; যদি 02-08 মধ্যে নয় ঘণ্টা ব্যবহার vnstat1আর অক্ষম vnstat1, সক্ষম vnstat2এবং sleep

আমি নিম্নলিখিত বাশ স্ক্রিপ্ট লিখেছি। এটি একটি ফাইলে সংরক্ষণ করুন এবং এটি ব্যবহার করে কার্যকর করুন sudo chmod x <filename>। এটি কিছু সময়ের জন্য পরীক্ষা করুন। অবশেষে ওএস দিয়ে স্ক্রিপ্ট অটো শুরু করুন। এটি 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=eth0আপনি নিরীক্ষণ করতে চান নেটওয়ার্ক ইন্টারফেসে 5 তম লাইনে পরিবর্তন করুন।

ব্যবহার চালাতে 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 (পাইথন 3 ফাইলের নাম.পি`) দিয়ে এটি চালান।

  • আপনি vnstat চালানোর জন্য সময় নির্ধারণ করতে চান এমন সময় দিন।

  • আপনি যে মুহুর্তটি চান সেই মুহুর্তে রাখুন।

  • আপনি যে পরিমাণ ঘন্টা এটি পর্যবেক্ষণ করতে চান তা রাখুন।

  • আপনি যে পরিমাণ মিনিট এটি পর্যবেক্ষণ করতে চান তা রাখুন।

আপনি যে ডিভাইসটি পর্যবেক্ষণ করছেন সেগুলি প্রবেশ করুন (আমি ত্রুটিটি পরীক্ষা করে দেখিনি, তাই আপনি যদি বানরবাট্টের মতো কোনও কিছু প্রবেশ করেন তবে এটি চেষ্টা করবে এবং vnstat -i monkeybuttপ্রতি 15 সেকেন্ডে চলে যাবে, মাত্র Ctrl+ Cআউট)।

প্রোগ্রামটি প্রতি 15 সেকেন্ডের মধ্যে দিয়ে সময়টি মেলে কিনা তা কোনও বার্তা দেয় না তা দেখতে চলে। এটি পটভূমিতে চালানো বোঝানো হয়েছে। একবার এটি শুরু হয়ে গেলে, আপনার চয়ন করা ডিভাইসে এটি নেটওয়ার্কের প্রতি 15 সেকেন্ডে শট নেবে। Vnstat কমান্ড ব্যবহার করে, একটি পাল্টা বলছে যে আপনি কত সেকেন্ডের নজরদারি রেখে গেছেন।

স্ক্যানগুলি শেষ করার পরে এটি জিজ্ঞাসা করবে আপনি প্রস্থান করতে চান কিনা এবং আপনি কোনও প্রতিবেদন দেখাতে চাইলে আপনাকে একটি বিকল্প দেবেন, অন্যথায় আপনি কেবল প্রস্থান করতে পারেন। সমস্ত স্টাফ যাইহোক vnstats ডাটাবেসে সংরক্ষণ করা হয়।


পোস্টের পুরানো অংশ (কিছু লোকের পক্ষে সহায়ক হতে পারে)

আপনি জিনোম-সময়সূচি পেতে পারেন, তারপরে আপনার কমান্ডের মধ্যে উদাহরণস্বরূপ vnstat -h রাখতে পারেন এবং আপনি যা যা পর্যবেক্ষণ করার চেষ্টা করছেন সেই সময়টিকে পুনরায় সেট করে। সম্ভবত খুব সহজ, তবে আশা করি অন্য কেউ আরও প্রসারিত করতে পারে।

অতিরিক্ত (সম্পাদনা): আমি vnstat খুব বেশি ব্যবহার করি নি, এজন্যই আমি আশা করছিলাম যে এই অংশে কেউ প্রসারিত হতে পারে তবে জিনোম-শিডিয়ুলের সাহায্যে আপনি দিনের নির্দিষ্ট অংশগুলির সময় কার্যকর করার জন্য একটি আদেশ নির্ধারণ করতে পারেন। সুতরাং ভেন্টস্যাট-টিআর-এল (ট্র্যাফিক স্যুইচ, লাইভ ট্র্যাফিক নিরীক্ষণ) ব্যবহার করে ট্র্যাফিক চলমান অবস্থায় দেখানো হত (যা আপনি জিনোম-শিডিয়ুলের মধ্যে নির্ধারণ করতে পারেন, তবে আপনাকে ম্যানুয়ালি Ctrl+ Cআউট করতে হবে ))

অন্যথায় আমি নিশ্চিত যে আপনি এটি একটি ফাইলের মধ্যে পাইপ করতে পারেন, বা যদি আপনার কাছে থাকে তবে vnstat এর জন্য গ্রাফিকাল আউটপুট প্রোগ্রামটি ব্যবহার করতে পারেন। গ্রাফিকাল আউটপুট প্রোগ্রাম vnstati -i 'filename'এটি পিএনজি ফাইল আউটপুট হবে। আপনি যদি আরও কমান্ড চান তবে vnstat --longhelপি-তে আরও কমান্ড রয়েছে।

স্ক্রিনশট

(কীভাবে জিনিসগুলি জিনোম-শিডিউলে রাখা যায় তার নমুনার পর্দা))

আপনি কি জানেন কীভাবে ইতিমধ্যে vnstat ব্যবহার করে ব্যান্ডউইথের একটি 'স্ন্যাপশট' পাবেন, বা আপনাকে এই আদেশগুলি সম্পর্কে আরও সহায়তা দরকার? আমি প্রোগ্রামের সাথে আরও কাজ করার চেষ্টা করতে পারি।


আমাকে সর্বদা সম্পর্কিত স্টাফ কেন জিজ্ঞাসা করা দরকার ... আমি চাই যে এটি নিয়মিতভাবে নেটওয়ার্কের ব্যবহারের উপর নজরদারি করে এবং অন-পিক আওয়ার এবং অফ-পিক আওয়ারের জন্য আলাদাভাবে ডেটা দেখায় ... আমি যখনই উভয় ডেটা দেখতে চাই আমি চাই. তদুপরি, এই পাইথন প্রোগ্রামে বেশ কয়েকটি ইন্ডেন্টেশন বাগ রয়েছে ... (আপনি যদি এর মধ্যে না করেন তবে আমি সেগুলি সাফ করার চেষ্টা করব) ...
আদিত্য

হ্যাঁ ইন্ডেন্টগুলি ফোরামে গোলমাল হয়ে যায়, আমাকে প্রতিটি জিনিস দিয়েই চালাতে হবে এবং স্পেস যোগ করতে হবে, এটির জন্য দুঃখিত। আমি অনুমান করি এমন কোথাও পাই প্রোগ্রামটি পোস্ট করতে পারি। আমাকে এর জন্য ডাটাবেসগুলিও দেখে নেওয়া যাক।
সময় নেই

@ আদিত্য, আমি স্ক্রিপ্ট থেকে আপনার ত্রুটির বার্তাটি টোটাই দিয়ে দেখেছি। আপনাকে সম্ভবত এটি sudo / root হিসাবে চালাতে হবে যেহেতু যে ফাইলগুলিতে অ্যাক্সেস / সরানো হচ্ছে সেগুলি সাধারণত ব্যবহারকারী স্তরের অনুমতি নেই। টোটির স্ক্রিপ্টটি আমি আরও পরীক্ষা করে দেখব তবে এটি আমাকে ভাল আউটপুট দিচ্ছে কিনা তা দেখার জন্য আমি সময় বাছাই করতে পারি না (বা এখনই একটি পরীক্ষা করব)। আমার এটি প্রায় 8 ঘন্টা চালানো দরকার, এবং সত্যিই এত দিন অপেক্ষা করতে চাই না। আমি শেল স্ক্রিপ্ট ঠিক করতে যথেষ্ট জানি না। আপনি যদি এটি পরিবর্তন করতে পারতেন তবে এটি কাজ করে কিনা তা দেখার মতো কঠিন সময় নির্ধারণ করা হয়নি, এটি দুর্দান্ত। (আমার কাছে কোনও প্রতিনিধি নেই আমি অন্য পিপিএল এর স্টাফ নিয়ে মন্তব্য করতে পারি না)
সময় নেই

@ টট্টি সম্ভবত কোনও ভেরিয়েবল / ব্যবহারকারীর ইনপুট সময় যুক্ত করতে পারে?
সময় নেই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.