CentOS7服务器(监测CPU,内存,磁盘,nginx,php服务)监控+邮件告警脚本
1、安装mailx
通过yum安装
postfix的产生是为了替代传统的sendmail.相较于sendmail,postfix在速度。性能和稳定性上都更胜一筹,由于linux中自带了postfix,为了postfix和sendmail两者间不产生冲突,需要切换MTA(mail transter agent,即邮件传输代理),禁用postfix,执行如下命令
alternatives --config mta //请按 2
显示内容如下
There are 2 programs which provide ‘mta’. //共有 2 个提供“mta”的程序。
开启sendmail服务,设置开机自启,并禁用postfix服务
systemctl start sendmail systemctl enable sendmail systemctl mask postfix
yum install -y mailx
vi /etc/mail.rc
在mail.rc中加入如下配置
set from=username@126.com
set smtp=smtp.126.com
set smtp-auth-user=username@126.com
set smtp-auth-password=password
set smtp-auth=login
注意配置中的smtp-auth-password不是邮箱登录密码,是邮箱服务器开启smtp的授权码,每个邮箱开启授权码操作不同(网易126邮箱开启菜单:设置-> 客户端授权密码)。
**
测试邮箱发送是否成功
echo “邮件内容”|mail -s 标题 邮箱号
1
如果可以收到邮件,说明mailx配置成功
2、配置免密登录(本机测试的话,红字可以不用)
ssh-keygen
生成到默认目录(一路按回车键): ~/.ssh/
免密登陆:
ssh-copy-id -i .ssh/id_rsa.pub root@需要免密到的机器IP
3、创建脚本
创建脚本文件
vim watch.sh
添加监控脚本
#!/bin/bash date=$(date "+%Y-%m-%d %H:%M:%S") #磁盘监控 disk_use=`ssh 172.xx.x.6 'df -h' | grep "/dev/sda1" | awk '{printf $5}' | cut -d '%' -f 1` if [ $disk_use -ge 85 ];then echo "172.xx.x.6 在$date 磁盘使用: $disk_use%" | mail -v -s "磁盘告警" xxxx@qq.com fi #cpu监控 cpu_average=`ssh 172.xx.x.6 'top -b -n 1' | grep "load" | awk '{printf $10 $11 $12}'` cpu_use=`ssh 172.xx.x.6'top -b -n 1' | grep "Cpu" | awk '{printf $2}' | cut -d "." -f 1` if [ $cpu_use -ge 80 ];then echo "172.xx.x.6在$date CPU 使用:$cpu_use%" | mail -v -s "172.xx.x.6CPU告警" xxxx@qq.com fi #内存监控 men_use=`ssh 172.xx.x.6 'free' | awk '/Mem/{printf("%.2f\n"), $3/$2*100}' | cut -d "." -f 1` if [ $men_use -ge 80 ];then echo "172.xx.x.6在$date 内存使用: $men_use%" | mail -v -s "172.xx.x.6内存告警" xxxx@qq.com fi #检测nginx服务 nginx=`ssh 172.xx.x.6 'ps -ef' | grep nginx | grep -v "grep" | wc -l` if [ $nginx -eq 0 ]; then echo "172.xx.x.6在$date 系统检测到nginx,已挂掉,启动中...." | mail -v -s "172.xx.x.6 nginx服务告警" xxxx@qq.com /etc/init.d/nginx start #启动nginx命令 echo "172.xx.x.6在$date nginx启动完成" | mail -v -s "172.xx.x.6nginx服务告警" xxxx@qq.com #else # echo "172.xx.x.6在$date 系统检测到nginx运行正常" | mail -v -s "172.xx.x.6nginx服务告警" xxxx@qq.com fi #检测php服务 php=`ssh 172.xx.x.6'ps -ef' | grep php | grep -v "grep" | wc -l` if [ $php -eq 0 ]; then echo "172.xx.x.6在$date 系统检测到php已挂掉,启动中...." | mail -v -s "172.xx.x.6 php服务告警" xxxx@qq.com /etc/init.d/php-fpm7.1 start #启动php服务 echo "172.xx.x.6在$date php启动完成" | mail -v -s "172.xx.x.6php服务告警" xxxx@qq.com fi
还有另外脚本不需要ssh登录
#!/bin/bash date=`date +%Y-%m-%d.%H:%M` #磁盘监控 disk_use=`df -h | grep "/dev/sda1" | awk '{printf $5}' | cut -d '%' -f 1` if [ $disk_use -le 90 ];then echo -e "127.0.0.1: $ip \n时间: $date \n磁盘使用率为: $disk_use%" | mail -v -s "警告!!!" xxxx@qq.com fi #cpu监控 cpu_average=`top -b -n 1 | grep "load" | awk '{printf $10 $11 $12}'` cpu_use=`top -b -n 1 | grep "Cpu" | awk '{printf $2}' | cut -d "." -f 1` if [ $cpu_use -ge 80 ];then echo -e "服务器IP地址 :$ip \n时间: $date \nCPU 使用率为: $cpu_use%" | mail -v -s "警告!!!" xxxx@qq.com fi #内存监控 men_use=`free | awk '/Mem/{printf("%.2f\n"), $3/$2*100}' | cut -d "." -f 1` if [ $men_use -ge 80 ];then echo -e "服务器IP地址: $ip \n时间: $date \n内存使用率为: $men_use%" | mail -v -s "警告!!!" xxxx@qq.com fi
4、设置crontab每隔20分执行一次
crontab -e
*/20 * * * * source /usr/local/server/watch.sh
其中判断语法
1、-gt:大于,greater than。
2、-eq:等于,equal。
3、-lt:小于,less than。
4、-ge:大于等于,greater than or equal。
5、-le:小于等于,less than or equal。
6、-ne:不等于,not equal。