天天看點

通過腳本發送zabbix郵件報警

zabbix原生的報警媒介類型中,郵件報警是我們常用的方式。當我們在CentOS6上面安裝zabbix3.0并配置郵件報警的時候,在郵件配置正确的前提下,不管觸發器如何觸發,郵件總是發送不出去,但是在CentOS7上面安裝的zabbix3.0卻可以正常發送郵件。究其原因,是因為zabbix3.0對伺服器上的libcurl版本有要求(CentOS6.9上的預設curl版本為7.19.7,而CentOS7.2上的預設libcurl版本為7.29.0),zabbix3.0所要求的的版本說明在zabbix3.0的官方文檔上面可以找到

https://www.zabbix.com/documentation/3.0/manual/installation/install,官網指出從zabbix3.0.0以來的libcurl會影響郵件伺服器的認證,其版本必須為7.20.0或更高

通過腳本發送zabbix郵件報警

要想通過郵件發送報警,可以選擇的解決方法有兩種:自定義郵件報警腳本或者更新libcurl版本。後者從理論來講當然可以實作,但是更新版本會由于依賴關系變得複雜,是以可以采取第一種解決方法,通過使用python腳本來發郵件

1、web界面新增報警媒介類型

通過腳本發送zabbix郵件報警

名稱自定義即可,類型選擇腳本,腳本名稱為所寫的腳本的名稱,這裡的python腳本通過qq郵箱來做服務,腳本的三個參數都是zabbix内置變量,分别為:報警收件人:{ALERT.SENDTO},報警标題:{ALERT.SUBJECT},報警内容:{ALERT.MESSAGE},在zabbix中自定義報警媒介的腳本預設存放路徑(yum安裝zabbix)為/usr/lib/zabbix/alertscripts

添加完報警媒介類型後勾選啟用

2、關于腳本

腳本内容不做過多說明,需要了解含義請自行百度,腳本使用的是python語言,在文法上要求較嚴格。 qq郵箱使用了ssl/tls加密465端口,網易163郵箱使用預設方式25端口,是以腳本内容會有一些差别,腳本如下

[root@zabbix alertscripts]# pwd

/usr/lib/zabbix/alertscripts

[root@zabbix alertscripts]# cat mail_qq.py

#!/usr/bin/python  

#coding:utf-8  

import smtplib  

from email.mime.text import MIMEText  

import sys  

mail_user = '[email protected]'  

mail_pass = 'xxxxxxxxxxx'  

def send_mail(to_list,subject,content):  

   me = "zabbix 監控告警平台"+"<"+mail_user+">"

   msg = MIMEText(content, 'plain', 'utf-8')  

   msg['Subject'] = subject  

   msg['From'] = me  

   msg['to'] = to_list  

   try:  

       s = smtplib.SMTP_SSL("smtp.qq.com", 465)  

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

mail_user為郵箱位址,mail_pass為郵箱服務商提供的用戶端授權碼,獲得授權碼的方式也可以參考百度,要說明的是目前網易郵箱用戶端授權碼支援自定義,qq郵箱用戶端授權碼不支援自定義,需要生成、這裡也附上使用163郵箱的腳本

[root@zabbix alertscripts]# cat mail_163.py

mail_user = '[email protected]'

mail_pass = 'xxxxxxxxxx'  

       s = smtplib.SMTP("smtp.163.com", 25)  

   send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

腳本編寫完成之後需要為腳本添加執行權限

[root@zabbix alertscripts]# chmod +x mail_qq.py

3、測試

指令行測試腳本能否成功執行

[root@zabbix alertscripts]# ./mail_qq.py [email protected] "測試" 'test'

測試參數為三個,分别為收件人郵箱位址,郵件标題,郵件内容

測試的時候如果出現錯誤提示缺少smtplib,解決方法為使用pip進行安裝:pip install smtplib