zabbix原生的报警媒介类型中,邮件报警是我们常用的方式。当我们在CentOS6上面安装zabbix3.0并配置邮件报警的时候,在邮件配置正确的前提下,不管触发器如何触发,邮件总是发送不出去,但是在CentOS7上面安装的zabbix3.0却可以正常发送邮件。究其原因,是因为zabbix3.0对服务器上的libcurl版本有要求(CentOS6.9上的默认curl版本为7.19.7,而CentOS7.2上的默认libcurl版本为7.29.0),zabbix3.0所要求的的版本说明在zabbix3.0的官方文档上面可以找到

https://www.zabbix.com/documentation/3.0/manual/installation/install,官网指出从zabbix3.0.0以来的libcurl会影响邮件服务器的认证,其版本必须为7.20.0或更高

要想通过邮件发送报警,可以选择的解决方法有两种:自定义邮件报警脚本或者升级libcurl版本。后者从理论来讲当然可以实现,但是升级版本会由于依赖关系变得复杂,因此可以采取第一种解决方法,通过使用python脚本来发邮件

1、web界面新增报警媒介类型

名称自定义即可,类型选择脚本,脚本名称为所写的脚本的名称,这里的python脚本通过qq邮箱来做服务,脚本的三个参数都是zabbix内置变量,分别为:报警收件人:{ALERT.SENDTO},报警标题:{ALERT.SUBJECT},报警内容:{ALERT.MESSAGE},在zabbix中自定义报警媒介的脚本默认存放路径(yum安装zabbix)为/usr/lib/zabbix/alertscripts

添加完报警媒介类型后勾选启用

2、关于脚本

脚本内容不做过多说明,需要了解含义请自行百度,脚本使用的是python语言,在语法上要求较严格。 qq邮箱使用了ssl/tls加密465端口,网易163邮箱使用默认方式25端口,因此脚本内容会有一些差别,脚本如下

[root@zabbix alertscripts]# pwd

/usr/lib/zabbix/alertscripts

[root@zabbix alertscripts]# cat mail_qq.py

#!/usr/bin/python

#coding:utf-8

import smtplib

from email.mime.text import MIMEText

import sys

mail_user = '111111111@qq.com'

mail_pass = 'xxxxxxxxxxx'

 

def send_mail(to_list,subject,content):

me = "zabbix 监控告警平台"+"<"+mail_user+">"

msg = MIMEText(content, 'plain', 'utf-8')

msg['Subject'] = subject

msg['From'] = me

msg['to'] = to_list

try:

s = smtplib.SMTP_SSL("smtp.qq.com", 465)

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])

mail_user为邮箱地址,mail_pass为邮箱服务商提供的客户端授权码,获得授权码的方式也可以参考百度,要说明的是目前网易邮箱客户端授权码支持自定义,qq邮箱客户端授权码不支持自定义,需要生成、这里也附上使用163邮箱的脚本

[root@zabbix alertscripts]# cat mail_163.py

#!/usr/bin/python

#coding:utf-8

import smtplib

from email.mime.text import MIMEText

import sys

mail_user = '1232323232@163.com'

mail_pass = 'xxxxxxxxxx'

 

def send_mail(to_list,subject,content):

me = "zabbix 监控告警平台"+"<"+mail_user+">"

msg = MIMEText(content, 'plain', 'utf-8')

msg['Subject'] = subject

msg['From'] = me

msg['to'] = to_list

try:

s = smtplib.SMTP("smtp.163.com", 25)

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])

脚本编写完成之后需要为脚本添加执行权限

[root@zabbix alertscripts]# chmod +x mail_qq.py

3、测试

命令行测试脚本能否成功执行

[root@zabbix alertscripts]# ./mail_qq.py xxx@163.com "测试" 'test'

测试参数为三个,分别为收件人邮箱地址,邮件标题,邮件内容

测试的时候如果出现错误提示缺少smtplib,解决方法为使用pip进行安装:pip install smtplib

测试完成了就可以通过zabbix进行触发报警了

