服务监控+邮箱报警

网络环境:内网

系统版本: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

 最后根据自己需要,做计划任务

posted on 2019-03-25 14:40  明.Sir  阅读(709)  评论(0编辑  收藏  举报

导航