Zabbix製作python腳本實現郵箱告警功能

簡言

Zabbix搭建好之後管理員肯定不能時時刻刻去界面查看服務器的狀態,這個時候就需要去郵箱告警通知我們。運維人員收到通知去處理相關問題。
要想通過郵件發送報警,可以選擇的解決方法有兩種:自定義郵件報警腳本或者升級libcurl版本。後者從理論來講當然可以實現,但是升級版本會由於依賴關係變得複雜,因此可以採取第一種解決方法,通過使用python腳本來發郵件。

一、創建自定義媒介,和郵件腳本

1.在zabbix中自定義報警媒介的腳本默認存放路徑(yum安裝zabbix)爲/usr/lib/zabbix/alertscripts。

[root@zabbix ~]# vi /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts   #修改配置文件

2.製作郵件腳本

[root@zabbix ~]# cd /usr/lib/zabbix/alertscripts/
 
[root@zabbix alertscripts]# vi zabbix-email.py
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
mail_host = 'smtp.qq.com'   #QQ的SMTP服務器
mail_user = '1239328335'  #QQ賬號名稱
mail_pass = 'nbseoqjsfglijbhc'  #這裏並不是郵箱的密碼,而是填寫授權碼
mail_postfix = 'qq.com'
def send_mail(to_list,subject,content):
    me = "zabbix4.2監控平臺"+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content, 'plain', 'utf-8')
    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])

3.給腳本賦予權限

[root@zabbix alertscripts]# chmod a+x zabbix-email.py  #修改權限

4.測試腳本發送郵件
測試參數爲三個,分別爲收件人郵箱地址,郵件標題,郵件內容
測試的時候如果出現錯誤提示缺少smtplib,解決方法爲使用pip進行安裝:pip install smtplib
測試完成了就可以通過zabbix進行觸發報警了

./zabbix-email.py [email protected] "測試" 'test'

測試結果爲
在這裏插入圖片描述

二、界面設置

1.點擊管理—報警媒介類型—創建媒體類型
在這裏插入圖片描述

名稱:zabbix-email
類型:腳本
腳本名稱:zabbix-email.py
腳本參數:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
{ALERT.URL}

添加完成之後我們也可以測試一下效果
在這裏插入圖片描述
在這裏插入圖片描述
2.點擊管理—用戶,點擊admin,選擇報警媒介並添加
在這裏插入圖片描述
3.點擊配置—動作,編輯動作,然後添加操作,添加恢復操作。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

操作
接收人:問題警告: {TRIGGER.NAME}
默認信息:問題警告 started at {EVENT.TIME} on {EVENT.DATE}
問題警告對象: {TRIGGER.NAME}
Host: {HOST.NAME}:{HOST.CONN}
Severity: {TRIGGER.SEVERITY}
 
Original problem ID: {EVENT.ID}
{TRIGGER.URL}
注:記得添加發送到用戶
恢復操作
接收人:告警已恢復: {TRIGGER.NAME}
默認信息:
告警已恢復 at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
告警恢復對象: {TRIGGER.NAME}
Host: {HOST.NAME}:{HOST.CONN}
Severity: HEALTH

Original problem ID: {EVENT.ID}
{TRIGGER.URL}
注:記得添加發送到用戶

4 測試
這裏我們關閉一臺服務器就會發現郵箱收到報警在這裏插入圖片描述
在這裏插入圖片描述

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