七12、告警系统邮件引擎、运行告警系统

七12、告警系统邮件引擎、运行告警系统linux

1、告警系统邮件引擎git

mail.sh内容     //其中mail.py内容到这里下载https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.pybash

邮件要有一个mail.py,以前用到过:服务器

[root@MRX shares]# cp /usr/lib/zabbix/alertscripts/mail.py ../mail/mail.pyide

mail.py的内容不需关注,spa

gserver = 'smtp.163.com'  //发邮件的服务器域名.net

mail.sh内容      路径:/usr/local/sbin/mon/mail/mail.sh调试

  log=$1       日志

t_s=`date +%s`server

t_s2=`date -d "2 hours ago" +%s`   #这两个t_s是时间戳,时间戳和两小时前的时间戳

if [ ! -f /tmp/$log ]       #运行监控脚本时就会生成监控日志,日志名字是ip地址下划线+监控项目

then

   echo $t_s2 > /tmp/$log  #判断日志是否存在,不存在就记录两小时前的时间戳的日志

fi

t_s2=`tail -1 /tmp/$log|awk '{print $1}'`

echo $t_s>>/tmp/$log

v=$[$t_s-$t_s2]        #两个时间戳的比值差,经过上一次告警和这一次告警的时间戳比值来计算, 而后决定是否告警。

echo $v

if [ $v -gt 3600 ]   #若是大于3600秒了,就告警。

then

   ./mail.py  $1  $2  $3    #大于3600,直接执行mail.py告警。

   echo "0" > /tmp/$log.txt   #在前面日志名字的基础上加一个.txt,叫计数器的文件。

else

   if [ ! -f /tmp/$log.txt ]   #反之,若是小于3600,判断,若是这个计数器文件不存在。

   then

       echo "0" > /tmp/$log.txt    #而后echo 0到计数器文件。

   fi

   nu=`cat /tmp/$log.txt`    #定义新变量,查看计数器里的数字,若是计数器文件不存在,nu就等于0了

   nu2=$[$nu+1]               #原变量基础上+1。

   echo $nu2>/tmp/$log.txt

   if [ $nu2 -gt 10 ]        #当变量大于10之后,才告警。就是告警到第10分钟了,这个变量+1=11,就开始告警了,发完邮件,文件又清空了,又从头再来。持续十分钟,十分钟后继续发邮件。

   then

        ./mail.py  $1 "trouble continue 10 min $2" "$3"

        echo "0" > /tmp/$log.txt  #告警完后,从新计数,又变为0

   fi

fi  


场景:监控502,告警了两分钟,第三分钟好了,业务恢复时间持续了一个小时(3600s),超过一个小时之后又发现了异常,这时候就会直接发一封邮件,由于大于3600了,而后清空计数器。10分钟之内连续发告警,而后就去收敛,哪怕10分钟之内不连续告警,每隔一两分钟都须要去收敛。

核心:周期,十分钟。

3600秒为一个周期;计数器,10分钟计数,连续十分钟,就告警,十分钟之内,就不告警。

mail.sh的目的是为了作告警收敛

概括:

场景一:没有超过一小时,不告警。

场景二:超过一小时,告警。

场景三:连续告警十分钟,就发邮件,要么就是不到十分钟正常了一小时又不正常了,就直接告警发邮件。


2、运行告警系统

总结:

执行告警系统:每分钟一次

# crontab -e

* * * * * cd /usr/local/sbin/mon/bin; bash main.sh

加入这一条,否则没有办法正常的执行成功。

# sh -x main.sh    能够执行这条看过程。

502的脚本若是不能执行的话,能够不监控,在mon.conf里面讲502开关关闭:to_mon_502=1,改成0。

在调试时,将main.sh中的这一步先注释掉:

exec 1>>../log/mon.log 2>>../log/err.log

先不将日志写进去。

mail.py发送文件的内容:

/bin/bash ../mail/mail.sh aaa@163.com "$addr\_load:$load" `cat ../log/load.tmp`

把文件的内容做为第三个参数。

相关文章
相关标签/搜索