已解决 参考文档
https://support.zabbix.com/browse/ZBX-24657
zabbix昨天下午检测到某个问题已恢复,但未发送恢复通知邮件。今天上午在调查过程中发现:
1,默认动作【Notify system administrators】被停用;
2,在 Zabbix Web 页面使用“名称”筛选该动作时,页面报 500 错误;
3,其他动作筛选正常,只有该动作出现异常。
复现截图与日志:
操作复现场景(页面报错):
https://sharex-uploader.webaegis.jp/display/?id=20250429%2F2f2807c05c873b6408d084c829f4662d.gif
zabbix server上查看nginx错误日志,发现如下信息:
https://sharex-uploader.webaegis.jp/display/?id=20250429%2F8827d077287071dbed672819a9a2449c.png
根据日志定位到:
/usr/share/zabbix/include/actions.inc.php 文件中的:
第 119 行、第 121 行访问了 conditiontype 和 value;
第 277 行使用了 array_key_exists 函数,出错提示为传入了非数组。
数据库分析:
我在阿里云rds中添加了我的本机ip访问权限后,查询了zabbix数据库中的conditions表:
动作【Notify system administrators】的 actionid 为 12;
其条件中存在若干条 conditiontype=0(表示主机组)的记录;
这些记录中的value(即 groupid)对应的主机组,在 hosts_groups 表中 部分已经不存在。
条件表截图:
https://sharex-uploader.webaegis.jp/display/?id=20250429%2Fdfc5e4ba3bfa39f0e132295bd21d7f2f.png
主机组表截图(用于比对 groupid 是否存在):
https://sharex-uploader.webaegis.jp/display/?id=20250429%2F554422df1c8b480a4a8be2e2f3556033.png
初步结论:
怀疑问题原因是:动作【Notify system administrators】中配置了已被删除的主机组作为条件值,导致系统在读取条件并试图渲染时报错,进而引发页面 500 错误。
错误信息