Shell應用之網絡卡流量監測
阿新 • • 發佈:2018-11-08
需求分析
1)按固定時間監測一次網絡卡流量
2)當網絡卡流量為0時重啟網絡卡
一、網絡卡流量查詢
sar(System ActivityReporter系統活動情況報告)是目前Linux上最為全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告,包括:檔案的讀寫情況、系統呼叫的使用情況、磁碟I/O、CPU效率、記憶體使用狀況、程序活動及IPC有關的活動等,sar命令有sysstat安裝包安裝。
這裡我們利用sar 命令中的網路監控功能
sar -n #統計網路資訊
sar -n選項使用6個不同的選項:DEV,EDEV,NFS,NFSD,SOCK,IP,EIP,ICMP,EICMP,TCP,ETCP,UDP,SOCK6,IP6,EIP6,ICMP6,EICMP6和UDP6 ,DEV顯示網路介面資訊,EDEV顯示關於網路錯誤的統計資料,NFS統計活動的NFS客戶端的資訊,NFSD統計NFS伺服器的資訊,SOCK顯示套接字資訊,ALL顯示所有5個開關。它們可以單獨或者一起使用。
sar -n DEV 1 1: 每間隔1秒統計一次,總計統計1次,其中的average是在多次統計後的平均值
[[email protected] sbin]# sar -n DEV 1 1 Linux 3.10.0-862.el7.x86_64 (mail.rhcc.com) 11/08/18 _x86_64_ (1 CPU) 21:33:15 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 21:33:16 ens37 1.01 0.00 0.06 0.00 0.00 0.00 0.00 21:33:16 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21:33:16 virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21:33:16 virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21:33:16 ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: ens37 1.01 0.00 0.06 0.00 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: virbr0-nic 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: virbr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00
二、網絡卡的查詢和重啟
#>查詢的命令有
397 ip a
398 ifconfig
399 nmcli device show
#>網絡卡重啟
402 ifdown ens37 && ifup ens37
405 ifdown ens37 ; ifup ens37
網路網絡卡的配置路徑在
[[email protected] sbin]# cd /etc/sysconfig/network-scripts/
更改完配置記得重啟服務
三、抓包分析
通常網絡卡流量異常時都需要檢視分析,往往抓包就是最直觀的檢視方式
[ [email protected] network-scripts]# tcpdump -nn -i ens37 -c 100
>加上-w 引數可以將抓取的內容儲存到固定的.cap檔案中,這個檔案是可以用
Windows的wireshark工具檢視的,同樣tcpdump -r *.cap 也可以檢視。
四、案例分析
#!/bin/bash
LANG=C #>設定英文的的環境
if [ ! rpm -q sysstat &> /dev/null ]
then
yum install -y sysstat
fi #>判斷sar是否可執行
sar -n DEV 1 10 |grep 'ens37' > /tmp/ens37_sar.log #>監測網絡卡流量重定向
net_in=`grep '^Average:' /tmp/ens37_sar.log|awk '{print $5}'` #>分析入流量
net_out=`grep '^Average:' /tmp/ens37_sar.log|awk '{print $6}'` #>分析出流量
if [ $net_in == "0" -a $net_out == "0" ]
then
echo "`date` ens37 Flow anomaly" >> /tmp/net.log
ifdown ens37 && ifup ens37
fi #>判斷出入的流量是否為0 ,為0則重啟網絡卡
五、定時監測的實現
[[email protected] sbin]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[[email protected] sbin]# crontab -l
30 * * * * /bin/sh /usr/local/sbin/tp.sh
-------------END---------------