Zabbix 3.0.9 邮件报警配置
Zabbix 邮件报警配置看似简单,其实不然;折腾1天终于实现了报警机制,今天总结在此以备查阅。
一、 环境说明及配置简述
环境说明:zabbix服务端、客户端都已部署完成并zabbix监控正常运行。
zabbix 服务端:Centos 7.3 zabbix 客户端:Centos6.5
实验目的:在zabbix服务端设置邮件报警,当被监控主机宕机或者达到触发器预设值时,会自动送报警邮件到指定邮箱。
二、邮件报警有两种情况:
1、使用zabbix服务器本地邮箱账号发送邮件
zabbix服务端只是单纯的发送报警邮件到邮箱,发送的账号是zabbix服务端的本地邮箱账号(如:root@localhost),只能发送,不能接受邮件。
2、使用互联网邮箱账号发送邮件
使用一个可以在互联网上正常收发邮件的账号(如:aaa@163.com),通过zabbix服务器端设置,使其能够发送报警邮件到指定邮箱(bbb@163.com)。
三、 使用互联网邮箱账号发送邮件之mailx 服务
1、 service sendmail stop /关闭sendmail服务
servicepostfix stop /关闭postfix服务
chkconfigsendmail/postfix off /关闭开机启动
2、 安装邮件发送工具mailx
yuminstall mailx && mailx –v 查看版本信息
echo“zabbix test mail”|mail –s “zabbix”aaaa@163.com
3、 配置zabbix 服务端外部邮箱
打开 vi /etc/mail.rc 如果不存就手动创建,内容如下:
setsendcharsets=iso-8859-1,utf-8
setfrom =xxxx@163.com
setsmtp=smtp.163.com:25
set smtp-auth-user=xxxx@163.com /认证用户
setsmtp-auth-password=xxxx /认证密码
4、 测试邮件是否可以发送
echo“zabbix test”| mail –s “zabbix” yyyy@163.com
这时候yyyy@163.com就回收到xxxx@163.com的测试邮件
5、 编写发送邮件脚本
进入/usr/lib/zabbix/alertscripts 创建脚本sendmail.sh ,内容如下:
echo“$3”|mail –s “$2” “$1”
上面三个参数分别是,$3邮件内容,$2 邮件主题,$1收件人地址
脚本路径可以自定义,修改zabbix_server.conf 配置文件
6、 配置web页面
1) 创建媒介类型
2) 给用户添加媒介
3) 创建动作
四、使用互联网邮箱账号发送邮件(使用sendEmail邮件报警,重点掌握)
1)、下载sendemail 并安装软件(注:不是sendmail哦)
wget http://caspian.dotconf.NET/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
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
安装2个依赖包
yum install perl-Net-SSLeay perl-IO-Socket-SSL-y
find / -type d –name“alertscripts”
/usr/lib/zabbix/alertscripts 脚本文件存放的路径
cd/usr/lib/zabbix/alertscripts
2)、编辑脚本文件
vi sendmail.sh
#!/bin/bash
to=$1
subject=$2
body=$3
/usr/local/bin/sendEmail -o tls= no -f 发件人@163.com -t "$to"-s smtp.163.com -u "$subject" -omessage-content-type=html -o message-charset=utf8 –xu 发件人@163.com –xppassword -m "$body"
脚本解释:
-f 发件人邮箱 ,zabbix以那个邮箱发信
-ssmtp.163.com ,表示邮箱的smtp服务器,我这里用163的邮箱
-xu 发件人邮箱 , 这里是对发件人邮件的验证信息
-xppassword ,邮箱密码,如果是腾讯的邮箱,应该换成(授权码)
编辑完成后,给脚本权限
chmod +x sendmail.sh
chown –Rzabbix.zabbix sendmail.sh
3)、需解决的问题:
1、 需要修改sendemail中的一行,在配置完成后,进行邮件测试时,出现第一个报错,应该是sendemail软件和perl5里面ssl版本不兼容导致的,通过修改sendemail里面的内容可以解决这个问题,后续的兼容性问题要等到perl5的版本升级后才能解决。
2、 在se ndemail中1906行的内容,从
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version =>'SSLv3 TLSv1')) {
修改为
if (! IO::Socket::SSL->start_SSL($SERVER)) {
即不指定SSL的版本,让程序来自己选择。这样修改以后可以发送邮件,但还有提示信息,不影响邮件功能的使用
3、 经测试,163、126的邮箱不适用SSL加密可以正常发送邮件,但是需要在sendemail.sh脚本中加上 –o tls=no 这一行,才能正常发送邮件。(如果要使用加密模式测试126邮箱,应改为-o tls=yes).
而对QQ邮箱,经过测试发现,必须使用SSL加密,因此需要使用-o tls=yes/auto (这两个参数选择一个即可)才能正常发送邮件。
同时,不管你使用163还是QQ邮箱,都必须开启pop3服务,而且QQ邮箱还要求使用第三方客户端发送邮件时必须使用”授权码”登录,使用账号密码验证时会出现错误。邮箱授权码在设置邮箱是会提供。
经过上面三个问题,修改sendemail代码、配置tls、然后设置授权码后,就可以测试邮件发送功能了,测试命令如下:
# sh sendemail.sh liudehua@163.com 邮件主题 邮件内容
发送成功后会有类似的提示:Email was sentsuccessfully! ;查看收件箱即可。
4)、web端配置
上面脚本配置好后,就要在web端添加报警媒介---添加用户---定义动作
1)媒介,点击管理---报警媒介---创建媒介类型,进入创建页面,然后输入名称“邮件报警脚本”,类型选择脚本,名称选择mail.sh,点击添加按钮,添加三个脚本参数,分别是{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESAGE},分别对于mail.sh中的to、subject和body。添加完成后点下面的更新按钮,我们的报警媒介就创建完成了
2)用户,创建好报警媒介后,就需要将报警媒介关联到我们的用户。点击管理,用户,然后选择我们的用户linux,点击用户名就进入到用户配置界面。点击报警媒介,然后点添加,选择我们上一步创建的邮件报警脚本,输入收件人,选择报警时间和类型,然后点击更新,就将创建好的报警媒介关联到我们的用户上面了
3)动作,创建一个触发动作,即系统出现故障时,触发这个动作,然后给我们的邮箱发送报警邮件。点击配置,选择动作,然后点击右边的创建动作
在动作这一页名称中写入我们定义的动作名,勾选恢复信息,即系统恢复正常时也发送邮件。然后在条件里添加需要的触发报警条件,我这里是在监控的设备出现严重故障以上时,才报警。最后选择操作页面,默认操作步骤持续时间60秒,步骤1-3,步骤持续时间60s,发送到用户群组选择Zabbix administrator,用户选择我们刚刚关联报警媒介的linux用户,仅送到一栏选择邮件脚本报警。点击添加按钮新增动作。
5)、测试报警
1)、因为我们在上面设置触发动作的条件是出现严重故障时,才会触发报警动作。我们这里选择关掉一台服务器的zabbix-agent来触发这个故障。从下图中可以看到agent已经正常关闭,等到一定时间后触发报警
2)、在监控页面上过了5分钟以后就看到了报警信息,然后再过一会儿也看到了邮件正常发送的信息,这个地方要注意的是,上面修改了报警脚本目录后,一定要重启zabbix_server进程,如果不重启的话,会发现找不到这个脚本,因为默认的脚本是位于/usr/local/zabbix/share/zabbix/alertscripts/目录下。
参看文章:https://jingyan.baidu.com/article/4e5b3e192a1eda91911e247a.html
http://blog.csdn.net/xiegh2014/article/details/52118643
http://www.111cn.net/sys/linux/68096.htm