服务监控+邮箱报警
网络环境:内网
系统版本:cs7
脚本要求:A服务器(192.168.0.1)开通邮件端口,可以向内部邮箱发送邮件
B服务器(192.168.0.2)上边有api服务,在监控同时,要将异常日志信息发到邮箱
环境模拟:B服务器(192.168.0.2)服务宕掉自动重启,重新信息输出到error.log;
通过expect把日志拷贝到A服务器(192.168.0.1),通过A服务器(192.168.0.1)将异常日志发送到邮箱
A服务器配置mail:
/etc/mail.rc 最后添加几行
1 set bsdcompat 2 set from=xx@xx.com 3 set smtp=smtp.xx.com 4 set smtp-auth-user=xx@xxc.com 5 set smtp-auth-password=xx 6 set smtp-auth=login
如果是用163邮箱
脚本:
B服务器(192.168.0.2):
1 vim info ,内容如下: 2 A主机ip 用户 密码 3 192.168.0.1 root 123456
Monitor_es.sh:
1 #!/bin/bash 2 3 #时间 4 t=`date +%Y-%m-%d-%H:%M` 5 6 #获取IP 7 n=`ifconfig eth0 |awk -F '[ :]+' 'NR==2{print $3}' ` 8 9 #获取进程 10 pid=`ps -ef |grep "elasticsearch"|grep -v grep` 11 12 #判断如果进程不存在 13 if [ $? -ne 0 ];then 14 15 #启动服务 16 /usr/local/elasticsearch-1.4.2/bin/elasticsearch start 17 18 #输出时间、IP、重新服务信息 到log里 19 echo "$t $n elasticsearch异常,服务已重启" > /home/user/es_192.168.0.2.log 20 21 #调用一个scp脚本,把log日志拷贝到邮箱服务器 22 sh /usr/local/scprit/scp_error_log.sh > /dev/null 23 24 #如果存在 25 else 26 27 #输出时间、IP、服务状态 到log里 28 echo "$t $n 服务运行正常" >> Monitor_es.log 29 30 fi
scp_error_log.sh:
1 #!/usr/bin/expect 2 for ip in `awk '{print $1}' /usr/local/scprit/info` 3 do 4 user=`awk -v I="$ip" '{if(I==$1)print $2}' /usr/local/scprit/info` 5 pass=`awk -v I="$ip" '{if(I==$1)print $3}' /usr/local/scprit/info` 6 expect -c " 7 spawn scp /home/user/es_192.168.0.2.log $user@$ip:/home/user 8 expect { 9 \"*assword\" {set timeout 60; send \"$pass\n\";} 10 \"yes/no\" {send \"yes\r\"; exp_continue;} 11 } 12 expect eof" 13 done
A服务器(192.168.0.1):
Sendmail.sh:
1 #!/bin/bash 2 3 #时间 4 t=`date +%Y-%m-%d-%H:%M:%S` 5 6 #判断文件是否存在 7 if [ -f "/home/user/es_192.168.0.2.log" ];then 8 9 #存在的话,cat内容,发报警到邮箱 10 cat /home/user/es_192.168.0.2.log |mailx -v -s "服务状态报告$(date +%Y-%m-%d-%H)" xxx@163.com 11 12 #判断mail命令是否成功 13 if [ $? -ne 0 ]; then 14 15 #失败的话,输出错误日志到mail.log 16 echo "$t Failure to send alarm" >> mail.log 17 18 else 19 20 #发送成功,输出成功日志到mail.log,并删除原始文件 21 echo "$t Send an alarm successfully, delete the original file" >> mail.log 22 23 rm -rf /home/user/es_192.168.0.2.log >> mail.log 24 25 fi 26 27 else 28 29 #如果该文件不存在,在日志中输出文件不存在 30 echo "$t Failure log not detected, no mail alarm " >> mail.log 31 32 fi
最后根据自己需要,做计划任务