shell编程实战之如何监控网卡流量
建站服務器
這篇文章將為大家詳細講解有關shell編程實戰之如何監控網卡流量,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
最近客戶的網站出現卡慢現象,通過檢查,出問題是原因是因為帶寬吃緊,所以讓客戶將服務器帶寬從原本的2M增加到4M的帶寬,網站速度一下就提升了。那么如何監控網卡流量情況,linux有許多命令可以查看。比如iftop,sar等等。
這里,我想寫一個監控網卡流量情況的腳本。統計每一分鐘的網卡流量情況,輸入到指定文件中??梢允褂胹ar -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編程實戰之如何監控網卡流量就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
總結
以上是生活随笔為你收集整理的shell编程实战之如何监控网卡流量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux利用read命令获取变量中的值
- 下一篇: linux线程间的同步与互斥知识点总结