您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關shell編程實戰之如何監控網卡流量,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
最近客戶的網站出現卡慢現象,通過檢查,出問題是原因是因為帶寬吃緊,所以讓客戶將服務器帶寬從原本的2M增加到4M的帶寬,網站速度一下就提升了。那么如何監控網卡流量情況,linux有許多命令可以查看。比如iftop,sar等等。
這里,我想寫一個監控網卡流量情況的腳本。統計每一分鐘的網卡流量情況,輸入到指定文件中。可以使用sar -n DEV 1 59查看一分鐘內網卡平均流量。
此腳本的核心是獲取1分鐘內網卡的平均流量。我們來看看sar這個命令會輸出哪些信息吧。
# 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表示網卡每秒接受的字節數,rxkb/s表示每秒發送的字節數,他們的單位都是kb。我們待會要將它轉換為kbit/s,因為日常習慣用kbit/s表示網絡帶寬使用情況。
然后,我們需要過濾其他不需要的行,使用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
至此,我們已經獲取到了1分鐘內eth0網卡的平均輸入輸出流量了,該腳本的核心問題解決了。下面貼出完整的代碼:
#!/bin/bash # 監控網卡流量,并輸出到日志文件中 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 # 監控的網卡名稱 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分鐘內網卡流量就搞定了90%了。不過有點要注意,我服務器上的網卡名稱為eth0,你的可能名稱和我不一樣,所以如果你要使用該腳本,需要將所有的eth0改為你服務器上的網卡名。當然,可以將網卡名稱當做參數來傳遞給腳本,這里為了圖方便就沒有這么做了(主要原因是不想對輸入的網卡名做校驗)。
來驗證下此腳本是否能正常運行。執行該腳本后,查看下日志里的內容如下:
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
可以看到,此腳本能正常運行。
關于shell編程實戰之如何監控網卡流量就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。