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: itnihao@qq.com
#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 = 'itnihao_zabbix@itnihao.com'
#smtp_pass = '1234567890'
163 Mail
#smtp_server = 'smtp.163.com'
#smtp_port = 25
#smtp_user = 'itnihao_zabbix@163.com'
#smtp_pass = '1234567890'
#QQ Mail
smtp_server ='smtp.qq.com'
smtp_port = 25
smtp_user ='itnihao_zabbix@qq.com'
smtp_pass## ='1234567890'
##smtp_pass#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
##csg s['to'] = mail_to
##global senderr
try:
if smtp_port == 465:
#P else:
# smtp = smtplib.SMTP()
smtp.connect(smtp_server,sm smtp.sendmail(smtp_user,mail_to ,msg.as_string())
smtp.close()
print 'send )
#### senderr=str(e)
print senderr
# sendstatus = False
# sendstatus = False##sdef. logpath='/var/log/zabbix/alert'
if not sendstatus:
content = senderr
# os.makedirs(logpath) t=datetime.datetime.now()卷
# 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 ')#user ')
#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.subjectmail_to # subject=args.subjects。 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裡
(處我圖片和下面給的範本不一樣,建議使用模板,因為我使用的伺服器不在中國區域,所有郵件標題會亂碼.. 所以此圖我把標題改短了。
Action-EmailDefault 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中微信警報。
以上是詳解Zabbix3.0.2使用外部python腳本實現郵件警報方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!