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: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 ``` 网络网卡的配置路径在 ``` [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](https://upload-images.jianshu.io/upload_images/12765605-9e567dacacae1eec.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/520) ``` [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---------------
posted @ 2018-11-08 22:29 小短腿电工 阅读(...) 评论(...) 编辑 收藏