您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)shell編程實(shí)戰(zhàn)之如何監(jiān)控網(wǎng)卡流量,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
最近客戶的網(wǎng)站出現(xiàn)卡慢現(xiàn)象,通過檢查,出問題是原因是因?yàn)閹挸跃o,所以讓客戶將服務(wù)器帶寬從原本的2M增加到4M的帶寬,網(wǎng)站速度一下就提升了。那么如何監(jiān)控網(wǎng)卡流量情況,linux有許多命令可以查看。比如iftop,sar等等。
這里,我想寫一個(gè)監(jiān)控網(wǎng)卡流量情況的腳本。統(tǒng)計(jì)每一分鐘的網(wǎng)卡流量情況,輸入到指定文件中??梢允褂胹ar -n DEV 1 59查看一分鐘內(nèi)網(wǎng)卡平均流量。
此腳本的核心是獲取1分鐘內(nèi)網(wǎng)卡的平均流量。我們來看看sar這個(gè)命令會(huì)輸出哪些信息吧。
# sar -n DEV 1 59 Linux 4.18.0-80.11.2.el8_0.x86_64 (30gk.com) 09/20/2020 _x86_64_ (4 CPU) 11:25:25 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 11:25:26 AM eth0 16.00 11.00 1.26 1.38 0.00 0.00 0.00 0.00 11:25:26 AM lo 12.00 12.00 4.77 4.77 0.00 0.00 0.00 0.00 11:25:26 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 11:25:27 AM eth0 18.00 23.00 2.98 28.85 0.00 0.00 0.00 0.00 11:25:27 AM lo 12.00 12.00 4.77 4.77 0.00 0.00 0.00 0.00 …… Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil Average: eth0 8.56 12.59 1.07 7.05 0.00 0.00 0.00 0.00 Average: lo 12.20 12.20 4.79 4.79 0.00 0.00 0.00 0.00
我們需要的信息是AVERAGE: eth0這行。rxkb/s表示網(wǎng)卡每秒接受的字節(jié)數(shù),rxkb/s表示每秒發(fā)送的字節(jié)數(shù),他們的單位都是kb。我們待會(huì)要將它轉(zhuǎn)換為kbit/s,因?yàn)槿粘A?xí)慣用kbit/s表示網(wǎng)絡(luò)帶寬使用情況。
然后,我們需要過濾其他不需要的行,使用grep命令可以輕松辦到。首先grep過濾掉所有不含Average的行,然后過濾不含eth0的行。
# sar -n DEV 1 59 | grep -i average | grep eth0 Average: eth0 7.44 7.00 0.83 6.72 0.00 0.00 0.00 0.00
然后,使用awk命令過濾掉不需要的列,我們只需要第5列以及第6列信息;
# sar -n DEV 1 4 | grep -i average | grep eth0 | awk '{print $5*8"\t"$6*8}' 28.32 182.96
至此,我們已經(jīng)獲取到了1分鐘內(nèi)eth0網(wǎng)卡的平均輸入輸出流量了,該腳本的核心問題解決了。下面貼出完整的代碼:
#!/bin/bash # 監(jiān)控網(wǎng)卡流量,并輸出到日志文件中 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin export LANG=en # 日志存放目錄 PATH_DIR=/root/netdatas/`date +%F` # 日志文件名稱 FILE_NAME=`date +%F`.log # 監(jiān)控的網(wǎng)卡名稱 NET_NAME=eth0 [ -d PATH_DIR ] || mkdir -p $PATH_DIR while [ 1 ];do date +"%H:%M" >> $PATH_DIR/$FILE_NAME netinfo=$(sar -n DEV 1 59 | grep -i average | grep $NET_NAME | \ awk '{print $5*8":"$6*8}' ) echo "$NET_NAME input:$(echo $netinfo | cut -d: -f1)kbit/s" >> $PATH_DIR/$FILE_NAME echo "$NET_NAME output:$(echo $netinfo | cut -d: -f2)kbit/s" >> $PATH_DIR/$FILE_NAME echo '#########################' >> $PATH_DIR/$FILE_NAME done
該腳本的編寫非常的簡單,搞清楚了如何獲取1分鐘內(nèi)網(wǎng)卡流量就搞定了90%了。不過有點(diǎn)要注意,我服務(wù)器上的網(wǎng)卡名稱為eth0,你的可能名稱和我不一樣,所以如果你要使用該腳本,需要將所有的eth0改為你服務(wù)器上的網(wǎng)卡名。當(dāng)然,可以將網(wǎng)卡名稱當(dāng)做參數(shù)來傳遞給腳本,這里為了圖方便就沒有這么做了(主要原因是不想對輸入的網(wǎng)卡名做校驗(yàn))。
來驗(yàn)證下此腳本是否能正常運(yùn)行。執(zhí)行該腳本后,查看下日志里的內(nèi)容如下:
12:15 eth0 input:16.64kbit/s eth0 output:16.72kbit/s ######################### 12:16 eth0 input:16.72kbit/s eth0 output:17.12kbit/s ######################### 12:17 eth0 input:17.92kbit/s eth0 output:17.6kbit/s
可以看到,此腳本能正常運(yùn)行。
關(guān)于shell編程實(shí)戰(zhàn)之如何監(jiān)控網(wǎng)卡流量就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。