【2018.07.18学习笔记】【linux高级知识 20.23-20.26】

20.23/20.24/20.25 告警系统邮件引擎

告警系统邮件引擎由两个文件组成,放在/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  

20.26 运行告警系统

咱们使用任务计划来运行这个告警系统,计划每分钟运行一次bash

crontab -e //编辑任务计划

* * * * * cd /usr/local/sbin/mon/bin ; bash main.sh   //先进入主脚本的目录,再执行脚本

能够预先本身先手动执行一次脚本,用-x选项查看脚本执行过程,看有无报错code

sh -x main.sh
相关文章
相关标签/搜索