【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
相關文章
相關標籤/搜索