一种实时采集滚动日志的方法及系统技术方案

技术编号:15203846 阅读:117 留言:0更新日期:2017-04-22 22:59
本发明专利技术提供了一种实时采集滚动日志的方法及系统,涉及计算机技术领域。其中方法包括:监控日志文件目录是否发生预设事件,预设事件包括文件新建事件和文件修改事件;若发生预设事件,则获取该文件中文件指针的当前读取位置filepointer以及该文件的文件长度filelength,根据文件中文件指针的filepointer和该文件的filelength读取新增的文件内容,并将读取到的文件内容发送至日志收集系统Flume的数据序列化的消息源Avro Source。本发明专利技术能够有效的消除日志文件目录下新文件创建、文件内容不断修改和临时文件重命名情况对日志采集的影响,实现滚动日志的实时采集,提高日志收集的可靠性。

Method and system for real-time acquisition of rolling logs

The invention provides a method and a system for real-time acquisition of rolling logs. The method comprises the following steps: monitoring the log file directory is the default event, default events include file new events and file modification events; if the occurrence of default events, obtaining the file in the file pointer to the current reading position filepointer and the file length filelength, according to the document file and the file pointer filepointer filelength read the new the contents of the documents, the contents of the file is sent to the log collection system of Flume data is serialized and read the source Avro Source. The invention can effectively eliminate the log file directory to create the new file, the contents of the file and rename the temporary file continue to modify the impact of log collection, real-time acquisition of rolling logs, improve the reliability of log collection.

【技术实现步骤摘要】

本专利技术属于计算机
,尤其涉及一种实时采集滚动日志的方法及系统
技术介绍
Flume是现有技术中最常用的日志采集技术,Flume是一个分布式,可靠高效的日志收集系统,它允许用户自定义数据传输模型,扩展性很强,并且具有较强的容错和恢复机制。然而,在实际使用过程中Flume仍才存在有一定的缺陷:Flume一般使用SpoolingDirectorySource或者ExecSource来收集日志,其中SpoolingDirectorySource不支持对收集的日志文件的内容进行追加,在有新的日志内容产生时,只能通过新建日志文件的方式来收集新的日志内容,如果采用这种方式来采集实时滚动日志,将会在日志目录下产生非常多的小文件,因此SpoolingDirectorySource不适用于滚动日志的实时采集;而ExecSource虽然能够实时搜集数据,但是其一般是从tail命令中获取日志文件的内容,只能对固定的日志文件进行tail读取内容,当日志文件按照时间进行滚动写入或者发生临时文件重命名时,将会出现采集失败,导致日志丢失的情况,其日志采集的可靠性较低。
技术实现思路
本专利技术实施例的目的在于提供一种实时采集滚动日志的方法及系统,旨在解决上述Flume中一般采用SpoolingDirectorySource或者ExecSource来收集日志,其不适用于滚动日志的实时采集或者采集可靠性较低的问题。本专利技术实施例是这样实现的,一种实时采集滚动日志的方法,包括:监控日志文件目录是否发生预设事件,所述预设事件包括文件新建事件和文件修改事件;若发生预设事件,则获取该文件中文件指针的当前读取位置filepointer以及该文件的文件长度filelength,根据所述文件中文件指针的filepointer和该文件的filelength读取新增的文件内容,并将读取到的文件内容发送至日志收集系统Flume的数据序列化的消息源AvroSource。在上述技术方案的基础上,所述若发生预设事件,则获取该文件中文件指针的当前读取位置filepointer以及该文件的文件长度filelength,根据所述文件中文件指针的filepointer和该文件的filelength读取新增的文件内容,并将读取到的文件内容发送至日志收集系统的数据序列化的消息源AvroSource具体包括:若发生预设事件,则获取所述文件的文件名,并根据所述文件名获取所述文件的设备号、文件索引号以及filelength;判断日志收集系统的缓存中是否存在所述文件的缓存信息;若不存在所述文件的缓存信息,则将文件中文件指针的filepointer设置为0,在[0,filelength]范围内按行读取文件内容,并将读取到的内容发送至日志收集系统的AvroSource;若存在所述文件的缓存信息,则根据所述设备号和所述文件索引号从所述缓存中读取该文件中文件指针的filepointer,并根据所述文件指针的filepointer、所述文件的filelength以及所述预设事件的事件类型读取新增的文件内容,将读取到的文件内容发送至日志收集系统的AvroSource。在上述技术方案的基础上,若所述预设事件的事件类型为文件新建事件,则所述根据所述文件指针的filepointer、所述文件的filelength以及所述预设事件的事件类型读取新增的文件内容,将读取到的文件内容发送至日志收集系统的AvroSource具体包括:判断所述文件指针的filepointer是否小于所述文件的filelength;若filepointer小于filelength,则在[filepointer,filelength]范围内按行读取文件内容,并将读取到的文件内容发送至日志收集系统的AvroSource,同时删除该文件的缓存信息;若filepointer大于或等于filelength,则直接清除该文件的缓存信息。在上述技术方案的基础上,若所述预设事件的事件类型为文件修改事件,则根据所述文件指针的filepointer、所述文件的filelength以及所述预设事件的事件类型读取新增的文件内容,将读取到的文件内容发送至日志收集系统的AvroSource具体包括:直接在[filepointer,filelength]范围内按行读取文件内容,并将读取到的文件内容发送至日志收集系统的AvroSource。在上述技术方案的基础上,所述若存在所述文件的缓存信息之后还包括:读取所述缓存信息的缓存时间,计算所述缓存时间与当前时间的差值;判断所述差值是否大于预设时间阈值;若大于预设时间阈值,则清除所述缓存信息。本专利技术实施例的另一目的在于提供一种实时采集滚动日志的系统,包括:事件监测模块,用于监控日志文件目录是否发生预设事件,所述预设事件包括文件新建事件和文件修改事件;日志收集模块,用于若发生预设事件,则获取该文件中文件指针的当前读取位置filepointer以及该文件的文件长度filelength,根据所述文件中文件指针的filepointer和该文件的filelength读取新增的文件内容,并将读取到的文件内容发送至日志收集系统Flume的数据序列化的消息源AvroSource。在上述技术方案的基础上,日志收集模块具体包括:文件信息获取单元,用于若发生预设事件,则获取所述文件的文件名,并根据所述文件名获取所述文件的设备号、文件索引号以及filelength;缓存判断单元,用于判断日志收集系统的缓存中是否存在所述文件的缓存信息;第一日志收集单元,用于若不存在所述文件的缓存信息,则将文件中文件指针的filepointer设置为0,在[0,filelength]范围内按行读取文件内容,并将读取到的内容发送至日志收集系统的AvroSource;第二日志收集单元,用于若存在所述文件的缓存信息,则根据所述设备号和所述文件索引号从所述缓存中读取该文件中文件指针的filepointer,并根据所述文件指针的filepointer、所述文件的filelength以及所述预设事件的事件类型读取新增的文件内容,将读取到的文件内容发送至日志收集系统的AvroSource。在上述技术方案的基础上,若所述预设事件的事件类型为文件新建事件,则所述第二日志收集单元具有用于:判断所述文件指针的filepointer是否小于所述文件的filelength;若filepointer小于filelength,则在[filepointer,filelength]范围内按行读取文件内容,并将读取到的文件内容发送至日志收集系统的AvroSource,同时删除该文件的缓存信息;若filepointer大于或等于filelength,则直接清除该文件的缓存信息。在上述技术方案的基础上,若所述预设事件的事件类型为文件修改事件,则所述第二日志收集单元具体用于:直接在[filepointer,filelength]范围内按行读取文件内容,并将读取到的文件内容发送至日志收集系统的AvroSource。在上述技术方案的基础上,所述日志收集模块还包括:缓存清理单元,用于读取所述缓存信息的缓存时间,计算所述缓存时间与当前时间的差值;判断所述差值是否大于预设时间阈值;若大于预设时间阈本文档来自技高网...
一种实时采集滚动日志的方法及系统

