1. 程式人生 > >(三)新增郵件告警配置

(三)新增郵件告警配置

大家應該心理有底,做監控不是隻為了看伺服器狀態,雖然那也是監控的目的之一,但絕對不是全部,大家做監控的目的肯定是想預警,甚至是出問題就告警,毫無疑問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" $1messages=`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協議進行了簡單的封裝。

12345678910111213141516171819202122232425262728293031323334vim sendmail2.py#!/usr/bin/python#coding:utf-8
import smtplibfrom email.mime.text import MIMETextimport 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'= subjectmsg['From'= memsg['to'= to_listtry:= smtplib.SMTP()s.connect(mail_host)s.login(mail_user,mail_pass)s.sendmail(me,to_list,msg.as_string())s.close()return Trueexcept Exception,e:print str(e)return Falseif __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指令碼的位置:

12cat /usr/local/zabbix/etc/zabbix_server.conf |grep AlertScriptsPath=AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts

這個目錄就是發郵件指令碼存放的位置,如果你之前沒設過,這次設定完記得重啟zabbix_server

在zabbix_web設定:

指令碼準備好了,就要去web設定報警的呼叫規則了,要看圖解了(截圖很麻煩啊......),怎麼登入我就不說了.

如圖所示:點選管理-報警媒介型別-建立媒體型別

wKiom1g-hWqwWU_3AACNPk0FSG8365.png

然後輸入:

名稱:你喜歡什麼就是什麼

型別:指令碼

指令碼名稱:就是你剛剛指令碼的名稱,我剛才改的名字就是sendmail2.py

指令碼引數:{ALERT.SENDTO}, {ALERT.SUBJECT}, {ALERT.MESSAGE}(必填,就這三個,不用改,),分別為指令碼需要的3個引數:收件人地址、主題、詳細內容,就是測試指令碼的那三個引數了.

ps:很多人安裝zabbix3.X之後,寫的指令碼一直髮信不成功,手動執行時可以。這是因為Zabbix3.X之後,可以自定義引數了,所以不寫引數它是不會傳引數的。在2.x版本不存在這個問題,預設會傳3個引數。

wKioL1g-hWrCliIFAABOrgiiHM8376.png

建立了報警型別,當然還要設定收件人是吧,然後就是:

點選管理-使用者-使用者名稱

如果你想獨立建立使用者名稱是可以的,但是我就不想那麼麻煩,直接用admin

wKioL1g-jBbhFXDxAABnIbuWBD8694.png

進去使用者介面後要點選<報警媒介>-<新增>

就是新增接收報警的地址,會彈出一個框.

wKiom1g-jBawkLQwAABOuV5V5PI436.png

這個框就是新增郵件地址的地方:

型別:選你剛才在<報警媒介型別>建立的,我這裡是pymail

收件人:你的郵件地址

當啟用時:就是收郵件的時效,覺得被騷擾太頻繁就調節吧

下面兩個不用管,點選<新增>就可以刻

然後會返回剛才的介面,點選<更新>就可以了.

wKiom1g_oaWwDiBvAABiBxcbj-Q639.png

最後,建立報警動作,讓報警動起來:

點選配置-動作-建立動作(注意是觸發器)

wKioL1g-j77BqJMWAACAw00g8w4384.png

然後進入另一個介面,這裡重點在第二頁<操作>那裡,第一頁的<動作>只是改個名字,然後看下一圖的事例

wKioL1g-j76QvSe8AABbcLAWBzY313.png

要注意,這個是修改過的資訊事例,和預設的不一樣,他比預設的更直觀和容易閱讀一些,

預設操作步驟持續時間:按需調節,不詳細說明

預設接收人:其實是報警標題,這裡設定成:

故障{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.

然後,在頂上<操作>的隔壁<恢復操作>那裡,大致和<操作>一致,這裡不細說,大家直接看圖.

wKiom1g-kUPimG_8AADIPXQQAyU886.png

和上面差不多,主要就是預設接收人和預設資訊有小許差別

預設接收人:恢復的標題:

{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}

wKioL1g-mRDR3RGTAACdCpyWRN0375.png

到這裡,報警的設定就完成了,然後下面來測試下,把客戶機的zabbix_agent停掉看看,不過時間比較長,要5分鐘才報警,也可以設定其他引數,這個就自己慢慢摸索了.

出處:http://blog.51cto.com/arthur376/1878237