在Zabbix服务端设置邮件报警,当被监控主机宕机或者达到触发器预设值时,会自动发送报警邮件到指定邮箱。
邮件服务可以使用系统自带的邮件服务来发送邮件或者使用其他邮件服务调用第三方邮件来发送警告邮件。
一、开启发件服务器SMTP功能
这里发送邮件的服务器选比较稳定可靠的网易邮箱服务器进行报警邮件的发送工作。
进入163网易免费邮箱,然后点击左侧:POP3/SMTP/IMAP
如上,根据提示开启POP3/SMTP服务,我的已经开通过,这里检查一下。
二、安装邮件服务软件
2.1 安装mailx、sendmail、sendmail-cf
yum install s-nail-14.9.22-6.el9.x86_64 sendmail sendmail-cf
2.2 修改配置文件 /etc/mail.rc、/etc/mail/sendmail.mc、/etc/php.ini
注意 php.ini 里面sendmail值会影响发送邮件
[root@zabbix-server mail]# cat /etc/mail.rc
set from=fcj_xun@163.com
set smtp=smtp.163.com
set smtp-auth-user=fcj_xun@163.com
set smtp-auth-password=写自己的客户端授权码
set smtp-auth=login
/etc/mail/sendmail.mc 文件不做修改
cat /etc/php.ini
....
:sendmail_path = /usr/sbin/sendmail -t -i
....
2.3 确认 /etc/hosts 文件是否填写主机名
[root@zabbix-server mail]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 zabbix-server
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
注意 hosts 文件会影响邮件发送快慢问题
2.4 启动 sendmail 服务
systemctl start sendmail
2.5 测试发送邮件
echo "zabbix_test" | mailx -s "zabbix" xxx@163.com
发送成功
三、配置报警媒介
3.1 登录 zabbix 页面
管理 —> 媒介 —> 选择 Email —> 克隆
3.2 克隆Email
名称:My_Emal
类型:电子邮件
SMTP服务器:smtp.163.com
SMTP服务器端口:25
SMTP HELO:我的监控平台告警
SMTP电邮:xxx@163.com
安全连接:无
认证:无
消息格式:文本
3.2.1 选择消息模板
3.2.2 移除后面3个,只保留问题和问题恢复。
3.2.3 切换到选项 设置发送邮件的次数为3次,间隔20s发1次。
四、在zabbix服务端写邮件发送脚本
4.1 编写脚本
[root@zabbix-server zabbix]# cat /usr/lib/zabbix/share/zabbix/alertscripts/sendmail.sh
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mailx -s "${subject}" $1 >>/tmp/sendmail.log 2>&1
4.2 创建 log日志文件、授权执行权限
touch /tmp/sendmail.log
chmod 777 /tmp/sendmail.log
chown zabbix:zabbix /usr/lib/zabbix/share/zabbix/alertscripts/sendmail.sh
chmod u+x /usr/lib/zabbix/share/zabbix/alertscripts/sendmail.sh
4.3 修改zabbix_server.conf文件
添加一行:AlertScriptsPath= /usr/lib/zabbix/share/zabbix/alertscripts
[root@zabbix-server zabbix]# cat /usr/lib/zabbix/etc/zabbix_server.conf
ListenPort=10051
LogFile=/usr/lib/zabbix/logs/zabbix_server.log
PidFile=/usr/lib/zabbix/logs/zabbix_server.pid
DBName=zabbix
DBUser=zabbix
DBPassword=test
DBSocket=/data/mysql8.0.31/3307_3307/data/mysql.sock
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
StartDiscoverers=5
AlertScriptsPath=/usr/lib/zabbix/share/zabbix/alertscripts
4.4 测试脚本
[root@zabbix-server zabbix]# /usr/lib/zabbix/share/zabbix/alertscripts/sendmail.sh xxx@163.com "邮件标题" "邮件内容"
发送成功
五、使用脚本方式增加报警媒介
5.1 创建告警媒介
5.2 指定报警用户
六、创建动作
6.1 配置 —> 动作 —> 触发器动作 —> 创建动作
6.1.1 切换操作选项
选择操作 —> 添加 —> 操作详情
自定义消息内容:
主题:Problem:{EVENT.NAME}
消息:Problem started at {EVENT.TIME} on {EVENT.DATE}
Problem name:{EVENT.NAME}
Host:{HOST.NAME}
Severity:{EVENT.SEVERITY}
Original problem ID:{EVENT.ID}
{TRIGGER.URL}
或者
问题:{EVENT.NAME} 主机:{HOST.NAME}
问题:{EVENT.NAME}
主机:{HOST.NAME}({HOST.IP})
告警级别:{EVENT.SEVERITY}
开始时间:{EVENT.DATE} {EVENT.TIME}
当前状态:{EVENT.OPDATA}
事件 ID:{EVENT.ID}
切换恢复操作 —> 添加 —> 操作详情
自定义消息内容
主题:Resolved:{EVENT.NAME}
消息:Problem has been resolved at {EVENT.RECOVERY.TIME} on
{EVENT.RECOVERY.DATE}
Problem name:{EVENT.NAME}
Host:{HOST.NAME}
Severity:{EVENT.SEVERITY}
Original proble ID:{EVENT.ID}
{TRIGGER.URL}
或者
问题已解决:{EVENT.NAME} 主机:{HOST.NAME}
问题:{EVENT.NAME}
主机:{HOST.NAME}({HOST.IP})
告警级别:{EVENT.SEVERITY}
解决时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间:{EVENT.DURATION}
事件 ID:{EVENT.ID}
切换更新操作 —> 添加 —> 操作详情
自定义消息内容
主题:Resolved:{EVENT.NAME}
消息:Problem has been resolved at {EVENT.RECOVERY.TIME} on
{EVENT.RECOVERY.NAME}
Problem name:{EVENT.NAME}
Host:{HOST.NAME}
Severity:{EVENT.SEVERITY}
Original problem ID:{EVENT.ID}
{TRIGGER.URL}
七、测试
测试成功