7月18日任務

20.23/20.24/20.25 告警系統郵件引擎
20.26 運行告警系統

把zabbix中的mail.py拷貝到shares子目錄mail下的mail.py

回到mail目錄,創建mail.sh (做告警收斂,目的是服務出現問題時不會連續不斷的發告警郵件,而是通過一個計時器的計時範圍代替,範圍內不告警),並輸入如下內容(當服務出現異常時纔會調用mail.sh )

log是一個變量(參數1)(見之前的具體監控項名稱,格式爲$ip addr\監控項名)

t_s定義一個時間戳 t_s2 定義兩個小時以前的時間戳

如果日誌不存在,則需要創建日誌 (且第一行爲兩個小時以前的時間戳t_s2)

t_s2再次賦值後,把當前時間的時間戳寫入到/tmp/$log中 (其中t_s2的第一次賦值和t_s2的第二次賦值等同,如果日誌本身存在,那t_s2就會覆蓋前面的賦值)

定義一個變量v = [ $t_s-$t_s2];兩個時間戳的比值差,echo $v 並做判斷

如果系統沒有出現問題,則不會執行mail.py中的告警腳本,也不會生成一個時間戳;如果出現問題,則每次都會生成一個時間戳,

如果比值差超過一個小時,則會調用mail.py,並生成一個新的$log.txt(類似於計數器)

如果比值差小於1小時,則繼續判斷

①如果$log.txt計數器不存在,則創建/tmp/$log.txt並echo"0"

定義兩個新變量nu=cat /tmp/$log.txt nu2=$[$nu+1] 並把計數器的數值nu2寫入到$log.txt中

當nu2>10的時候,則調用mail.py並輸出trouble continues 10 min,並echo "0" 清空$log.txt

總結:場景一:當剛新裝系統,沒有執行過mail.sh;第一次告警會執行mail.sh;兩個時間戳t_s, t_s2.兩者之差爲$v,以3600s爲界,第一次告警(每分鐘執行一次);當故障時間大於1小時,則執行mail.py,如果小於一小時則執行下面的代碼,再次定義兩個變量nu, nu2;echo $nu2>> /tmp/$log.txt,nu2=$[$nu1+1],相當於計數器,只有nu2超過10纔會執行下面的腳本代碼,提示故障已經持續10分鐘,並不會執行mail.py把$1,$2,$3以郵件的形式發出(從而實現告警收斂)

場景二: 如果監控的項目,如502錯誤,持續2分鐘後第3分鐘恢復了,則計數器nu2=2,如果4~7分鐘OK,第8分鐘又開始出現502超出預設值

計數器並沒有清空(只有預設的一小時以後計數器纔會清空),也就是說本例中,t_s2和t_s兩個時間戳的差值僅僅爲6分鐘,2分鐘以內也在告警,但是沒有發郵件,第3分鐘業務恢復後,超過一小時再次發現業務異常,纔會發郵件,並清空計時器,重新進入一個新的計時週期;不論系統是中途出現故障的時間多長,只要計數器在10以下(即10分鐘,因爲設置腳本執行爲1分鐘一次),都是會實現告警收斂

運行告警系統

sh -x mail.sh查看執行過程及排錯 /usr/local/sbin/mon/bin/ 下的main.sh

vim ../conf/mon.conf,關閉502監控,502腳本無法執行(僅僅執行load)

在執行腳本sh -x main.sh中發現最後有exec字樣,表示把後面的腳本放到../log/error.log中

  在調試的時候建議把main.sh中的正確和error.log這部分註釋掉,如下圖

再次執行腳本看Load成功

如果Load有問題,則執行mail.sh也需要發送3個參數

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章