一、安装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}。最后点击添加(如果修改已有的就是更新)。
4.2 设置告警用户
管理->用户->选择对应用户,报警媒介的类型为之前新添加的报警媒介名称
4.3 设置连续报警动作
配置->动作->触发器动作->创建动作。这里需要设置连续报警。连续报警的流程见下图:
操作部分的自定义消息内容如下(第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}
对以上步骤的说明:
- 步骤 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}
最后记得点击添加或更新。
五、验证
先将目标机器的网卡禁掉,使其ping不通,查看是否有报警邮件以及1分钟不解决是否再接着发。之后再启用目标机器的网卡,看看恢复操作后邮件会不会发来。