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