简言 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 测试 这里我们关闭一台服务器就会发现邮箱收到报警