告警系統郵件引擎由兩個文件組成,放在/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