(三)新增郵件告警配置
大家應該心理有底,做監控不是隻為了看伺服器狀態,雖然那也是監控的目的之一,但絕對不是全部,大家做監控的目的肯定是想預警,甚至是出問題就告警,毫無疑問zabbix也是支援告警規則的,現在來介紹傳統的新增郵件告警,後面還會介紹微信告警.
新增郵件告警配置:
關於zabbix郵件告警的原理,其實是呼叫指令碼,然後指令碼通過郵件功能來向外發郵件,後面介紹的微信告警也是通過指令碼呼叫微信介面來做的.
所以,告警的關鍵,就是指令碼了,其實zabbix郵件告警這個功能很多文章有寫,也有很多指令碼可以參考,只是大部分版本比較舊,不一定適用而已,下面先來看看指令碼.
傳統來說,監控的伺服器大部分是linux系統,所以以前幾乎都是bash shell,現在python指令碼也有了,用起來還挺方便的,粗略說說傳統方式,後面重點拿python指令碼來講解:
12345678910111213 | #先下載相關軟體 yum install -y sendmail postfix mailx #測試能否發郵件 echo "zabbix test mail" |mail -s "zabbix" [email protected] #編寫指令碼 vim sendmail.sh #!/bin/bash #echo "$3" | mail -s "$2" $1 messages=` echo $3 | tr '\r\n' '\n' ` subject=` echo $2 | tr '\r\n' '\n' ` echo "${messages}" | mail -s "${subject}" $1 >> /tmp/sendmail .log 2>&1 #測試一下 bash sendmail.sh [email protected] zabbix fuckyou |
下面來看python的指令碼.
發郵件的指令碼:
使用前當然是要先安裝python了,然後是相關的執行庫smtplib,python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議進行了簡單的封裝。
12345678910111213141516171819202122232425262728293031323334 | vim sendmail2.py #!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText import sys # configure your own parameters here #下面郵件地址的smtp地址 mail_host = 'smtp.exmail.qq.com' #用來發郵件的郵箱,在發件人擡頭顯示(不然你的郵件會被當成是垃圾郵件) mail_user = '[email protected]' #上面郵箱的密碼 mail_pass = 'XXXXX' #上面smtp地址的主網站地址 mail_postfix = 'exmail.qq.com' def send_mail(to_list,subject,content): me = mail_user + "<" + mail_user + "@" + mail_postfix + ">" msg = MIMEText(content, 'plain' , 'utf-8' ) # 必須使用'utf-8'引數,否則預設為us-ascii, 在部分郵件客戶端中文會顯示為亂碼 msg[ 'Subject' ] = subject msg[ 'From' ] = me msg[ 'to' ] = to_list try : s = smtplib.SMTP() s.connect(mail_host) s.login(mail_user,mail_pass) s.sendmail(me,to_list,msg.as_string()) s.close() return True except Exception,e: print str (e) return False if __name__ = = "__main__" : send_mail(sys.argv[ 1 ], sys.argv[ 2 ], sys.argv[ 3 ]) |
這個指令碼主要就改4項:
#下面郵件地址的smtp地址
mail_host = 'smtp.exmail.qq.com'
#用來發郵件的郵箱,在發件人擡頭顯示(不然你的郵件會被當成是垃圾郵件)
mail_user = '[email protected]'
#上面郵箱的密碼
mail_pass = 'XXXXX'
#上面smtp地址的主網站地址
mail_postfix = 'exmail.qq.com'
這個指令碼需要輸入三個引數來操作,空格隔開就好了
第一個是要傳送的郵件地址,
第二個是郵件標題,
第三個是郵件內容
改完就能用了,試一下:
python sendmail2.py [email protected] test 'ha ha ha'
收到郵件就完成了.
確認zabbix_server指令碼的位置:
12 | cat /usr/local/zabbix/etc/zabbix_server .conf | grep AlertScriptsPath= AlertScriptsPath= /usr/local/zabbix/share/zabbix/alertscripts |
這個目錄就是發郵件指令碼存放的位置,如果你之前沒設過,這次設定完記得重啟zabbix_server
在zabbix_web設定:
指令碼準備好了,就要去web設定報警的呼叫規則了,要看圖解了(截圖很麻煩啊......),怎麼登入我就不說了.
如圖所示:點選管理-報警媒介型別-建立媒體型別
然後輸入:
名稱:你喜歡什麼就是什麼
型別:指令碼
指令碼名稱:就是你剛剛指令碼的名稱,我剛才改的名字就是sendmail2.py
指令碼引數:{ALERT.SENDTO}, {ALERT.SUBJECT}, {ALERT.MESSAGE}(必填,就這三個,不用改,),分別為指令碼需要的3個引數:收件人地址、主題、詳細內容,就是測試指令碼的那三個引數了.
ps:很多人安裝zabbix3.X之後,寫的指令碼一直髮信不成功,手動執行時可以。這是因為Zabbix3.X之後,可以自定義引數了,所以不寫引數它是不會傳引數的。在2.x版本不存在這個問題,預設會傳3個引數。
建立了報警型別,當然還要設定收件人是吧,然後就是:
點選管理-使用者-使用者名稱
如果你想獨立建立使用者名稱是可以的,但是我就不想那麼麻煩,直接用admin
進去使用者介面後要點選<報警媒介>-<新增>
就是新增接收報警的地址,會彈出一個框.
這個框就是新增郵件地址的地方:
型別:選你剛才在<報警媒介型別>建立的,我這裡是pymail
收件人:你的郵件地址
當啟用時:就是收郵件的時效,覺得被騷擾太頻繁就調節吧
下面兩個不用管,點選<新增>就可以刻
然後會返回剛才的介面,點選<更新>就可以了.
最後,建立報警動作,讓報警動起來:
點選配置-動作-建立動作(注意是觸發器)
然後進入另一個介面,這裡重點在第二頁<操作>那裡,第一頁的<動作>只是改個名字,然後看下一圖的事例
要注意,這個是修改過的資訊事例,和預設的不一樣,他比預設的更直觀和容易閱讀一些,
預設操作步驟持續時間:按需調節,不詳細說明
預設接收人:其實是報警標題,這裡設定成:
故障{TRIGGER.STATUS},伺服器:{HOST.NAME1}發生: {TRIGGER.NAME}故障!.
預設資訊:就是報警內容,這裡設定成:
告警主機:{HOST.NAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警資訊: {TRIGGER.NAME}
告警專案:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:值為{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
然後下面一個框是通過點選下面的<操作>裡面的<新的>的彈框<操作細節>,
主要就是選擇需要傳送的群組和使用者,剛才我們設定郵件地址是在admin的,那麼這裡設定的顯然就是zabbix admin的使用者組和使用者admin,然後<僅送到>要設定成<報警媒介>的名字pymail.
然後,在頂上<操作>的隔壁<恢復操作>那裡,大致和<操作>一致,這裡不細說,大家直接看圖.
和上面差不多,主要就是預設接收人和預設資訊有小許差別
預設接收人:恢復的標題:
{TRIGGER.STATUS}: {TRIGGER.NAME}恢復{TRIGGER.STATUS}, 伺服器:{HOSTNAME1}: {TRIGGER.NAME}已恢復!
預設資訊:恢復內容:
告警主機:{HOST.NAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警資訊: {TRIGGER.NAME}
告警專案:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:值為{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
到這裡,報警的設定就完成了,然後下面來測試下,把客戶機的zabbix_agent停掉看看,不過時間比較長,要5分鐘才報警,也可以設定其他引數,這個就自己慢慢摸索了.
出處:http://blog.51cto.com/arthur376/1878237