Shell應用之網絡卡流量監測
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是在多次統計後的平均值
[root@mail 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:15IFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s 21:33:16ens371.010.000.060.000.000.000.00 21:33:16lo0.000.000.000.000.000.000.00 21:33:16virbr0-nic0.000.000.000.000.000.000.00 21:33:16virbr00.000.000.000.000.000.000.00 21:33:16ens330.000.000.000.000.000.000.00 Average:IFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s Average:ens371.010.000.060.000.000.000.00 Average:lo0.000.000.000.000.000.000.00 Average:virbr0-nic0.000.000.000.000.000.000.00 Average:virbr00.000.000.000.000.000.000.00 Average:ens330.000.000.000.000.000.000.00
二、網絡卡的查詢和重啟
#>查詢的命令有 397ip a 398ifconfig 399nmcli device show #>網絡卡重啟 402ifdown ens37 && ifup ens37 405ifdown ens37 ; ifup ens37
網路網絡卡的配置路徑在
[root@mail sbin]# cd /etc/sysconfig/network-scripts/ 更改完配置記得重啟服務
三、抓包分析
通常網絡卡流量異常時都需要檢視分析,往往抓包就是最直觀的檢視方式
[root@mail 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則重啟網絡卡
五、定時監測的實現

image.png
[root@mail sbin]# crontab -e no crontab for root - using an empty one crontab: installing new crontab [root@mail sbin]# crontab -l 30 * * * * /bin/sh /usr/local/sbin/tp.sh
-------------END---------------