实验案例:使用Shell脚本监控主机
实验环境
某公司随着业务的不断发展,所使用的Linux服务器也越来越多,管理员希望编写一个简单的性 能监控脚本,放到各服务器中,当监控指标出现异常时发送告警邮件。
需求描述
>编写名为sysmon.sh的Shell监控脚本.
>监控内容包括CPU使用率,内存使用率、根分区的磁盘占用率。
>百分比只需精确到个位,如7%.12%、23%等。
>出现以下任一情况时告警:磁盘占用率超过90%.CPU使用率超过80%.内存使用率超过 90%.
>告警邮件通过mail命令发送到monitor@bdqn.com.
>结合crond 服务,每半小时执行一次监控脚本。
操作步骤
expr 100 - $(mpstat | awk '{print $12}' | awk -F. '{print $1}' | tail -1)
查看CPU使用率
expr $(free | grep "Mem:" | awk '{print $3}') \* 100 / $(free | grep "Mem:" | awk '{print $2}')
查看内存使用率
df -hT | grep "/$" | awk '{print $6}' | awk -F% '{print $1}'
查看根分区的磁盘占用率
编写sysmon.sh脚本
[root@lgcllc ~]# vim sysmon.sh //编辑监控脚本
#!/bin/bash
#监控CPU
CPU=$(expr 100 - $(mpstat | awk '{print $12}' | awk -F. '{print $1}' | tail -1) )
echo "CPU使用率:$CPU %"
#监控内存
MEM=$(expr $(free | grep "Mem:" | awk '{print $3}') \* 100 / $(free | grep "Mem:" | awk '{print $2}') )
echo "内存使用率:$MEM %"
#监控磁盘
DUG=$(df -hT | grep "/$" | awk '{print $6}' | awk -F% '{print $1}')
echo "磁盘占用率:$DUG %"
#设置警告日志文件,告警邮箱
#日志文件的变量
ALOG="/mnt/alert.txt"
#发送到邮箱的变量
AMAIL="root"
#判断是否记录告警邮箱
if [ $CPU -ge 80 ]
then
echo "CPU使用率:$CPU %" >> $ALOG
fi
if [ $MEM -ge 90 ]
then
echo "内存使用率:$MEM %" >> $ALOG
fi
编辑好sysmon.sh脚本如图:
添加可执行权限:
[root@lgcllc ~]# chmod +x sysmon.sh
加入crond服务
[root@lgcllc ~]# crontab -e //编写脚本 每半小时执行一次监控脚本
30 * * * * /root/sysmon.sh