1. 程式人生 > >Zabbix3.2郵件告警python指令碼

Zabbix3.2郵件告警python指令碼

Zabbix自動化監控QQ交流群:9888359 歡迎喜歡交流的朋友加入!
一、概述及環境要求
1、概述
zabbix監控也起到重要作用,以下是使用python指令碼傳送告警郵件配置方法。之前使用過sendemail郵件報警但是發現郵件主題為中文時候會出現亂碼的問題。

2、環境安裝要求
Zabbix軟體版本:zabbix3.2.6
作業系統:CentOS release 6.8 (Final)

二、指令碼建立及測試
1、檢視配置zabbix_server.conf ,找到AlertScriptsPath,檢視路徑位置,如被註釋,將註釋開啟,把send.py 檔案儲存到該目錄下。
grep -n '^[a-Z]' /usr/local/etc/zabbix_server.conf
38:LogFile=/tmp/zabbix_server.log
87:DBName=zabbix
103:DBUser=zabbix
111:DBPassword=zabbix
126:DBPort=3306
239:StartVMwareCollectors=10
247:VMwareFrequency=60
255:VMwarePerfFrequency=60
265:VMwareCacheSize=80M
273:VMwareTimeout=10
281:SNMPTrapperFile=/tmp/zabbix_traps.tmp
289:StartSNMPTrapper=0
407:Timeout=4
448:AlertScriptsPath=/usr/local/share/zabbix/alertscripts
492:LogSlowQueries=3000

2、如有修改配置,需重啟zabbix-server服務。
/etc/init.d/zabbix_server restart

3、進入Zabbix發郵件指令碼目錄
cd /usr/local/share/zabbix/alertscripts

4、建立指令碼及配置
vim zabbix-mail.py 
#!/usr/bin/python  
#coding:utf-8  
import smtplib  
from email.mime.text import MIMEText  
import sys  
mail_host = 'smtp.qq.com'    
mail_user = '10880347'  
mail_pass = '**********'  
mail_postfix = 'qq.com'  
def send_mail(to_list,subject,content):  
    me = "zabbix3.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]) 

5.增加可執行許可權
chmod +x zabbix-mail.py
chown -R zabbix.zabbix zabbix-mail.py 

6.測試郵件
python zabbix-mail.py 
[email protected]
test test
三、ZABBIX伺服器報警媒介型別
1、web介面設定
http://172.16.8.200/zabbix/
新增三個引數
{ALERT.SENDTO}收件人地址
{ALERT.SUBJECT}主題
{ALERT.MESSAGE}詳細內容
2、建立報警使用者
3、配置報警媒介
4、配置許可權
現在測試環境所以配置超級管理的許可權,如果是生產環境建議使用使用者許可權
四、配置報警動作
1、建立新的觸發動作
2、配置動作
3、配置操作
故障{TRIGGER.STATUS},伺服器:{HOSTNAME1}發生: {TRIGGER.NAME}故障!

告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警資訊: {TRIGGER.NAME}
告警專案:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
4、配置恢復操作
恢復{TRIGGER.STATUS}, 伺服器:{HOSTNAME1}: {TRIGGER.NAME}已恢復!

告警主機:{HOSTNAME1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警資訊: {TRIGGER.NAME}
告警專案:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
5、郵件告警測試結果
對發郵件指令碼進行了優化,解決outlook收郵件標題是亂碼的問題。
#!/usr/bin/python  
#coding:utf-8  
import smtplib 
from email.header import Header 
from email.mime.text import MIMEText  
import sys  
mail_host = 'mail.qq.com'    
mail_user = '10880347'  
mail_pass = '********'  
mail_postfix = 'qq.com'  

def send_mail(to_list,subject,content):  
    #me = "某某公司zabbix監控告警"+"<"+mail_user+"@"+mail_postfix+">"  
    me = ("%s<[email protected]>")%(Header('某某公司zabbix_監控告警!','utf-8'),)  
    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])

使用python傳送QQ郵件
這裡用到了Python的兩個包來發送郵件: smtplib 和 email 。
Python 的 email 模組裡包含了許多實用的郵件格式設定函式,可以用來建立郵件“包裹”。
使用的 MIMEText 物件,為底層的 MIME(Multipurpose Internet MailExtensions,多用途網際網路郵件擴充套件型別)協議傳輸建立了一封空郵件,最後通過高層的SMTP 協議傳送出去。 
MIMEText 物件 msg 包括收發郵箱地址、郵件正文和主題,Python 通過它就可以建立一封格式正確的郵件。smtplib 模組用來設定伺服器連線的相關資訊。
要想通過QQ郵箱來發送郵件,需要開啟QQ郵箱的設定-賬戶裡SMTP服務,接下來會通過傳送簡訊驗證來獲得授權碼,有了授權碼後就可以在程式碼裡添加了。

根據此配置來設定smtplib.SMTP_SSL()函式的引數。

 zabbix_mail.py 
#!/usr/bin/python  
#coding:utf-8  
import smtplib 
from email.header import Header 
from email.mime.text import MIMEText  
import sys  
mail_host = 'smtp.qq.com'    
mail_user = '10880347'  
mail_pass = '你的授權碼'  
mail_postfix = 'qq.com'  

def send_mail(to_list,subject,content):  
    me = ("%s<[email protected]>")%(Header('某某公司zabbix_監控告警!','utf-8'),)  
    msg = MIMEText(content, 'plain', 'utf-8')  
    msg['Subject'] = subject  
    msg['From'] = me  
    msg['to'] = to_list  
    try:  
        s = smtplib.SMTP_SSL()  
        s.connect(mail_host,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])