一、安装mailx并配置好能够通过第三方发送邮件

yum -y install mailx
vim mail.rc
#在末尾添加如下内容(以163邮箱为例):
#set for zabbix 
set sendcharsets=iso-8859-1,utf-8
#发件人 
set from=xxx@163.com
#smtp服务器地址
set smtp=smtp.163.com
#需要登录认证
set smtp-auth=login
#认证邮箱
set smtp-auth-user=xxx@163.com
#授权码
set smtp-auth-password=xxxxx
 
#用如下命令测试发邮件,能发过去就算成功:
echo "zabbix test mail" |mailx -s "zabbix" XXXX@163.com

二、创建发送邮件脚本

mkdir -p /etc/zabbix/scripts
cd /etc/zabbix/scripts
vim send_email.sh
#!/bin/bash
#to_email_address=$1 # 收件人Email地址,zabbix传入的第一个参数
subject=`echo $2 | tr '\r\n' '\n'` # 邮件标题,zabbix传入的第二个参数
message=`echo $3 | tr '\r\n' '\n'` # 邮件内容,zabbix传入的第三个参数

file_name="/tmp/send_email.log"
if [ ! -f $file_name ];then
touch $file_name
chmod 777 $file_name
fi
echo `date +"%F %T"` >> $file_name
echo "----------" >> $file_name
echo "收件人:$1" >> $file_name
echo "邮件标题:$subject" >> $file_name
echo "邮件内容:$message" >> $file_name
echo "----------" >> $file_name
echo "${message}" | mail -s "${subject}" $1 >> $file_name 2>&1

chmod +x send_email.sh
chown Zabbix:Zabbix send_email.sh

注意:脚本里面收件人地址如果用变量赋值则不能加双引号,这个是错误550 Invalid User的来源

三、Zabbix修改脚本配置目录

vim /etc/zabbix/zabbix_server.conf
…
AlertScriptsPath=/etc/zabbix/scripts
…
 
systemctl restart Zabbix-server

四、Zabbix设置脚本方式调邮件报警

4.1 添加报警媒介

管理->媒介->创建媒介类型。类型选择脚本,脚本名称是之前编辑的脚本名称。脚本的三个参数:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}。最后点击添加(如果修改已有的就是更新)。

Zabbix利用脚本方式实现邮件报警_邮件报警

4.2 设置告警用户

管理->用户->选择对应用户,报警媒介的类型为之前新添加的报警媒介名称

Zabbix利用脚本方式实现邮件报警_Zabbix_02

4.3 设置连续报警动作

配置->动作->触发器动作->创建动作。这里需要设置连续报警。连续报警的流程见下图:

Zabbix利用脚本方式实现邮件报警_Zabbix_03

操作部分的自定义消息内容如下(第1步和第2步一样):

主题:服务器{HOSTNAME}发生:{TRIGGER.NAME}故障!
消息:
  触发器状态:{TRIGGER.STATUS}
  严重程序:{TRIGGER.SEVERITY}
  告警信息:{TRIGGER.NAME}
  告警主机:{HOST.NAME}
  问题详情:{ITEM.NAME}:{ITEM.VALUE}
  主机IP:{HOST.IP}
  告警时间:{EVENT.DATE} {EVENT.TIME}
  事件ID:{EVENT.ID}

Zabbix利用脚本方式实现邮件报警_邮件报警_04


Zabbix利用脚本方式实现邮件报警_脚本_05


对以上步骤的说明:

  • 步骤 1:设置时间为 60 秒,即 60 秒之后没有解除报警则执行操作步骤 2。默认操作步骤持续时间:60,单位默认为秒
  • 步骤 2:步骤 2 - 0 意思为在没有解除报警的情况下每隔 60 秒就发送一次报警信息(因为使用了默认动作)
  • 发送到用户:这里用户需要有超级管理员权限才可以接收到报警信息

4.4 设置恢复操作

与上一步类似,不过自定义消息内容有区别。

主题:服务器{HOSTNAME}的{TRIGGER.NAME}故障已恢复!
消息:
  主机IP:{HOST.IP}
  恢复时间:{EVENT.DATE} {EVENT.TIME}
  恢复等级:{TRIGGER.SEVERITY}
  恢复信息:{TRIGGER.NAME}-{ITEM.VALUE}
  事件ID:{EVENT.ID}

Zabbix利用脚本方式实现邮件报警_邮件报警_06


最后记得点击添加或更新。

五、验证

先将目标机器的网卡禁掉,使其ping不通,查看是否有报警邮件以及1分钟不解决是否再接着发。之后再启用目标机器的网卡,看看恢复操作后邮件会不会发来。

Zabbix利用脚本方式实现邮件报警_邮件报警_07