题记:笔者基于Centos7+Zabbix3.4环境,搭建了邮件监控报警系统。
先介绍一下部署环境:
- Centos7.5.1804
- Zabbix3.4
- MySQL5.7
- QQ邮箱(邮件环境)
部署步骤:
一、搭建Zabbix环境(zabbix3.4+MySQL5.7)
这一部分请读者自行搭建,本文不赘述这一块的内容。
二、安装发送邮件必要的包
[root@zabbix ~]# yum -y install mailx
[root@zabbix ~]# rpm -qa | grep mailx
mailx-12.5-19.el7.x86_64
三、编辑配置文件
修改配置文件/etc/mail.rc,在末尾添加如下内容!(如果没有这个文件就新建一个)
set bsdcompat
set from=124000000@qq.com #发送预警邮件的邮箱
set smtp=smtp.qq.com #QQ邮箱smtp服务器的域名
set smtp-auth-user=124000000@qq.com #授权用户名,可以设置成与from参数一致
set smtp-auth-password=qvyypqiujutvibcd #授权码,大多数邮箱不依赖密码授权,而是授权码
set smtp-auth=login #授权登录
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/ #存放QQ邮箱SSL证书的位置
四、获取证书及储存证书
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt certutil -L -d /root/.certs
cd /root/.certs
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
五、使用命令测试看看是否成功
mail -s "Topic:test" "收件人的邮箱" < "测试内容" >> /dev/null
# 加上>>/dev/null 是为了避免收到证书警告及提示
测试成功!
六、配置zabbix监控项+触发器+邮件动作
1、创建监控项Item和触发器Trigger
2、创建报警媒介类型、动作
这里使用的是脚本类型的邮件发送方式,通过编写bash脚本,实现邮件的发送。在/usr/lib/zabbix/alertscripts下新建sendmail.sh文件,供报警媒介调用。具体脚本请详见下面代码:
#!/bin/bash
export LANG=en_US.UTF-8
to=$1
subject=$2
messages=$3
echo "$messages" > /tmp/zabbix_sendmail.tmp
dos2unix /tmp/zabbix_sendmail.tmp
mail -s "$subject" "$to" < /tmp/zabbix_sendmail.tmp >> /dev/null
# 最后面加上>>/dev/null是避免证书警告等提示信息
默认标题: Problem: {TRIGGER.NAME}
{TRIGGER.STATUS},服务器:{HOSTNAME1}发生:{TRIGGER.NAME}故障!
告警主机:{HOSTNAME1},IP地址:{HOST.CONN}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
默认标题:Resolved: {TRIGGER.NAME}
{TRIGGER.STATUS},服务器:{HOSTNAME1}发生:{TRIGGER.NAME}故障!
告警主机:{HOSTNAME1},IP地址:{HOST.CONN}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
最后一步,配置用户模块的报警媒介。整体的预警过程是:当监控项Items异常到达了触发器Trigger的阈值时,会触发动作模块,在动作模块中匹配触发器类型、通知用户及通知方式,最终调用报警媒介预警信息!
七、实现效果