zabbix3.4实现sendEmail邮件报警 sendEmail是一个轻量级,命令行的SMTP邮件客户端。如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大.这个被设计用在php、bash perl和web站点使用。 请注意,不是sendmail。我第一次看到这个名字,直接yum install -y sendmail了 然后下面就蒙圈了。 下载软件 wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz 创建目录 mkdir /usr/local/bin 解压软件 tar zxf sendEmail-v1.56.tar.gz -C /usr/src 进入目录 cd /usr/src/sendEmail-v1.56 复制文件,并设置权限 cp -a sendEmail /usr/local/bin chmod +x /usr/local/bin/sendEmail 安装组件 yum install perl-Net-SSLeay perl-IO-Socket-SSL -y 进入zabbix自定义的指定目录 可以查看zabbix_server.conf配置文件AlertScriptsPath变量是如何定义的。 cd /usr/local/zabbix/alertscripts/ 编辑脚本 vim sendEmail.sh 内容如下:

#!/bin/bash

to=$1 subject=$2 body=$3 /usr/local/bin/sendEmail -f ieee8023@163.com -t "$to" -s smtp.163.com -u "$subject" -o message-content-type=html -o message-charset=utf8 -xu ieee8023@163.com -xp xxxxxxx -m "$body" -o tls=no

说明: /usr/local/bin/sendEmail -f guoxinjiezz@163.com -t guoxinjiezz@163.com -s smtp.163.com -u "邮件主题" -o message-content-type=html -o message-charset=utf-8 -xu 15838757615@163.com -xp wudang123 -m "邮件内容" -o tls=no

上面有4个地方我用紫色加粗字体表示了 a@domain.com 表示发件人邮箱 smtp.exmail.qq.com 表示邮箱的smtp服务器,因为我是用的腾讯企业邮箱。如果是其他邮箱,需要修改 password 表示发件人邮箱密码

编辑完成后,给脚本权限 chmod +x sendEmail.sh chown zabbix.zabbix sendEmail.sh 手动执行一次脚本,后面的参数分别对应接收人,主题,内容 ./sendEmail.sh c@domain.com test 123 登录c@domain.com的账户,查看邮件是否可以收到 如果脚本执行没有报错,收不到邮件的话,请检查linux网络问题,iptables、selinux是否关闭。 进入zabbix管理页面 点击管理->报警媒介类型 点击最右边的创建媒体类型

输入脚本名称,类型选择脚本 添加以下3个参数,分别对应sendEmail.sh脚本需要的3个参数:收件人地址、主题、详细内容 {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE}

解释:很多人安装zabbix 3.0之后,写的脚本一直发信不成功,手动执行时可以的。 那是因为zabbix3.0之后,可以自定义参数了。所以不写参数,它是不会传参数的。 在2.x版本不存在这个问题,默认会传3个参数。 点击Admin用户

点击添加

选择sendEmail.sh脚本,输入收件人的邮箱地址

点击用户群组,点击zabbix administrator后面的调用模式,点击一下,就启用了

点权限->添加

选择所有

点击更新 点击配置->动作 点击默认的动作

点击动作->编辑

修改持续时间为60秒 修改步骤为3,表示触发3次动作 选择用户Admin 选择仅送到sendEmail.sh 点击更新 解释:默认的步骤是1-1,也即是从1开始到1结束。一旦故障发生,就是执行sendEmail.sh脚本发生报警邮件给Admin用户和zabbix administrator组。 假如故障持续了1个小时,它也只发送一次。如果改成1-0,0是表示不限制.无限发送 间隔就是默认持续时间60秒。那么一个小时,就会发送60封邮件。 如果需要短信报警的话,可以再创建一条新的动作,选择短信脚本。 下面开始测试邮件报警 等待几分钟,就会收到邮件报警了

点击报表->动作日志 可以看到触发动作的次数。只会有3次,除非test主机状态改变,也就是正常的时候,会触发一次,否则不会再触发。

