简言

Zabbix搭建好之后管理员肯定不能时时刻刻去界面查看服务器的状态,这个时候就需要去邮箱告警通知我们。运维人员收到通知去处理相关问题。
要想通过邮件发送报警,可以选择的解决方法有两种:自定义邮件报警脚本或者升级libcurl版本。后者从理论来讲当然可以实现,但是升级版本会由于依赖关系变得复杂,因此可以采取第一种解决方法,通过使用python脚本来发邮件。

一、创建自定义媒介,和邮件脚本

1.在zabbix中自定义报警媒介的脚本默认存放路径(yum安装zabbix)为/usr/lib/zabbix/alertscripts。

1
2
3
[root@zabbix ~]# vi /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts #修改配置文件

2.制作邮件脚本

1
2
3
4
[root@zabbix ~]# cd /usr/lib/zabbix/alertscripts/

[root@zabbix alertscripts]# vi zabbix-email.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
mail_host = 'smtp.qq.com' #QQ的SMTP服务器
mail_user = '1239328335' #QQ账号名称
mail_pass = 'nbseoqjsfglijbhc' #这里并不是邮箱的密码,而是填写授权码
mail_postfix = 'qq.com'
def send_mail(to_list,subject,content):
me = "zabbix4.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])

3.给脚本赋予权限

1
2
[root@zabbix alertscripts]# chmod a+x zabbix-email.py  #修改权限

4.测试脚本发送邮件
测试参数为三个,分别为收件人邮箱地址,邮件标题,邮件内容
测试的时候如果出现错误提示缺少smtplib,解决方法为使用pip进行安装:pip install smtplib
测试完成了就可以通过zabbix进行触发报警了

1
2
./zabbix-email.py 1330561079@163.com "测试" 'test'

测试结果为
在这里插入图片描述

二、界面设置

1.点击管理—报警媒介类型—创建媒体类型
在这里插入图片描述

1
2
3
4
5
6
7
8
9
名称:zabbix-email
类型:脚本
脚本名称:zabbix-email.py
脚本参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
{ALERT.URL}

添加完成之后我们也可以测试一下效果
在这里插入图片描述
在这里插入图片描述
2.点击管理—用户,点击admin,选择报警媒介并添加
在这里插入图片描述
3.点击配置—动作,编辑动作,然后添加操作,添加恢复操作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
操作
接收人:问题警告: {TRIGGER.NAME}
默认信息:问题警告 started at {EVENT.TIME} on {EVENT.DATE}
问题警告对象: {TRIGGER.NAME}
Host: {HOST.NAME}:{HOST.CONN}
Severity: {TRIGGER.SEVERITY}

Original problem ID: {EVENT.ID}
{TRIGGER.URL}
注:记得添加发送到用户

1
2
3
4
5
6
7
8
9
10
11
12
恢复操作
接收人:告警已恢复: {TRIGGER.NAME}
默认信息:
告警已恢复 at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
告警恢复对象: {TRIGGER.NAME}
Host: {HOST.NAME}:{HOST.CONN}
Severity: HEALTH

Original problem ID: {EVENT.ID}
{TRIGGER.URL}
注:记得添加发送到用户

4 测试
这里我们关闭一台服务器就会发现邮箱收到报警在这里插入图片描述
在这里插入图片描述