【shell一天一练】监控网卡脚本,sar命令工具

144 阅读4分钟

今日小练题目📢

写一个监控网卡的脚本

1)每10分钟检测一次网卡ens33的流量

2)如果流量为0,则重启网卡

优秀作业🤌🏻

#!/bin/bash
#author:xYLiuuuuuu
#date:2024-12-29

LANG=en

if ! which sar &>/dev/null
then
        echo "没有sar命令,使用apt安装"
        apt install sysstat &> /dev/null || (echo "sar命令无法安装";exit 1)
fi

sar -n DEV 1 60 |grep ens33 > /tmp/ens33.log

n1=`grep -i average /tmp/ens33.log |awk '{print $5}'|sed 's/\.//g'`
n2=`grep -i average /tmp/ens33.log |awk '{print $6}'|sed 's/\.//g'`

rm -f /tmp/ens33.log

if [ $n1 == "000" ] && [ $n2 == "000" ]
then
        echo "网卡ens33有问题,需要重启网卡"
        ifdown ens33 && ifup ens33
fi

敲黑板📝

  • 以防万一匹配不到英文关键字,所以在脚本一开头设定语言为en。
  • sar命令无法安装的情况也要给出提示,而且要exit 1退出脚本。
  • sar命令是一个非常全面的分析工具,可以比较瑞士军刀,对文件的读写,系统调用的使用情况,磁盘IO,CPU相关使用情况,内存使用情况,进程活动等都可以进行有效的分析。
sar -u  #统计CPU的使用情况,每间隔1秒钟统计一次总共统计三次
[root@lgh ~]# sar -u 1 3
Linux 2.6.32-696.el6.x86_64 (lgh)   10/06/2019      _x86_64_        (32 CPU)

09:42:45 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
09:42:46 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
09:42:47 PM     all      0.03      0.00      0.03      0.00      0.00     99.94
09:42:48 PM     all      0.03      0.00      0.03      0.00      0.00     99.94
Average:        all      0.02      0.00      0.02      0.00      0.00     99.96

sar -q #查看平均负载:其中每间隔1秒钟统计一次总共统计三次
[root@lgh ~]# sar -q 1 3
Linux 2.6.32-696.el6.x86_64 (lgh)   10/06/2019      _x86_64_        (32 CPU)

09:58:39 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
09:58:40 PM         0      1535      0.00      0.03      0.00
09:58:41 PM         0      1535      0.00      0.03      0.00
09:58:42 PM         0      1535      0.00      0.03      0.00
Average:            0      1535      0.00      0.03      0.00

sar -r #查看内存使用情况,每间隔1秒钟统计一次总共统计三次
[root@lgh ~]# sar -r 1 3
Linux 2.6.32-696.el6.x86_64 (lgh)   10/06/2019      _x86_64_        (32 CPU)

10:01:15 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
10:01:16 PM 233550984  30597240     11.58    758212  20745900  14822388      5.44
10:01:17 PM 233550836  30597388     11.58    758212  20745900  14822388      5.44
10:01:18 PM 233551972  30596252     11.58    758212  20745900  14822388      5.44
Average:    233551264  30596960     11.58    758212  20745900  14822388      5.44


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个开关。它们可以单独或者一起使用。  
1.10.1:sar -n DEV 1 1: 每间隔1秒统计一次,总计统计1次,下面的average是在多次统计后的平均值  
#IFACE 本地网卡接口的名称  
#rxpck/s 每秒钟接受的数据包  
#txpck/s 每秒钟发送的数据库  
#rxKB/S 每秒钟接受的数据包大小,单位为KB  
#txKB/S 每秒钟发送的数据包大小,单位为KB  
#rxcmp/s 每秒钟接受的压缩数据包  
#txcmp/s 每秒钟发送的压缩包  
#rxmcst/s 每秒钟接收的多播数据包

[root@lgh ~]# sar -n DEV 1 1
Linux 2.6.32-696.el6.x86_64 (lgh)   10/06/2019      _x86_64_        (32 CPU)

10:13:52 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
10:13:53 PM        lo     16.00     16.00      1.86      1.86      0.00      0.00      0.00
10:13:53 PM      eth0    132.00     25.00     14.28      2.34      0.00      0.00      0.00
10:13:53 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10:13:53 PM      eth2      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10:13:53 PM      eth3      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:           lo     16.00     16.00      1.86      1.86      0.00      0.00      0.00
Average:         eth0    132.00     25.00     14.28      2.34      0.00      0.00      0.00
Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth2      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth3      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • 使用临时文件可以给我们带来很大便利,但不要忘记在脚本结束时删除。
  • 用 if which xxx 来判断某个命令在不在。
  • 使用 || 或者 && 时,可以用()将多条命令作为一个整体。
  • ifdown 命令用来停用系统上指定的网卡,而 ifup 命令用来启动系统上指定的网卡。