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