【技术保护点】
一种实时采集滚动日志的方法,其特征在于,包括:监控日志文件目录是否发生预设事件,所述预设事件包括文件新建事件和文件修改事件;若发生预设事件,则获取该文件中文件指针的当前读取位置filepointer以及该文件的文件长度filelength,根据所述文件中文件指针的filepointer和该文件的filelength读取新增的文件内容,并将读取到的文件内容发送至日志收集系统Flume的数据序列化的消息源Avro Source。

【技术特征摘要】
1.一种实时采集滚动日志的方法,其特征在于,包括:监控日志文件目录是否发生预设事件,所述预设事件包括文件新建事件和文件修改事件;若发生预设事件,则获取该文件中文件指针的当前读取位置filepointer以及该文件的文件长度filelength,根据所述文件中文件指针的filepointer和该文件的filelength读取新增的文件内容,并将读取到的文件内容发送至日志收集系统Flume的数据序列化的消息源AvroSource。2.如权利要求1所述的实时采集滚动日志的方法,其特征在于,所述若发生预设事件,则获取该文件中文件指针的当前读取位置filepointer以及该文件的文件长度filelength,根据所述文件中文件指针的filepointer和该文件的filelength读取新增的文件内容,并将读取到的文件内容发送至日志收集系统的数据序列化的消息源AvroSource具体包括:若发生预设事件,则获取所述文件的文件名,并根据所述文件名获取所述文件的设备号、文件索引号以及filelength;判断日志收集系统的缓存中是否存在所述文件的缓存信息;若不存在所述文件的缓存信息,则将文件中文件指针的filepointer设置为0,在[0,filelength]范围内按行读取文件内容,并将读取到的内容发送至日志收集系统的AvroSource;若存在所述文件的缓存信息,则根据所述设备号和所述文件索引号从所述缓存中读取该文件中文件指针的filepointer,并根据所述文件指针的filepointer、所述文件的filelength以及所述预设事件的事件类型读取新增的文件内容,将读取到的文件内容发送至日志收集系统的AvroSource。3.如权利要求2所述的实时采集滚动日志的方法,其特征在于,若所述预设事件的事件类型为文件新建事件,则所述根据所述文件指针的filepointer、所述文件的filelength以及所述预设事件的事件类型读取新增的文件内容,将读取到的文件内容发送至日志收集系统的AvroSource具体包括:判断所述文件指针的filepointer是否小于所述文件的filelength;若filepointer小于filelength,则在[filepointer,filelength]范围内按行读取文件内容,并将读取到的文件内容发送至日志收集系统的AvroSource,同时删除该文件的缓存信息;若filepointer大于或等于filelength,则直接清除该文件的缓存信息。4.如权利要求2所述的实时采集滚动日志的方法,其特征在于,若所述预设事件的事件类型为文件修改事件,则根据所述文件指针的filepointer、所述文件的filelength以及所述预设事件的事件类型读取新增的文件内容,将读取到的文件内容发送至日志收集系统的AvroSource具体包括:直接在[filepointer,filelength]范围内按行读取文件内容,并将读取到的文件内容发送至日志收集系统的AvroSourc...

【专利技术属性】
技术研发人员:石祖恒黄利庆韩昌雷
申请(专利权)人:深圳盒子支付信息技术有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1