通过脚本发送zabbix邮件报警的更多相关文章

  1. 通过脚本发送zabbix微信报警

    实现zabbix通过微信报警的方式也是通过脚本来实现,与邮件报警不同的是,脚本调用的微信的相关接口的获取相对复杂一点 1.申请一个微信公众号(企业号) 申请方法不多说,如果已申请请忽略 2.在微信企业 ...

  2. Zabbix邮件报警配置

    一.安装sendmail或者postfix yum install sendmail #安装 service sendmail start #启动 chkconfig sendmail on #设置开 ...

  3. zabbix 邮件报警(五)

    一.sendEmail配置zabbix邮件报警 1.下载sendEmail: wget http://caspian.dotconf.net/menu/Software/SendEmail/sendE ...

  4. Zabbix 邮件报警示例

     Zabbix 邮件报警示例: 1.编辑 mail.rc 文件添加默认的邮箱配置 # vi /etc/mail.rc set from=1234567@qq.com set smtp=smtp.qq. ...

  5. zabbix邮件报警通过脚本来发送邮件

    zabbix默认邮件报警会将各个报警接收人单独发送邮件,为了使邮件能以群发的方式统一一封邮件发送所有接收人,需要改成脚本的形式: sendemail.py: #!/usr/bin/python imp ...

  6. zabbix利用python脚本发送钉钉报警

    #!/usr/bin/python # -*- coding: utf-8 -*- import requests import json import sys import os headers = ...

  7. Zabbix邮件报警-->Script

    Version:3.0.1 邮件报警有两种media 1.Email zabbix发送报警邮件到指定smtp服务器(使用系统自带的sendmail,发送邮箱是zabbix服务器的本地邮箱账号) 再由s ...

  8. linux中Zabbix邮件报警设置配置步骤

    使用外部邮箱账号发送报警邮件设置 配置Zabbix服务端外部邮箱 vi /etc/mail.rc #编辑,添加以下信息 set from=xxx@163.com smtp=smtp.163.com s ...

  9. zabbix邮件报警设置

    第一.安装邮件发送工具mailx 这里我选择的是mailx,所以的关闭其他的邮件发送工具 service sendmailstop #关闭   chkconfig sendmailoff #禁止开机启 ...

随机推荐

  1. 公路建设 (highway.c/cpp/pas)

    2.公路建设 (highway.c/cpp/pas) 在滨海市一共有 n 个城市,编号依次为 1 到 n,它们之间计划修建 m 条双向道路,其中 修建第 i 条道路的费用为 ci. 海霸王作为滨海市公 ...

  2. TOPCoder(一)Time

         Class: Time Method: whatTime Parameters: int Returns: String Method signature: String whatTime( ...

  3. Educational Codeforces Round 42 (Rated for Div. 2) A

    A. Equator time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  4. Jsoup 标签选择器 选择img标签中src的值

    package com.enation.newtest; import java.io.BufferedReader; import java.io.File; import java.io.File ...

  5. Hibernate中inverse="true"的理解

    Hibernate中inverse="true"的理解 举例如下 转自:http://lijiejava.iteye.com/blog/776587 Customer类: publ ...

  6. inux下设置mysql数据库字符集utf8

    mysql中文乱码解决方法:将mysql数据库编码统一utf8 查看数据库编码: ? 1 <span style="font-size: 16px;"><stro ...

  7. OpenGL入门学习(七)(转)

    http://blog.chinaunix.net/uid-20622737-id-1912803.html 今天要讲的是OpenGL光照的基本知识.虽然内容显得有点多,但条理还算比较清晰,理解起来应 ...

  8. SVN如何进行版本的还原

    http://jingyan.baidu.com/article/d621e8da0d07022865913fa5.html 工具/原料 SVN乌龟软件和相关的文件 百度经验:jingyan.baid ...

  9. Sqlite 约束条件 Constraints

    一.约束 Constraints 我们在数据库中存储数据的时候,有一些数据有明显的约束条件. 比如一所学校关于教师的数据表,其中的字段列可能有如下约束: 年龄 - 至少大于20岁.如果你想录入一个小于 ...

  10. 你不一定知道的、并没有什么卵用的一些python库

    1. delorean,用来处理时间的库 import datetime import pytz # 一般情况下,我们想表示时间的话 est = pytz.timezone("Asia/Sh ...