天天看點

zabbix詳解:(三)添加郵件告警配置

大家應該心理有底,做監控不是隻為了看伺服器狀态,雖然那也是監控的目的之一,但絕對不是全部,大家做監控的目的肯定是想預警,甚至是出問題就告警,毫無疑問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 &gt;&gt;</code><code>/tmp/sendmail</code><code>.log 2&gt;&amp;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>"&lt;"</code><code>+</code><code>mail_user</code><code>+</code><code>"@"</code><code>+</code><code>mail_postfix</code><code>+</code><code>"&gt;"</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>

進去使用者界面後要點選&lt;報警媒介&gt;-&lt;添加&gt;

就是添加接收報警的位址,會彈出一個框.

<a href="http://s2.51cto.com/wyfs02/M00/8A/E7/wKiom1g-jBawkLQwAABOuV5V5PI436.png" target="_blank"></a>

這個框就是添加郵件位址的地方:

類型:選你剛才在&lt;報警媒介類型&gt;建立的,我這裡是pymail

收件人:你的郵件位址

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

下面兩個不用管,點選&lt;添加&gt;就可以刻

然後會傳回剛才的界面,點選&lt;更新&gt;就可以了.

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

然後進入另一個界面,這裡重點在第二頁&lt;操作&gt;那裡,第一頁的&lt;動作&gt;隻是改個名字,然後看下一圖的事例

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

然後下面一個框是通過點選下面的&lt;操作&gt;裡面的&lt;新的&gt;的彈框&lt;操作細節&gt;,

主要就是選擇需要發送的群組和使用者,剛才我們設定郵件位址是在admin的,那麼這裡設定的顯然就是zabbix admin的使用者組和使用者admin,然後&lt;僅送到&gt;要設定成&lt;報警媒介&gt;的名字pymail.

然後,在頂上&lt;操作&gt;的隔壁&lt;恢複操作&gt;那裡,大緻和&lt;操作&gt;一緻,這裡不細說,大家直接看圖.

<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,如需轉載請自行聯系原作者