这问题困扰我了接近三天时间。之所以困扰这么久,总结下来一个是自己太急了,本来是已经开发完的功能,然后文件一多就json解析不通过。然后最近工期忙,所以心态更急,越急越是慌不择路,反而没啥用。第二个就是测试周期长,只有在程序跑了二三十分钟的时候才会出问题。
我每分析一个文件,就产生一个md5命名的json文件,然后通过logstash导入到es当中,然后显出json文件,继续分析下一个文件。
问题的现象就是,logstash再导入一些文件后,会报json解析的错误,我打印结果显示读取的json不全。然后我看生成的json文件为全的,所以感觉是读和写之间的逻辑有问题,然后疯狂尝试,但是效果没有。我尝试了flush文件,现在想想确实没啥用,所以对问题进行冷静分析很重要。然后让我觉得是logstash的插件有bug,然后我查了github的提交记录和issue都没找到相关内容。然后又去看插件源码,比较复杂,心态也导致根本看不进去。最后又绕回文档,看参数相关的配置。
然后为看到logstash能根据inode识别出文件重命名的文档后,意识到我删除文件重新创建文件可能导致文件重用inode,然后我搜索了一下文档关键字。logstash确实提供了一个参数去按照过期时间删除文件读取的偏移记录。让我确定是因为我删除文件又创建新文件导致的inode重用,然后logstash根据之前记录的偏移地址去读取的文件,导致json不全,然后报错。
最终我使用truncate清空文件,然后再创建新文件去解决的问题。
logstash导入json文件的时候,内容被截断的问题
Categories: 博客记录
0 Responses so far.