1、根据kb排查
根据kb http://tskb.sangfor.com/forum.php?mod=viewthread&tid=17272 进行排查,发现环境中现象与kb中一致,使用kb中修复工具进行修复后发现并未起作用,排查发现此脚本编写的是针对6.0.0 以上的版本,5.8.5版本不适用,原因如下。
1.1、修复脚本(fix-all-rrd.sh)中rrdtool工具路径与5.8.5版本不匹配,如下图所示,5.8.5 版本rrd_tool 工具的路径是: /usr/bin/rrd_tool
1.2、查看采集到的数据间隔,使用rrd_tool info hostname 查看,如下图,采集间隔是10S
1.2、5.8.5版本rrd_tool 工具较老,没有 rrdtool tune 功能,所以无法完成对db文件的采集间隔修改。
老版本rrd_tool 没有 rrt_tool tune 功能,所以无法修改rrd文件的心跳间隔。如下图所示。
综上两项kb中修复工具对5.8.5版本不适用。
2、代码排查
由于老版本rrd_tool 工具限制,无法使用工具完成修改,只能通过排查代码来分析,具体是什么地方采集耗时超过10S导致。对代码进行分析和测试,最终发现是采集虚拟机已使用内存的信息耗时较长,单独获取一个虚拟机的已使用内存信息耗时接近0.5S,且每台主机上运行虚拟机个数超过20台,导致单次获取主机上所有虚拟机信息超时,所有的采集信息都无法使用,最终体现在外部就是查看所有数据都是0(null)。
以上问题具体代码位置请咨询研发获得进一步信息。
尝试将采集虚拟机已使用内存的代码注释掉,然后重新启动服务,发现主机,虚拟机所有数据都已恢复。
具体如何操作需要咨询研发获得。
由于是老版本,无法通过其他方法彻底修复此问题,所以当前采取舍弃一定数据的方式保证绝大部分数据。