前面已经发布了cacti的安装一文,部署完之后也运行好好的(centos5.5 cacti-0.8.7g),可是今天上班来看监控时,cacti已经打不开,并且也不出图,查看cron定时任务也在运行,听同事说周末放假时,公司机房(内部使用)停了一次电,因此怀疑是停电造成的缘故,于是查看cacti日志(cacti.log),发现里面有大量的错误信息,而且错误开始的时候正是上周五快下班时出现的。排除停电原因。但是查了好久也没找到找到原因,结果在同事的帮助查找下最终找到了原因。如下:
cacti.log日志文件里出现大量错误信息:
CMDPHP: Poller[0] ERROR: Detected RRDtool Crash on 'create/usr/local/cacti/rra/192_168_1_151_traffic_in_33.rrd --step 300
Last command was 'update /usr/local/cacti/rra/192_168_1_151_hdd_free_34.rrd --template hdd_used:hdd_free*********************
CMDPHP: Poller[0] ERROR: Detected RRDtool Crash on 'update
/usr/local/cacti/rra/nbr1200_traffic_in_73.rrd --template traffic_out:traffic_in********* Last command was ''
手动执行命令: /usr/bin/php /usr/local/cacti/poller.php 也报错,说是文件/usr/local/cacti/include/plugins.php里
定义的数组array有问题,是第31行,本人也看不懂,如下:
$oldplugins = read_config_option('oldplugins');
$oldplugins = explode(',', $oldplugins);
$plugins = array_merge($plugins, $oldplugins);
于是跳过,因为rrd文件不更新,于是想到可能跟rrdtool的执行有关,于是查看rrdtool文件执行时所用的库文件
# ldd /usr/bin/rrdtool
提示有库文件找不到;
linux-gate.so.1 => (0x00359000)
librrd.so.2 => /usr/lib/librrd.so.2 (0x006e5000)
libfreetype.so.6 => not found
libpng12.so.0 => /usr/lib/libpng12.so.0 (0x0021f000)
libz.so.1 => /usr/lib/libz.so.1 (0x0095f000)
libart_lgpl_2.so.2 => /usr/lib/libart_lgpl_2.so.2 (0x07d99000)
libm.so.6 => /lib/libm.so.6 (0x008af000)
libc.so.6 => /lib/libc.so.6 (0x00761000)
/lib/ld-linux.so.2 (0x0073e000)
libfreetype.so.6 => not found
libfreetype是cacti运行时所需要的文件,这里找不到
执行命令:LD_DEBUG=libs /usr/bin/rrdtool
可以查找当rrdtool文件运行时所查找的路径,提示是到/lib /usr/lib下去寻找,而该路径下均没有此文件,于是执行以下命令查找在哪里:
# locate libfreetype.so.6
/usr/local/lib/libfreetype.so.6
/usr/local/lib/libfreetype.so.6.5.0
/usr/local/lib/ImageMagick-6.2.8/lib/libfreetype.so.6
因此可以看出问题所在,rrdtool运行时是到/lib /usr/lib下去找,并没有到/usr/local/lib下去寻找,所以解决办法由如下两个:
1)cp /usr/local/lib/libfreetype.so.6 /usr/lib (复制过去)或者
2)ln -s /usr/local/lib/libfreetype.so.6 /usr/lib/libfreetype.so.6 (建立软连接)
做完以上步骤之后,cacti可以出表格了(之前表格也没有),但是cacti还是一直没有数据,接着查看日志:
POLLER: Poller[0] WARNING: Cron is out of sync with the Poller Interval! The Poller
Interval is '300' seconds, with a maximum of a '300' second Cron, but 405 seconds have
passed since the last poll!
(大概意思是poller执行时间超过了300s),于是抱着试一试的想法把每5分钟执行一次的命令:
*/5 * * * * /usr/bin/php /usr/local/cacti/poller.php > /dev/null 2>&1
改成每1分钟一次,改完后重启crond服务,结果问题得以解决,在正常之后又改回5分钟,运行正常。
在把问题解决之后,顺便看了一下历史命令记录,结果是公司开发人员把之前装好的libfreetype给卸载了,又重新换了一个目录安装,就造成了cacti不出图的问题。嗨,真没办法搞开发的,谁叫咱运维是为他们服务的呢!!!
因此把解决问题的整个经过写下来,方便以后出现同样问题时能够尽快解决,也希望帮助出现同样问题的朋友!