20.23 告警系统邮件引擎
mail.sh内容
//其中mail.py内容到这里下载log=$1t_s=`date +%s`t_s2=`date -d "2 hours ago" +%s`if [ ! -f /tmp/$log ]then echo $t_s2 > /tmp/$logfit_s2=`tail -1 /tmp/$log|awk '{print $1}'`echo $t_s>>/tmp/$logv=$[$t_s-$t_s2]echo $vif [ $v -gt 3600 ]then ./mail.py $1 $2 $3 echo "0" > /tmp/$log.txtelse 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 ] then ./mail.py $1 "trouble continue 10 min $2" "$3" echo "0" > /tmp/$log.txt fifi
mail.sh脚本解析:
第一次执行: 一步步来……拿项目监控load.sh来说
log=$1##这个$1呢,就是执行mail.sh的第一个参数;上图↑
t_s=`date +%s` ##这个就是定义当前时间戳t_s2=`date -d "2 hours ago" +%s ##这个定义2小时以前的时间戳if [ ! -f /tmp/$log ] ##判断:如果不存在这个文件、则创建 并将2小时前的时间戳写入!then echo $t_s2 > /tmp/$logfit_s2=`tail -1 /tmp/$log|awk '{print $1}'` ##t_s2重新赋值,获取文件里面的时间戳!echo $t_s>>/tmp/$log ##将当前时间戳 追加重定向到文件;v=$[$t_s-$t_s2] ##运算加减法,并赋值给vecho $vif [ $v -gt 3600 ] ##判断:如果v大于1小时;则发邮件+重置10分钟邮件收敛值!then ./mail.py $1 $2 $3 echo "0" > /tmp/$log.txtelse ##后面的就不执行了,我也不写了 第一次执行完毕!(因为第一次计算v的值,一定是2小时=7200大于3600,所以只发邮件 并重置收敛值;)
**第二次执行(我们会定义主程序main.sh每分钟执行一次!):**以及后面的执行……
log=$1 ##赋值执行mail.sh的第一个参数;t_s=`date +%s`t_s2=`date -d "2 hours ago" +%s`if [ ! -f /tmp/$log ] ##第二次执行,这个文件就存在了 判断无效;执行下一步then echo $t_s2 > /tmp/$logfit_s2=`tail -1 /tmp/$log|awk '{print $1}'` ##因为第一次执行的时候,将第一次的时间戳追加到了这个文件,所以 这个时间戳是前1分钟的时间戳!echo $t_s>>/tmp/$log ##再次将当前时间戳追加到该文件;v=$[$t_s-$t_s2] ##运算减法;echo $vif [ $v -gt 3600 ] ##此时的v只有1分钟间隔,并未有1小时;该判断不成立 执行elsethen ./mail.py $1 $2 $3 echo "0" > /tmp/$log.txtelse if [ ! -f /tmp/$log.txt ] ##典型if判断内嵌;判断:如果这个文件不存在,则创建 并写入收敛值0;(这个文件其实在第一次执行的时候就已经创建了,这里再判断一下 以防万一) ##判断失败;执行下面命令 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 则发邮件提醒(就不会一分钟提醒一次了) 并重置收敛值为0;这样就可以10分钟循环一次了! ##判断失败 则脚本结束;继续等待1分钟的main.sh执行! then ./mail.py $1 "trouble continue 10 min $2" "$3" echo "0" > /tmp/$log.txt fifi