告警系统邮件引擎由两个文件组成,放在/mon/mail/目录下:mail.py、mail.shpython
mail.py:是邮件的核心python脚本,邮件功能的实现 mail.sh:是告警邮件系统的shell脚本,实现了邮件收敛的功能,里面调用了mail.py脚本发送邮件的操做。
mail.sh:邮件收敛即同一监控项目告警,每一小时shell
log=$1 //第一个参数$1:是收件人邮箱 t_s=`date +%s` //告警触发时间的时间戳 t_s2=`date -d "2 hours ago" +%s` //告警触发时间的前2个小时的时间戳,第一次产生告警时,用做来对比时间差值 if [ ! -f /tmp/$log ] //记录时间戳的文件 不存在 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 ] //若是两次告警间隔了1小时或以上了(或第一次运行脚本),才会进入发邮件的流程,老发邮件会被骂死的 then ./mail.py $1 $2 $3 //发邮件操做 echo "0" > /tmp/$log.txt //告警计数文件清0,从新开始计数 else //若是是一个小时内的第二次或以上的告警了 if [ ! -f /tmp/$log.txt ] then echo "0" > /tmp/$log.txt //没有技术文件,建立告警计数文件 fi nu=`cat /tmp/$log.txt` //获取告警次数 nu2=$[$nu+1] echo $nu2>/tmp/$log.txt //记录最新的告警次数 if [ $nu2 -gt 10 ] //10分钟内连续告警或者10次告警后,须要发邮件 then ./mail.py $1 "trouble continue 10 min $2" "$3" echo "0" > /tmp/$log.txt fi fi
咱们使用任务计划来运行这个告警系统,计划每分钟运行一次bash
crontab -e //编辑任务计划 * * * * * cd /usr/local/sbin/mon/bin ; bash main.sh //先进入主脚本的目录,再执行脚本
能够预先本身先手动执行一次脚本,用-x选项查看脚本执行过程,看有无报错code
sh -x main.sh