一种日志文件中的数据收集的方法及系统与流程

文档序号:12470350阅读:297来源:国知局

本发明涉及大数据处理的技术领域,尤其涉及一种日志文件中的数据收集的方法,以及日志文件中的数据收集的系统。



背景技术:

Flume(Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。)提供了两种源source:ExecSource执行系统命令tail–F;另一种是spooldir。该系统可以一定程度上支持实时收集日志文件中的数据。但是都存在一定问题。

ExecSource执行系统命令tail–F实时收集日志文件中的数据时,存在的问题如下:

问题1:如果flume的agent进程意外挂掉了,启动后执行tail–F的话会出现问题。A)比如tail–F配置成从文件头开始读取:tail-n+0–F。那很有可能此文件的前一部分,在agent挂掉前已经读取过了,这次又重读了一次。B)如果tail–F配置成从文件头尾开始读取:tail-n 0–F。那agent挂掉的这段时间内产生的日志数据,就读不到了。

问题2:日志滚动的时候,如app.log,滚动生成app.log.20160526。日志收集器有一定风险,app.log.20160526的数据还没有完全读完就切换到app.log。

另一种spooldir在实时收集日志文件中的数据时,存在的问题如下:

问题1:spooldir的话会监控日志目录下是否有新产生的日志文件,读取文件时要求文件内容不可变。即spooldir读取app.log.20160422文件的日志,但是不能读取app.log的日志,因为app.log文件中还可以不断地产生新的日志数据。spooldir的问题就是读取滚动后生成的日志文件,时效性差了,日志文件如果按天滚动,那就是一天才能收集一次。如果加快日志滚动,比如按分钟滚动,会产生很多小文件,不利于管理维护。

问题2:spooldir也不支持断点续传。



技术实现要素:

为克服现有技术的缺陷,本发明要解决的技术问题是提供了一种日志文件中的数据收集的方法,其能够实现实时收集日志文件中的数据,支持断点续传,日志滚动时不丢失数据。

本发明的技术方案是:这种日志文件中的数据收集的方法,其包括以下步骤:

(1)定期检查日志目录下的日志文件的信息,信息包括:日志文件名称、日志文件长度、日志文件的inode值;

(2)实时收集:收集日志,新产生的文件消费偏移量为0,消费之后记录该文件的inode值、消费偏移量到元数据文件;

(3)断点续传:如果日志收集进程异常退出,重新启动日志收集进程的时候,载入消费偏移量,从该消费偏移量点继续消费。

本发明通过消费之后记录该文件的inode值、消费偏移量到元数据文件,如果日志收集进程异常退出,重新启动日志收集进程的时候,载入消费偏移量,从该消费偏移量点继续消费,从而能够实现实时收集日志文件中的数据,支持断点续传,日志滚动时不丢失数据。

还提供了一种日志文件中的数据收集的系统,该系统包括:

定期检查模块,其配置来定期检查日志目录下的日志文件的信息,信息包括:日志文件名称、日志文件长度、日志文件的inode值;

实时收集模块,其配置来收集日志,新产生的文件消费偏移量为0,消费之后记录该文件的inode值、消费偏移量到元数据文件;

断点续传模块,其配置来当日志收集进程异常时退出,重新启动日志收集进程的时候,载入消费偏移量,从该消费偏移量点继续消费。

附图说明

图1所示为根据本发明的日志文件中的数据收集的方法的流程图。

具体实施方式

如图1所示,这种日志文件中的数据收集的方法,其包括以下步骤:

(1)定期检查日志目录下的日志文件的信息,信息包括:日志文件名称、日志文件长度、日志文件的inode值;

说明为何要取inode值:由于日志滚动的时候会改变名字的,为了还能找到该文件,需要找一个唯一标识;同一个物理磁盘里面文件做rename,或者mv的时候,其inode值不变;日志滚动相当于做rename或mv操作;举例:比如app.log的inode=5914332,日志滚动时,生成的日志文件app.log.20160422,其inode依然是5914332,而新的app.log文件inode是新的值,比如:5914335;

(2)实时收集:收集日志,新产生的文件消费偏移量为0,消费之后记录该文件的inode值、消费偏移量到元数据文件;

可查看日志收集器的metrics信息,查看收集日志的数量;

(3)断点续传:如果日志收集进程异常退出,由于之前记录消费偏移量到元数据文件了,重新启动日志收集进程的时候,载入消费偏移量,从该消费偏移量点继续消费。

本发明通过消费之后记录该文件的inode值、消费偏移量到元数据文件,如果日志收集进程异常退出,重新启动日志收集进程的时候,载入消费偏移量,从该消费偏移量点继续消费,从而能够实现实时收集日志文件中的数据,支持断点续传,日志滚动时不丢失数据。

另外,该方法还包括步骤(4),滚动日志时,生成的文件被检查文件长度,根据日志文件的inode值定位到滚动后的日志文件,每个日志文件的长度和日志文件消费偏移量进行对比,进而得出是否需要消费该文件。

滚动日志时,生成的文件app.log、app.log.20160422都会被检查文件长度,可以根据日志文件的inode值定位到滚动后的日志文件app.log.20160422。每个日志文件的长度和日志文件已被消费的偏移量进行对比,进而得出是否需要消费该文件,不会出现滚动日志时app.log.20160422文件有部分数据没有消费。

另外,所述步骤(2)中实时检查文件长度和消费偏移量,如果消费偏移量小于文件长度,则该文件可以进行消费。

另外,在所述步骤(1)之前还包括:配置文件准备,配置文件包括:日志路径,元数据文件输出路径,收集日志后下发到下游的相关配置。

本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而所述的存储介质可以是:ROM/RAM、磁碟、光盘、存储卡等。因此,与本发明的方法相对应的,本发明还同时包括一种日志文件中的数据收集的系统,该系统通常以与方法各步骤相对应的功能模块的形式表示。该系统包括:

定期检查模块,其配置来定期检查日志目录下的日志文件的信息,信息包括:日志文件名称、日志文件长度、日志文件的inode值;

实时收集模块,其配置来收集日志,新产生的文件消费偏移量为0,消费之后记录该文件的inode值、消费偏移量到元数据文件;

断点续传模块,其配置来当日志收集进程异常时退出,重新启动日志收集进程的时候,载入消费偏移量,从该消费偏移量点继续消费。

另外,该系统还包括滚动日志模块,其配置来滚动日志时,生成的文件被检查文件长度,根据日志文件的inode值定位到滚动后的日志文件,每个日志文件的长度和日志文件消费偏移量进行对比,进而得出是否需要消费该文件。

本发明的有益效果如下:

1.实时收集日志文件中的数据。

2.支持断点续传。收集器重新启动时,不会重复收集数据或丢失数据。

3.日志滚动时不丢失数据。

以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属本发明技术方案的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1