Zabbix3.0.2使用外部python腳本實現郵件報警

1,找到默認存放腳本的路徑(我是在默認路徑下面放着,如果想換別的路徑,修改zabbix_server.conf配置文件)

/usr/local/zabbix-server/share/zabbix/alertscripts 腳本存放路徑

2,在目錄新建一個mail.py的文件,腳本參考:

cd /usr/local/zabbix-server/share/zabbix/alertscripts

vim mail.py

#!/usr/bin/python

#coding:utf-8

#author: itnihao

#mail: [email protected]

#url:https://github.com/itnihao/zabbix-book/edit/master/06-chapter/zabbix_sendmail_v2.py   腳本直接down修改下複製會出現格式問題~

import smtplib

from email.mime.text import MIMEText

import os

import argparse

import logging

import datetime

#QQ enterprise

#smtp_server = 'smtp.exmail.qq.com'

#smtp_port = 25

#smtp_user = '[email protected]'

#smtp_pass = '1234567890'

#163 Mail

#smtp_server = 'smtp.163.com'

#smtp_port = 25

#smtp_user = '[email protected]'

#smtp_pass = '1234567890'

#QQ Mail

smtp_server ='smtp.qq.com'

smtp_port = 25

smtp_user   ='[email protected]'

smtp_pass   ='1234567890'

def send_mail(mail_to,subject,content):

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

    msg['Subject'] = unicode(subject,'UTF-8')

    msg['From'] = smtp_user

    msg['to'] = mail_to

    global sendstatus

    global senderr

    try:

        if smtp_port == 465:

            smtp = smtplib.SMTP_SSL()

        else:

            smtp = smtplib.SMTP()

        smtp.connect(smtp_server,smtp_port)

        smtp.login(smtp_user,smtp_pass)

        smtp.sendmail(smtp_user,mail_to,msg.as_string())

        smtp.close()

        print 'send ok'

        sendstatus = True

    except Exception,e:

        senderr=str(e)

        print senderr

        sendstatus = False

def logwrite(sendstatus,mail_to,content):

    logpath='/var/log/zabbix/alert'

    if not sendstatus:

        content = senderr

    if not os.path.isdir(logpath):

        os.makedirs(logpath)

    t=datetime.datetime.now()

    daytime=t.strftime('%Y-%m-%d')

    daylogfile=logpath+'/'+str(daytime)+'.log'

    logging.basicConfig(filename=daylogfile,level=logging.DEBUG)

    os.system('chown zabbix.zabbix {0}'.format(daylogfile))

    logging.info('*'*130)

    logging.debug(str(t)+' mail send to {0},content is :\n {1}'.format(mail_to,content))

if __name__ == "__main__":

    parser = argparse.ArgumentParser(description='Send mail to user for zabbix alerting')

    parser.add_argument('mail_to',action="store", help='The address of the E-mail that send to user ')

    parser.add_argument('subject',action="store", help='The subject of the E-mail')

    parser.add_argument('content',action="store", help='The content of the E-mail')

    args = parser.parse_args()

    mail_to=args.mail_to

    subject=args.subject

    content=args.content

    send_mail(mail_to,subject,content)

logwrite(sendstatus,mail_to,content)

3,修改腳本的權限

# chown   zabbix.zabbix mail.py

# chmod  775 mail.py

4,zabbix web配置

在配置媒介類型選擇,創建一個媒介類型

填寫下面信息,類型選擇腳本,需要填寫zabbix3.0需要下面3個參數。

創建用戶或者在admin用戶裏設置報警

此處添加的是出現故障後郵件通知到的郵件,也就是收件人。

創建一個action,實現郵件報警,在配置-Action-create action裏

(處我圖片和下面給的模板不一樣,建議使用模板,因爲我使用的服務器不在中國區域,所有郵件標題會亂碼.. 所以此圖我把標題改短了。)

Name

Action-Email

Default subject

故障{TRIGGER.STATUS},服務器:{HOSTNAME1}發生: {TRIGGER.NAME}故障!

Default message

告警主機:{HOSTNAME1}

告警時間:{EVENT.DATE} {EVENT.TIME}

告警等級:{TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

告警項目:{TRIGGER.KEY1}

問題詳情:{ITEM.NAME}:{ITEM.VALUE}

當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

請至Montoring-Events中查看詳細情況。

Recovery subject

恢復{TRIGGER.STATUS}, 服務器:{HOSTNAME1}: {TRIGGER.NAME}已恢復!

Recovery message

告警主機:{HOSTNAME1}

告警時間:{EVENT.DATE} {EVENT.TIME}

告警等級:{TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

告警項目:{TRIGGER.KEY1}

問題詳情:{ITEM.NAME}:{ITEM.VALUE}

當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

報警已恢復,請放鬆心情。

此處要注意操作類型,發送消息,還有消息的腳本。都要選對.

5,測試zabbix發送郵件

找一個agent客戶端,停掉。然後看報警郵件~

Kill掉之後,可以在發送這裏看到已經發生成功~ 

注意:zabbix的報警一般是5分鐘發一次。比如:16:20停止的,16:25纔會收到故障郵件,16:30處理了。16:35可以收到恢復信息~ … 

6.總結

    我此處使用的ubuntu 16.4的系統,開始嘗用mailx發,後來少一些庫文件無法安裝,後來切換其他辦法都已收不到郵件最後才選定用外部python腳本來實現~·ubuntu系統有很多軟件的依賴環境不自帶.apt-get實在用的不順手,使用126郵箱出現客戶端授權碼無法無法在python腳本中登陸.QQ郵箱只能發生給自己. 最後選的是公司的企業郵箱。但是由於zabbix會頻繁的發送郵件很多也被丟進垃圾箱… 最後在企業郵箱做的轉發到QQ郵箱。

Ubuntu用開發和學習沒問題,但是用作服務器問題還不少.

正確的姿勢: centos+zabbix+企業郵箱 後續如果有機會寫下篇zabbix中微信報警。

參考文章:

https://github.com/itnihao/zabbix-book/edit/master/06-chapter/zabbix_sendmail_v2.py 


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