记一次zabbix排错过程
zabbix用了也有一段时间,基本上大大小小的报错都接触过。我个人有个习惯,偶尔会去tail -f 一下zabbix_server的日志,可能是强迫症的关系,不喜欢看到日志有任何报错信息。
本来10.1应该放假,但是临回家前一天的时候是突然发现日志中频繁曝出以下这条报错。
zabbix_server [4615]: ERROR [file:json.c,line:714] Something impossible has just happened.
zabbix_server [4615]: ERROR [file:json.c,line:714] Something impossible has just happened.
虽然暂时没发现对zabbix整体运行有什么影响,但是日志中频繁的报错让我很纠结,当时要赶火车回家过节,所以就暂时没管,到家后总是心里惦记着这件事,晚上无聊
顺便连到服务器上分析一下。先根据报错谷歌了一下,没什么大的发现。好吧,我们去看看json.c里的源码714行这地方系干嘛的。
# locate json.c /workspace/download/redis-2.8.7/deps/lua/src/lua_cjson.c /workspace/zabbix-2.0.11/src/libs/zbxjson/json.c
以下是这行附近的代码,尼玛我擦这我那能看懂啊。 木办法c语言是弱项好吧,我没办法了。我只好开启我们zabbix最牛逼的Debug功能了。
713 default: 714 THIS_SHOULD_NEVER_HAPPEN; 715 }
修改配置文件,重启zabbix-server,日志瞬间暴涨,开始对日志进行过滤,等待着报错的出现。
#tail -f zabbix_server.log | grep "Something impossible has just happened."
报错出现后,我手动吧日志拉到了本地,咱们来看看到底是什么情况。
4615:20141002:002356.188 In lld_check_record() jp_row:'{"{#API_WEB}\}":"getSecretKey"}' 4684:20141002:002356.188 query [txnlev:0] [select min(clock) from history where itemid=24155] zabbix_server [4615]: ERROR [file:json.c,line:714] Something impossible has just happened.
4559:20141002:002447.962 In substitute_discovery_macros() data:'{#SERVICES_METHODS}' zabbix_server [4559]: ERROR [file:json.c,line:714] Something impossible has just happened.
从以上日志分析出,每当执行到有关这两个自动发现所获取的变量时就会报 Something impossible has just happened.
这条错误,想了一下这两个是前几天给某个开发所添加的自动监控一些api接口的监控程序。我先手动把这两个api相关监控都停了
发现不报错了,又仔细看了一下一上的发现一个可疑的地方,下面这个括号里的API_WEB后边多了一个"\}"
{"{#API_WEB}\}":"getSecretKey"}'
基本上问题已经定位了,在自动发现接口的脚本里,多写了一个"\}"导致了以上报错。
登录到服务器修改了脚本。日志里不在报错,恩恩。。困扰了2天的问题终于静下心来搞定了。搞定后心情大好,抽根烟舒服舒服然后汤杯我碎觉~! =^_^=