1, find the default script path (I am in the default path, if you want to change the path, modify the zabbix_server.conf configuration file)
/usr/local/zabbix-server/share/zabbix/alertscripts Script Store Path
2. Create a new mail.py file in the directory, script reference:
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 script directly under Modify the copy will appear formatting problems ~
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 '
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. Modify permissions for Scripts
# chown Zabbix.zabbix mail.py
# chmod 775 mail.py
4,zabbix Web Configuration
In configuring Media type selection, create a media type
Fill in the following information, type Select script, need to fill in zabbix3.0 need the following 3 parameters.
Create user or set alarm in Admin user
Here is the message that the message was notified to after the failure, that is, the recipient.
Create an action to implement a mail alert, in the configuration-action-create action
(My picture is not the same as the template given below, it is recommended to use the template, because I use the server is not in the Chinese region, all mail headers will be garbled.) So I've shortened the title of the picture. )
Name:
Action-email
Default Subject:
Fault {TRIGGER. STATUS}, server: {HOSTNAME1} occurred: {Trigger.name} failed!
Default message:
Alarm host: {HOSTNAME1}
Alarm time: {EVENT. DATE} {EVENT. TIME}
Alarm level: {TRIGGER. SEVERITY}
Warning message: {trigger.name}
Alarm item: {TRIGGER. KEY1}
Problem Details: {item.name}:{item. VALUE}
Current status: {TRIGGER. Status}:{item. VALUE1}
Event Id:{event.id}
Please see details in montoring-events.
Recovery Subject:
Restore {TRIGGER. STATUS}, server: {HOSTNAME1}: {trigger.name} restored!
Recovery message:
Alarm host: {HOSTNAME1}
Alarm time: {EVENT. DATE} {EVENT. TIME}
Alarm level: {TRIGGER. SEVERITY}
Warning message: {trigger.name}
Alarm item: {TRIGGER. KEY1}
Problem Details: {item.name}:{item. VALUE}
Current status: {TRIGGER. Status}:{item. VALUE1}
Event Id:{event.id}
The alarm has been restored, please relax your mood.
Here you have to note the type of operation, the message sent, and the script for the message. Have to choose the right.
5, test Zabbix send mail
Find an agent client and stop. Then look at the alarm mail ~
After killing, you can see that the success has occurred in the send here ~
Note: Zabbix alarms are usually sent in 5 minutes. For example: 16:20 stopped, 16:25 will receive the fault mail, 16:30 processing. 16:35 can receive recovery information ~ ...
6. Summary
I use the Ubuntu 16.4 system here, began to taste the MAILX hair, and then less library files can not be installed, and later switch other methods have not received the mail finally selected with an external Python script to implement ~ The Ubuntu system has many software dependencies that are not self-contained. Apt-get is really useless, using 126 mailbox Client authorization code cannot be logged in the Python script. QQ mailbox can only happen to yourself. The last choice is the company's corporate mailbox. But because the Zabbix will send the Mail frequently many also be thrown into the rubbish bin ... Finally in the enterprise mailbox to do the forwarding to the QQ mailbox.
Ubuntu is not a problem with development and learning, but there are a lot of things to use as a server.
Correct posture: centos+zabbix+ Enterprise Mailbox Follow-up if there is a chance to write the next Zabbix in the alarm.