zabbix无法连接到数据库
监控大屏上那个红色告警跳出来的无法时候,我正在喝第三杯咖啡。连接Zabbix server连不上数据库了,到数页面直接甩给我一串"SQLSTATE[HY000] [2002] Connection refused"。据库 一开始我以为又是无法密码过期这种老问题。跑到数据库服务器上敲了句`mysqladmin ping`,连接结果人家活得好好的到数,响应时间1毫秒。据库那问题出在哪?无法Zabbix server和数据库之间的网络?我ping了一下,通了,连接延迟也就0.3毫秒。到数这就邪门了。据库 我盯着zabbix_server.conf里的无法DBHost参数看了半天。写的连接是localhost。等等,到数localhost?Zabbix server进程跑在这台机器上,但数据库在另一台机器上啊。我赶紧把DBHost改成那台数据库服务器的IP。重启服务,告警消失。就这么简单?对,就这么简单。但你要是没注意到这个细节,能折腾你一下午。 后来我回想起来,这配置是三个月前从测试环境复制过来的。测试环境里数据库和Zabbix装在同一台机器上,localhost没问题。生产环境拆开了,配置没跟着改。这种低级错误,谁都会犯,但坑就坑在它不会第一时间暴露——直到某天某个进程重启,或者连接池耗尽。 还有一次,另一个项目组遇到的更隐蔽。数据库连接数被占满了。Zabbix的监控项太多,每个都开一个连接,默认连接池100,结果数据库的max_connections才100。两边一撞车,Zabbix直接罢工。日志里全是"Too many connections"。这种时候你得去数一下监控项数量,看看是不是有哪个模板被批量套到了几百台主机上。对,就是那个"Template OS Linux"——你要是给300台机器都套上它,每个机器默认几十个监控项,连接数瞬间爆炸。 数据库本身也可能有问题。有个客户遇到过MySQL的`wait_timeout`设置得太短,只有10秒。Zabbix的脚本执行稍微慢点,连接就被数据库主动掐断。然后Zabbix重连,再被掐,循环往复,日志刷得飞快。把`wait_timeout`调到60秒,问题消失。但这不是万能药——如果查询本身有性能问题,调大超时只是把崩溃往后推迟。 排查这类问题,我的习惯是先看日志,再看配置,最后才动数据库。`/var/log/zabbix/zabbix_server.log`永远是第一站。如果里面有"database is down"这种话,别急着重启服务,先确认数据库进程还活着没。有时候是磁盘满了,MySQL直接拒绝写入。`df -h`一看,根分区100%,清理点日志文件,一切恢复。 说到底,Zabbix连不上数据库,九成是配置漂移或者资源耗尽。剩下那一成,可能是数据库自己在闹脾气——但数据库很少无缘无故闹脾气,背后总有原因。你得多问几个"为什么",别急着用重启大法。毕竟,重启能解决80%的问题,但剩下的20%,它会回来找你算账的。
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-