点击 配置->动作->Report problems to Zabbix administrators 在默认信息每一行后面添加<br/> 列如: 故障消息<br/> 主机:{HOSTNAME}<br/> IP:{IPADDRESS}<br/> 监控项:{ITEM.NAME}<br/> 触发器:{TRIGGER.NAME}<br/> 键值:{ITEM.KEY}:{ITEM.VALUE}<br/> 时间:{DATE} {TIME}<br/> 因为我用sendEmail.sh脚本指定格式是html,所以换行就是<br/> 点击更新 再添加几台主机

就这样,邮件报警就写完了 sendEmail发送邮件

概述 最近学习zabbix,想触发告警时发送邮件,准备使用sendEmail发送邮件,原以为很简单的事情,还是踩了一些坑,记录如下。 Step 1 安装sendEmail sendEmail官网 http://caspian.dotconf.net/menu/Software/SendEmail/ 安装方法: wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz tar -xzvf sendEmail-v1.56.tar.gz cd sendEmail-v1.56/ cp sendEmail /usr/local/bin/

wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz tar -xzvf sendEmail-v1.56.tar.gz cd sendEmail-v1.56/ cp sendEmail /usr/local/bin/ Step 2 发送邮件 发送qq邮件: 首先找到qq邮箱smtp设置处,拿到授权码: 登录qq邮箱,设置,找到如下界面

关闭再开启,可获得授权码。 发送: /usr/local/bin/sendEmail -f 1523955650@qq.com \ -t 1523955650@qq.com \ -s smtp.qq.com \ -u "邮件主题"
-o message-content-type=html
-o message-charset=utf-8
-xu 1523955650@qq.com \ -xp pepltaflcvuniied
-m "邮件内容"

sendEmail[1925]: ERROR => Timeout while reading from smtp.qq.com:25 There was no response after 60 seconds. -f 1523955650@qq.com 发件人邮箱 -t 1523955650@qq.com 收件人邮箱 -s smtp.qq.com 发件人邮箱的smtp服务器 -u "邮件标题" 邮件的标题 -o message-content-type=html 邮件内容的格式,html表示它是html格式 -o message-charset=utf8 邮件内容编码 -xu 1523955650@qq.com 发件人邮箱的用户名 -xp pepltaflcvuniied 发件人邮箱smtp授权码 -m "邮件内容" 邮件的具体内容 Timeout?咋回事呢,试用465和587端口,一样不行: /usr/local/bin/sendEmail -f 1523955650@qq.com \ -t 1523955650@qq.com \ -s smtp.qq.com:465 \ -u "邮件主题"
-o message-content-type=html
-o message-charset=utf-8
-xu 1523955650@qq.com \ -xp pepltaflcvuniied
-m "邮件内容"

sendEmail[3950]: ERROR => Timeout while reading from smtp.qq.com:465 There was no response after 60 seconds. 意思是邮件不让发了呗?不纠结了,换163试试。 发送163邮件 找到163邮箱,设置,找到如下图:

开启smtp服务,然后找到客户端授权密码:

1632.png 关闭再开启,可自己设置授权密码。 发送: /usr/local/bin/sendEmail -f 13957348548@163.com
-t 13957348548@163.com
-s smtp.163.com
-u "邮件主题"
-o message-content-type=html
-o message-charset=utf-8
-xu 13957348548@163.com
-xp cloudtest123
-m "邮件内容"

sendEmail[4753]: invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 575. 又怎么了?网上查了下,是perl版本问题,添加 -o tls=no 参数即可解决,参考 https://www.cnblogs.com/fjping0606/p/6774348.html /usr/local/bin/sendEmail -f 13957348548@163.com
-t 13957348548@163.com
-s smtp.163.com
-u "邮件主题"
-o message-content-type=html
-o message-charset=utf-8
-xu 13957348548@163.com
-xp cloudtest123
-m "邮件内容"
-o tls=no

sendEmail[5120]: Email was sent successfully! 查看邮箱验证:

大功告成,下面可以愉快地配置zabbix邮件告警了!

详情请咨询QQ:331586444