需求分析
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 则重启网卡
五, 定时监测的实现
- [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---------------
来源: https://www.cnblogs.com/haozheyu/p/9932487.html