zabbix3.4实现sendEmail邮件报警

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zabbix3.4实现sendEmail邮件报警相关的知识,希望对你有一定的参考价值。

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 123br/>登录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邮件告警了!

以上是关于zabbix3.4实现sendEmail邮件报警的主要内容,如果未能解决你的问题,请参考以下文章

zabbix3.4实现sendEmail邮件报警

编译安装zabbix3.4及实现邮件报警

11 一步一步Zabbix4.4.0系统教你实现sendEmail邮件报警

Zabbix监控 之sendEmail脚本邮件报警配置

zabbix3.4使用外部邮件报警

zabbix3.4 自定义配置邮件报警