简介

  之前的文章中介绍了zabbix的配置和使用方法,同时也间接的提到了zabbix的报警方式。zabbix可以支持多种报警方式,在初始化后系统默认支持邮件报警(相对而言,邮件方式报警是最便宜最方便的)。但是从实际使用的角度来看,这种方式过于简单。原因在于它不支持邮件的用户验证,在今天不验证的邮件太少了(同时也太不安全了),而要在本机建一个邮件服务器又太复杂而且对于接收者邮件很容易被认为垃圾邮件。今天我们可以利用开源的msmtp项目完成邮件报警的操作。

zabbix安装指南:http://waringid.blog.51cto.com/65148/904201

zabbix使用指南:http://waringid.blog.51cto.com/65148/945352

zabbix配置指南续:http://waringid.blog.51cto.com/65148/1104627

zabbix使用手册:http://down.51cto.com/data/462129

zabbix配置手册:http://down.51cto.com/data/469472

安装msmtp

  首先需要下载msmtp这个组件,可以从这里下载(http://msmtp.sourceforge.net/)。其实官网的说明中有详细的内容教大家使用。这里仅讲讲需要注意的地方。通过msmtp可以使用gmail的邮件(安全性更高,使用TLS方式连接),当然因为网络的原因(这个原因大家都知道)应用不是稳定,我们可以申请国内的邮箱,例如126或是163或其它。

  安装方式很简单,直接编译安装就可以了,需要注意的是如果要用到tls或是ssl之类的东西的话,需相相关组件的支持,例如openssl、sasl等,这个在编译时会有体现。这些组件可以通过yum的方式安装就不多介绍了。详细的编译指令如下所示:




  1. tar jxvf msmtp-1.4.30.tar.bz2 
  2. cd msmtp-1.4.30 
  3. ./configure 
  4. make 
  5. make install 

  是不是非常简间呢?这里要注意的是文件默认安装到/usr/loca/bin下面,生成的可执行文件是msmtp这个,安装是否成功可以查看下这个文件是否存在。

配置msmtp  

  配置msmtp有几个需要注意的地方,首先它和当前用户相关,如果你运行的指令msmtp没有加配置文件的参数(-C 详情自行help下),它默认取当前用户的主文件夹中(例如root用户则查找/root,zabbix用户则查找/home/zabbix).msmtprc的配置文件,如果没有则无法正常运行。同时需要注意的是用户调用的配置文件同样存在权限问题,如果权限不正确它也没办法正常工作(例如zabbix都是使用zabbix用户权限执行,那么相关的文件就需要配置正常的权限)。




  1. cd /home/zabbix 
  2. vi .msmtprc 
  3. touch /var/log/zext_msmtp.log 
  4. chown zabbix:zabbix /var/log/zext_msmtp.log 
  5. chmod 0600 /home/zabbix/.msmtprc 
  6. chown zabbix:zabbix /home/zabbix/.msmtprc 

配置文件.msmtprc的详细内容如下:




  1. account zabbix                      #调用时的用户 
  2. host smtp.126.com                   #邮件服务器 
  3. port 25 
  4. from
  5. auth login                          #验证方式 
  6. tls off
  7. user
  8. password
  9. logfile /var/log/zext_msmtp.log     #记录日志 

 配置zabbix  

  首先创建报警脚本,报警脚本在zabbix中的存放位置是由zabbix_server.conf中参数指定的(如果脚本存放的位置和权限不正确将无法正常工作),对如何查看和更改脚本的存放位置可以参考之前的内容。这里假设你的设定是和我一致的。指令如下:




  1. vi /usr/bin/zext_msmtp.sh 
  2. chmod 755 /usr/bin/zext_msmtp.sh 
  3. chown zabbix:zabbix /usr/bin/zext_msmtp.sh 

  脚本的内容如下:




  1. #! /bin/sh 
  2. DEBUG=1 
  3. if [ $DEBUG -gt 0 ] 
  4. then
  5. exec
  6. set
  7. fi 
  8. FROM='zabbix_myj@126.com'
  9. MSMTP_ACCOUNT='zabbix'
  10. # Parameters (as passed by
  11. #  $1 : Recipient 
  12. #  $2 : Subject 
  13. #  $3 : Message 
  14. recipient=$1 
  15. subject=$2 
  16. message=$3 
  17. date=`date --rfc-2822`
  18. sed 's/$/\r/' <<EOF | /usr/local/bin/msmtp --account $MSMTP_ACCOUNT $recipient
  19. From: <$FROM> 
  20. To: <$recipient> 
  21. Subject: $subject 
  22. Date: $date
  23. $message 
  24. EOF 

  完成了上面的操作后,剩下的事情就只需要在zabbix中操作就可以了,首先以管理员(admin)登陆zabbix,在Administration/Media Types这个页面中添加一种媒体类型,如下图所示。

zabbix 日志检测触发器 zabbix触发器动作及邮件报警_运维

  然后在个人用户的管理界面中添加一种报警媒体,在类型中选取上面添加的报警方式,在联系方式的地方填写收件人的邮箱地址,如下图所示。

zabbix 日志检测触发器 zabbix触发器动作及邮件报警_zabbix 日志检测触发器_02

  最后你只需要调整一下监控内容中的action就可以完成整体的报警动作了。对于action可以在中间加入邮件Priority级别。例如X-Priority: 1,这样收到的邮件会自动列入重要的邮件中。对于trigger配置后的图形如下图所示。

zabbix 日志检测触发器 zabbix触发器动作及邮件报警_当前用户_03

  整体设好后你就可以通过查看邮件来验证成果了,当然中间如果存在问题也可以查看zabbix的server日志和msmtp的配置日志,如下图所示。

zabbix 日志检测触发器 zabbix触发器动作及邮件报警_当前用户_04

通过这个软件可以实现带验证功能的邮件报警,至少在zabbix改进邮件报警前它还是很有用武之地的。