代码为shell脚本,通过top和df命令,获取cpu、内存 、磁盘使用情况,配合sendEmail、php发送异常警告,并配置cron自动任务,达到监控的目的。
#!/bin/bash
#
Item=服务器硬件监控
#cpu占用率
Cpu=`top -b -n1 |fgrep "Cpu(s)" |tail -l | awk '{ print $2 }'`
#内存占用率
UsedMem=`top -b -n1 |fgrep "MiB Mem" |tail -l |awk '{ print $8 }'`
TotalMem=`top -b -n1 |fgrep "MiB Mem" |tail -l |awk ' ''{ print $4 }'`
BFBMem=$(printf "%.3f" `echo "scale=3;$UsedMem*100/$TotalMem"|bc`)
#磁盘占用率
TotalDisk=`df -m |sed -n '2,$p' |awk '{print $2}' |awk -F ":" '{sum+=$i}END{ print sum}'`
UsedDisk=`df -m |sed -n '2,$p' |awk '{print $3}' |awk -F ":" '{sum+=$i}END{ print sum}'`
DiskRate=$(printf "%.3f" `echo "scale=3;$UsedDisk*100/$TotalDisk"|bc`)
#获取当前月份、时间。
thisMonth=`date +%Y-%m`
now=`date +%F" "%T`
#是否异常标识
FLAG=FLASE
#检测
#cpu占用率大于80,判断为异常
if [ $(echo "$Cpu >= 80" |bc) -eq 1 ];then
FLAG=TRUE
#内存占用率大于80,判断为异常
elif [ `echo "$BFBMem >= 80" |bc` -eq 1 ];then
FLAG=TRUE
#磁盘占用率大于80,判断为异常
elif [ `echo "$DiskRate >= 80" |bc` -eq 1 ];then
FLAG=TRUE
fi
#根据标识判断当前为异常后
if [ $FLAG = TRUE ]; then
#邮件报警通知
/usr/bin/sendEmail -f fromEmail@domain.com -t ToEmail@domain.com -s smtp.exmail.qq.com:587 -u $Item '系统资源监控' -o message-content-type=html -o message-charset=utf8 -xu fromEmail@domain.com -xp 'my_password' -m "[Cpu占用] Cpu Used in $Cpu % <br> [内存占用] KiB Mem Used $BFBMem % <br> [硬盘占用] Disk Used $DiskRate %" -o tls=yes
#调用php短信通知接口
php -r 'include "/monitor/sendSms.php"; sendSms("硬件占用异常");'
#写入报警日志
echo "$now 硬件占用率异常" >> /var/log/monitor/alarm/$thisMonth.log
fi
#写入监控日志
echo "$now CPU:$Cpu% 内存:$BFBMem% 硬盘:$DiskRate%" >> /var/log/monitor/hardware/hardware/$thisMonth.log
sendemail -f [你的邮箱] -t [接收者的邮箱] -u "邮件主题" -m "邮件内容" -s [SMTP服务器地址] -xu [SMTP用户名] -xp [SMTP密码] -o tls=yes