Zabbix6.0邮件报警实战:从配置到自定义监控脚本

张开发
2026/5/31 17:17:18 15 分钟阅读
Zabbix6.0邮件报警实战:从配置到自定义监控脚本
1. Zabbix6.0邮件报警基础环境搭建在开始配置Zabbix6.0邮件报警之前我们需要确保基础环境已经准备就绪。这里假设你已经完成了Zabbix服务端和客户端的部署并且监控系统运行正常。我遇到过很多新手在配置邮件报警时往往忽略了基础环境的检查导致后续步骤出现问题。首先确认Zabbix服务端和客户端的网络连通性。可以通过简单的ping命令测试ping 192.168.0.103如果网络不通邮件报警自然无法正常工作。我曾经在一个项目中花了3个小时排查邮件发送失败的问题最后发现是防火墙阻挡了服务端和客户端的通信。接下来需要检查Zabbix服务运行状态systemctl status zabbix-server systemctl status zabbix-agent确保两个服务都处于active (running)状态。如果服务异常可以尝试重启服务systemctl restart zabbix-server systemctl restart zabbix-agent2. 邮件服务部署与配置邮件服务是Zabbix报警的核心组件。在Zabbix6.0中我们可以使用mailx作为邮件发送工具。这个工具简单易用配置起来也不复杂。安装mailx的命令很简单yum -y install mailx但这里有个坑需要注意不同Linux发行版的包名可能不同。在Ubuntu上对应的包是bsd-mailx。我曾经在CentOS和Ubuntu混合环境中部署时就因为这个差异浪费了不少时间。配置mailx需要编辑/etc/mail.rc文件。以QQ邮箱为例配置如下set fromyour_emailqq.com set smtpsmtp.qq.com set smtp-auth-useryour_emailqq.com set smtp-auth-passwordyour_authorization_code set smtp-authlogin set ssl-verifyignore set nss-config-dir/etc/pki/nssdb/特别注意这里的密码不是QQ密码而是需要在QQ邮箱设置中获取的授权码。很多新手在这里都会犯错直接用QQ密码导致认证失败。测试邮件发送echo 测试邮件内容 | mail -s 测试主题 recipientexample.com如果收到邮件说明配置成功。如果没收到可以查看/var/log/maillog日志文件排查问题。3. Zabbix报警脚本编写与集成Zabbix通过自定义脚本实现邮件报警功能。这个脚本需要放在特定的目录下并设置正确的权限。首先创建报警脚本sendmail.sh#!/bin/bash messagesecho $3 | tr \r\n \n subjectecho $2 | tr \r\n \n echo ${messages} | mailx -s ${subject} $1 /tmp/sendmail.log 21这个脚本做了三件事处理邮件内容中的换行符处理邮件主题中的换行符调用mailx发送邮件并记录日志设置脚本权限很重要chown zabbix:zabbix sendmail.sh chmod x sendmail.sh touch /tmp/sendmail.log chmod 777 /tmp/sendmail.log我曾经遇到因为权限问题导致脚本无法执行的情况所以建议严格按照上述命令设置权限。接下来需要修改Zabbix服务器配置告诉Zabbix脚本的位置。编辑zabbix_server.confAlertScriptsPath/usr/local/zabbix/share/zabbix/alertscripts这个路径必须和实际脚本存放路径一致。修改配置后记得重启Zabbix服务systemctl restart zabbix-server4. Zabbix Web界面配置现在我们可以登录Zabbix Web界面完成最后的配置了。这个部分虽然都是图形化操作但也有很多需要注意的细节。首先配置报警媒介类型进入管理-报警媒介类型点击创建媒介类型填写名称类型选择脚本在脚本名称中输入sendmail.sh添加三个脚本参数{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}然后为用户添加报警媒介进入用户设置-报警媒介点击添加选择刚才创建的媒介类型填写接收报警的邮箱地址设置合适的报警时间配置动作是最后一步进入配置-动作创建新动作设置触发条件和操作在操作中配置发送邮件的具体内容建议同时配置恢复操作这样问题解决时也会收到通知测试时可以手动修改一个监控项的值为触发报警的值看看是否能收到邮件。如果收不到可以检查Zabbix服务器的日志文件/var/log/zabbix/zabbix_server.log。5. 自定义监控脚本集成除了系统自带的监控项我们经常需要监控一些自定义的服务比如Redis。下面以Redis监控为例展示如何集成自定义监控脚本。首先在Zabbix agent端创建监控脚本。这个脚本需要检测Redis服务是否正常运行#!/bin/bash statusps aux|grep redis |awk {print $1}|grep redis redis-cli -h $host -p $port set test 测试 1/dev/null 2/dev/null aredis-cli -h $host -p $port get test 1/dev/null 2/dev/null if [ -z $status ];then echo 0 else if [ -z $a ];then echo 0 else echo 1 fi redis-cli -h $host -p $port del test 1/dev/null 2/dev/null fi这个脚本会返回1表示Redis正常0表示异常。我建议在脚本中加入更多的错误处理比如检查Redis端口是否可连接。然后在zabbix_agentd.conf中添加自定义监控项UserParameterredis.status,sh /usr/local/check/check_redis_status/bin/check.sh注意路径必须是绝对路径。修改配置后重启Zabbix agentsystemctl restart zabbix-agent最后在Zabbix Web界面中创建监控项进入配置-主机选择对应的主机点击监控项-创建监控项填写名称键值输入redis.status设置合适的数据类型和更新间隔创建触发器进入配置-触发器创建新触发器设置表达式比如{host:redis.status.last()}1设置合适的严重级别这样当Redis服务异常时就会触发报警并发送邮件通知。在实际项目中我建议对关键服务都设置这样的自定义监控确保问题能够及时发现。6. 常见问题排查在Zabbix邮件报警配置过程中可能会遇到各种问题。这里分享一些常见问题的解决方法。邮件发送失败首先检查/tmp/sendmail.log日志文件看看是否有错误信息。常见问题包括邮件服务器连接失败检查网络和SMTP配置认证失败检查用户名和授权码是否正确被当作垃圾邮件检查邮件主题和内容脚本执行权限问题如果Zabbix无法执行脚本可以尝试chmod 755 /usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh chown zabbix:zabbix /usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh然后手动测试脚本执行su - zabbix -s /bin/bash /usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh testexample.com 测试 内容报警不触发检查以下几个方面触发器表达式是否正确监控项是否收集到数据动作条件和操作是否配置正确用户报警媒介是否设置自定义监控项不工作可以通过以下命令测试zabbix_agentd -t redis.status如果返回not supported说明agent没有正确加载自定义监控项检查zabbix_agentd.conf配置和脚本路径。在实际运维中我建议定期检查Zabbix的报警功能是否正常可以设置一个测试触发器定期发送测试邮件。这样可以确保当真正的问题发生时报警系统能够正常工作。

更多文章