আমার বর্তমান নেটওয়ার্ক ব্যবহার কীভাবে নির্ধারণ করা উচিত?


9

আমি একটি ওয়েবসাইটে একটি ডেবিয়ান বাক্সের একটি ইন্টারফেসের বর্তমান নেটওয়ার্ক ব্যবহার (ব্যান্ডউইথ ব্যবহার) প্রদর্শন করতে চাই। এটি খুব বিস্তৃত বা সুনির্দিষ্ট হওয়ার কথা নয়, কেবল একটি সরল সংখ্যা যেমন "52 এমবিট / এস"।

সাধারণ নেটওয়ার্ক ব্যান্ডউইথ মনিটর যেমন iftopআমাকে কেবল এ জাতীয় মান বের করার কোনও উপায় দেয় না।

আমি কীভাবে এটি সর্বোত্তমভাবে পুনরুদ্ধার করতে পারি?

উদাহরণস্বরূপ, আমার ধারণা আমি /proc/net/devপ্রতি কয়েক মিনিটে পার্স করতে পারি । যদিও এটি করার সর্বোত্তম উপায় এটি নিশ্চিত নয়।

উত্তর:


10

আমি মনে করি ইফস্ট্যাট আপনাকে সহায়তা করবে:

[রুট @ লোকালহোস্ট ~] # ইফস্ট্যাট -i এথ0-কিউ 1 1
       eth0 এর
 কেবি / স কেবি / এস আউট
 3390.26 69.69

7

এটি সহজভাবে করার সর্বোত্তম উপায়টি সম্ভবত পার্স করা /proc/net/dev(সতর্কতা অবলম্বন করুন যা /procপোর্টেবল নয়)। এখানে একটি bashস্ক্রিপ্ট আমি দ্রুত একসাথে রেখেছি যা এটি গণনা করতে সক্ষম হবে:

#!/bin/bash

_die() {
    printf '%s\n' "$@"
    exit 1
}

_interface=$1

[[ ${_interface} ]] || _die 'Usage: ifspeed [interface]'
grep -q "^ *${_interface}:" /proc/net/dev || _die "Interface ${_interface} not found in /proc/net/dev"

_interface_bytes_in_old=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { sub(/^.*:/, "") ; print $1 } else { print $2 } }' /proc/net/dev)
_interface_bytes_out_old=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { print $9 } else { print $10 } }' /proc/net/dev)

while sleep 1; do
    _interface_bytes_in_new=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { sub(/^.*:/, "") ; print $1 } else { print $2 } }' /proc/net/dev)
    _interface_bytes_out_new=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { print $9 } else { print $10 } }' /proc/net/dev)

    printf '%s: %s\n' 'Bytes in/sec'  "$(( _interface_bytes_in_new - _interface_bytes_in_old ))" \
                      'Bytes out/sec' "$(( _interface_bytes_out_new - _interface_bytes_out_old ))"

    # printf '%s: %s\n' 'Kilobytes in/sec'  "$(( ( _interface_bytes_in_new - _interface_bytes_in_old ) / 1024 ))" \
    #                   'Kilobytes out/sec' "$(( ( _interface_bytes_out_new - _interface_bytes_out_old ) / 1024 ))"

    # printf '%s: %s\n' 'Megabits in/sec'  "$(( ( _interface_bytes_in_new - _interface_bytes_in_old ) / 131072 ))" \
    #                   'Megabits out/sec' "$(( ( _interface_bytes_out_new - _interface_bytes_out_old ) / 131072 ))"

    _interface_bytes_in_old=${_interface_bytes_in_new}
    _interface_bytes_out_old=${_interface_bytes_out_new}
done

মনে রাখবেন যে sleepসময় লুপের সময় অপারেশনগুলি করতে যে পরিমাণ সময় লাগে তা বিবেচনা করে না, সুতরাং এটি (খুব সামান্য) ভুল। আমার 600mhz কপারমাইনে, লুপটি 0.011 সেকেন্ড নেয় - বেশিরভাগ কাজের জন্য একটি নগন্য অযোগ্যতা। (মন্তব্য করা) কিলোবাইট / মেগাবাইট আউটপুট ব্যবহার করার সময়ও মনে রাখবেন, ব্যাশ কেবল পূর্ণসংখ্যার গাণিতিক বোঝে।


আমি মনে করি এটিই নির্বাচিত উত্তর হওয়া উচিত। /proc/net/devএই যাদু কী ঘটে এবং কীভাবে হয় তা না বুঝে পর্দার আড়ালে, পার্সিংয়ের সময়, প্রতিটি অন্যান্য সমাধান রিলে করে ।
ইরান

এই সমাধানটি আমার জন্য রাউটার / ব্যস্তবক্সে কাজ করেছে।
ক্লোনম্যান

ব্যবহারের date +%s.%Nপ্রতি পুনরাবৃত্তির UNIX টাইমস্ট্যাম্প পেতে এবং টাইমস্ট্যাম্প পার্থক্য দ্বারা বাইট পার্থক্য বিভক্ত করতে। তারপরে আপনি লুপ পুনরাবৃত্তির সমস্যাটি 1 এর চেয়ে বেশি হওয়া এড়াতে পারেন।
আর্নভিওন

3

Vnstat এর মতো নেটওয়ার্ক ট্র্যাফিক মনিটর রয়েছে যা আপনার ট্র্যাফিকের মাসিক রেকর্ড রাখে, বা স্লর্ম যা কার্নেলের মধ্যে থাকা সঞ্চয়কারীদের থেকে সরাসরি এটির মান নেয়। এটি বেশিরভাগ ডিস্ট্রো স্টোরে পাওয়া যায়।

আমি দৌড়ানোর সময় আমি যা দেখতে পাই তা এখানে slurm -i ra0:

এখানে চিত্র বর্ণনা লিখুন


1

এটি গণনা করার জন্য এখানে একটি খুব সাধারণ শেল স্ক্রিপ্ট রয়েছে:

#!/bin/sh

dev=$1

grep -q "^$dev:" /proc/net/dev || exec echo "$dev: no such device"

read rx <"/sys/class/net/$dev/statistics/rx_bytes"
read tx <"/sys/class/net/$dev/statistics/tx_bytes"

while sleep 1; do
    read newrx <"/sys/class/net/$dev/statistics/rx_bytes"
    read newtx <"/sys/class/net/$dev/statistics/tx_bytes"

    # convert bytes to kbit/s: bytes * 8 / 1000 => bytes / 125
    echo "$dev  {rx: $(((newrx-rx) / 125)), tx: $(((newtx-tx) / 125))}"

    rx=$newrx
    tx=$newtx
done

ইন্টারফেসের নামটি পাস করার সাথে সাথে স্ক্রিপ্টটি শুরু করুন, যেমন। ./shtraf eth1


1
আপনি এই একটু ব্যাখ্যা করতে পারেন? ঠিক পরামিতিটি কী হওয়া উচিত? এর তাৎপর্য কী 125? মন্তব্যে প্রতিক্রিয়া জানাতে দয়া করে; আপনার উত্তরটি আরও পরিষ্কার এবং আরও পরিপূর্ণ করতে সম্পাদনা করুন।
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.