开发系统监控脚本
企业环境说明
某公司随着业务的不断发展,所使用的Linux服务器也越来越多。管理员希望编写一个简单的性能监控脚本,放到各服务器中,当监控指标出现异常时发送告警邮件。
需求描述
编写名为sysmon.sh的shell监控脚本;
监控内容包括CPU使用率,内存使用率,根分区的磁盘占有率,百分比只需精确到个位;
出现磁盘占有率超过90%,CPU使用率超过80%,内存使用率超过90%等情况时,告警邮件通过mail命令发送到指定邮箱;
命令类型
分析:监控内容包括CPU使用率,内容使用率,根分区的磁盘占有率
df命令,awk命令,mpstat命令(需安装sysstat软件包),free命令
磁盘占用率
[root@client1 ~]# df -Th | grep '/$'
[root@client1 ~]# df -Th | grep '/$' | awk '{print $6}'
[root@client1 ~]# df -Th | grep '/$' | awk '{print $6}' | awk -F% '{print $1}'
[root@client1 ~]# disk=$(df -Th | grep '/$' | awk '{print $6}' | awk -F% '{print $1}')
CPU占有率
[root@client1 ~]# mpstat
[root@client1 ~]# mpstat | tail -1 | awk '{print $12}'
[root@client1 ~]# mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}
[root@client1 ~]# expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}')
[root@client1 ~]# CPU=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))
内存使用率
[root@client1 ~]# free -m
[root@client1 ~]# free -m | grep "Mem:" | awk '{print $7}'
[root@client1 ~]# free -m | grep "Mem:" | awk '{print $2}'
[root@client1 ~]# expr $(free -m | grep "Mem:" | awk '{print $7}') / $(free -m | grep "Mem:" | awk '{print $2}')
[root@client1 ~]# expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}')
内存使用率
mem=$(expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}'))
shell脚本编辑
[root@client1 ~]# rpm -qa mailx '查看是否安装相关软件包'
mailx-12.5-16.el7.x86_64
[root@client1 ~]# vi /etc/mail.rc
[root@client1 ~]# echo "123123" | mail -s "test" ***********@qq.com
set from=***********@qq.com '发送邮箱地址'
set smtp=smtp.qq.com '邮箱使用的smtp服务器的域名'
set smtp-auth-user=2231321708@qq.com 'smtp邮件发送时登录的账号'
set smtp-auth-password=........ '填写邮箱授权码'
set smtp-auth=login 'smtp的状态,登录状态'
[root@client1 ~]# vim sysmon.sh
#!/bin/bash
# 磁盘占有率超过90%,CPU使用率超过80%,内存使用率超过90%发送报警邮件
disk=$(df -Th | grep '/$' | awk '{print $6}' | awk -F% '{print $1}')
CPU=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))
mem=$(expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}'))
A=/root/alert.txt
B=***********@qq.com
if [ $disk -ge 90 ]
then echo "磁盘占有率超过90%" >> $A
fi
if [ $CPU -ge 80 ]
then echo "CPU使用率超过80%" >> $A
fi
if [ $mem -ge 90 ]
then echo "内存使用率超过90%" >> $A
fi
if [ -f $A ]
then
cat $A | mail -s "alert report" $B
rm -rf $A
fi
[root@client1 ~]# chmod +x sysmon.sh
[root@client1 ~]# ./sysmon.sh
硬件巡检,对cpu、内存、磁盘超过阈值报警 shell脚本编辑
vi /etc/mail.rc
# For Linux and BSD, this should be set.
set bsdcompat
set from=2231321708@qq.com '上面有解析'
set smtp=smtp.qq.com
set smtp-auth-user=2231321708@qq.com
set smtp-auth-password=ofuyhifjtxrsdidf
set smtp-auth=login
#!/bin/bash
# 硬件巡检,对cpu、内存、磁盘超过阈值报警
disk=$(df -Th | grep "/$" | awk '{print $6}' | awk -F% '{print $1}')
mem=$(expr $(free | grep "Mem:" | awk '{print $3}') \* 100 / $(free | grep "Mem:" | awk '{print $2}'))
cpu=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))
alert_file=/root/alert.txt
mailbox=2231321708@qq.com
if [ $disk -ge 10 ]
then echo "磁盘占有率超过85%" >> $alert_file
fi
if [ $mem -ge 5 ]
then echo "内存占有率超过90%" >> $alert_file
fi
if [ $cpu -ge 2 ]
then echo "cpu占有率超过90%" >> $alert_file
fi
if [ -f $alert_file ]
then
cat $alert_file | mail -s "alert report" $mailbox
rm -rf $alert_file
fi