问题现象
zabbix在升级到某个版本后前台页面一直不太正常,dashboard 中经常会提示 permission denied
,但不是持续显示,而是一阵一阵的出现
看浏览器请求,有时候 systeminfo 这个请求可以返回正常的内容,有时候只有样式,但是没有数据,且 message 内容是 permission denied
,应该可以确定是没有获取到数据导致的
排查分析
没有获取到数据,一般有如下可能:
- nginx、php 进程问题,调用 php 或者 php 执行脚本或代码存在权限问题
- 数据库问题,最终 php 代码需要在库中查询数据,但其实有时候查不到
- zabbix产品bug
于是我检查了 nginx, php 的配置,均没有发现任何问题,并且 nginx 的日志基本上都是正常响应,而后我怀疑是php脚本权限问题(或者php执行脚本的用户),所以我直接给了 .php
文件 755 的权限,这样所有用户都不会有执行权限问题了,但是问题仍然没有解决
比较怪异的是,重启 zabbix server 可以保持一段时间的正常显示,大概是十几到二十多个小时,之后又会间断性异常
持续排查
在第一次未果后,我计划尽量减少 zabbix server 端的日志,并且持续观察输出,避免有任何异常被错过,功夫不负有心人,终于发现了这些奇怪的日志:
19030:20240628:134313.575 [Z3005] query failed: [4031] The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior. [select u.userid,u.roleid,u.username,r.type from sessions s,users u,role r where s.userid=u.userid and s.sessionid='d938c03d7d2e857296543a4ec4d78547' and s.status=0 and u.roleid=r.roleid]
19042:20240628:134709.563 [Z3005] query failed: [4031] The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior. [select u.userid,u.roleid,u.username,r.type from sessions s,users u,role r where s.userid=u.userid and s.sessionid='ce79c6b9df0683d051e2ee318a55d54d' and s.status=0 and u.roleid=r.roleid]
19013:20240628:134809.545 [Z3005] query failed: [4031] The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior. [select u.userid,u.roleid,u.username,r.type from sessions s,users u,role r where s.userid=u.userid and s.sessionid='ce79c6b9df0683d051e2ee318a55d54d' and s.status=0 and u.roleid=r.roleid]
这个日志初次看起来似乎也跟权限问题挨不上边,都是一些会话中断的问题。不过如果细细想来,如果zabbix连接数据库的会话被异常中断,那么是否可能导致代码无法查询出来数据并且提示权限不足呢? 这完全是有可能的
所以我根据上面的错误进行了检索,发现了可能的如下问题:
https://support.zabbix.com/browse/ZBX-23145
这个帖子上面的问题并不与我们完全一致,但是错误的内容可能是相似的,都是数据库连接中断并且无法重连,而且在对话中有一个重点:
Error 4031 ER_CLIENT_INTERACTION_TIMEOUT
这个基本上就是我们的日志错误内容,根据连接可以进入到mysql的异常说明中:
https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_client_interaction_timeout
结合起来可以初步断定是这个问题
解决方法
这个问题是特定 zabbix server 版本 与 mysql 版本碰撞在一起的问题,升级任意一个组件都可以解决。在升级到最新版后经过多天的观察,问题不再出现
思考
这个问题一开始确实很奇怪,完全无法确定是哪里的问题,也无法调试代码来判断是哪里返回的异常,最重要的是中间升级2-3个版本也没有解决,查找zabbix permission denied
的问题和解决方法极少。最后还是通过持续的观察和抓住所有可能的异常问题才确定了原因
所以解决问题还是要耐心,不能没有类似参考的例子就放弃解决,问题总是根据不同环境出现不同的现象,要善于持续的追踪、了解、分析问题。
评论