一种日志数据采集方法及系统与流程

文档序号:12906200阅读:440来源:国知局
一种日志数据采集方法及系统与流程

本发明涉及数据处理技术,具体的讲是一日志采集方法及系统。



背景技术:

目前,电子商务和互联网金融得到了快速发展。在线交易给用户带来便利性的同时,也面临着潜在风险,如用户账户盗用、金融诈骗和洗钱等。因此,企业对交易风险的监控需求日益强烈。传统企业对交易风险进行监测时,通常在企业内部设立风控部门,对用户交易进行线下分析,发现可疑数据后进行干预处理。随着大数据技术的发展,交易风险控制逐步进入数字化和智能化。借助大数据的手段,交易风险监控不仅节省人力物力,提高工作效率,同时能够有效减少经济犯罪导致的损失。日志数据是交易风险监控利用大数据技术挖掘分析时其所需信息一项重要的来源,因此,各类日志采集系统在企业内部得到了广泛使用。

现有技术的众多日志采集相关的产品中,flume是其中一款具有较高知名度的高性能分布式开源产品,它提供了可简单配置的多层采集架构,可支持从多种数据源高效收集日志数据并保存到中央数据仓库。但是,现有技术的日志采集方式为按文件粒度采集数据,即等待文件生成后再进行采集。由于其采集速度受限,对于一些时效性需求较高的业务,如在电子商务企业通过在线推荐用户商品进行实时营销、金融系统跟踪客户交易数据监控交易风险等应用中,已无法满足实时性的需求。

为了加快日志采集,现有技术中,flume提出了以tail-f方式逐行采集的方法,实现了日志的持续采集。但该方式存在以下不足,即,一旦应用服务发生重启、日志内容覆盖或删除等非常态事件,它会造成数据丢失或者采集到错误的半行数据,导致后续的日志分析发生错误。



技术实现要素:

为了克服传统日志采集中应对非常态事件的不足,导致数据丢失、日志分析错误等问题,本发明实施例提供了一种日志数据采集方法,方法包括:

预先将待采集日志数据的目标区域划分为至少两个采集区域,各采集区域均包括:数据中心和至少一个分支机构,日志存储系统位于所述至少两个采集区域其中之一的第一采集区域的数据中心;

采集各分支机构和数据中心中的web服务器的日志数据,并将采集的各分支机构的日志数据传输到该分支机构所在采集区域的数据中心;

各采集区域的日志数据通过第一采集区域的数据中心的flume一级接收端存储至日志存储系统。

本发明实施例中,所述的采集各分支机构和数据中心中的web服务器的日志数据,并将采集的各分支机构的日志数据传输到该分支机构所在采集区域的数据中心包括:

采集的分支机构的web服务器的日志数据,通过位于分支机构的flume接收端传输到该分支机构所在采集区域的数据中心的flume接收端。

本发明实施例中,所述的各采集区域的日志数据通过第一采集区域的数据中心的flume一级接收端存储至日志存储系统包括:

采集的数据中心的web服务器的日志数据,通过数据中心的flume二级接收端传输至第一采集区域的数据中心的flume一级接收端存储至日志存储系统;

采集的第一采集区域的分支机构的web服务器的日志数据,通过该分支机构的flume接收端传输至所述flume一级接收端存储至日志存储系统;

采集的非第一采集区域的分支机构的web服务器的日志数据,通过对应的数据中心的flume二级接收端传输至所述flume一级接收端存储至日志存储系统。

本发明实施例中,非第一采集区域的数据中心的flume二级接收端通过高速网络专线连接至flume一级接收端。

本发明实施例中,所述的采集各分支机构和数据中心中的web服务器的日志数据,并将采集的各分支机构的日志数据传输到该分支机构所在采集区域的数据中心包括:

以数据块为单位读取web服务器的日志数据并写入中转队列;

将中转队列中的日志数据发送至flume接收端;

根据所述flume接收端所在地类型确定日志数据的下游发送地。

本发明实施例中,所述的方法包括:

预先设定web服务器的日志数据的切分原则,所述的切分原则包括:以大小或时间对日志数据进行切分;

根据设定的web服务器的日志数据的切分原则生成存储日志数据的日志文件。

本发明实施例中,所述的以数据块为单位读取web服务器的日志数据并写入中转队列包括:

步骤1,将文件指针指向待采集的日志;

步骤2,从指定偏移量以数据块为单位读取当前日志文件中的日志数据;

步骤3,从数据块中逐一读取字符放入缓存;

步骤4,按行提取缓存中的字符写入中转队列。

本发明实施例中,所述的从数据块中逐一读取字符放入缓存包括:

判断是否读取到新的字符以确定是否为数据块尾;

确定读取到的为数据块尾,则执行步骤2。

本发明实施例中,所述的按行提取缓存中的字符写入中转队列包括:

判断读取到新的字符是否为换行符;

确定读取到的字符为换行符,提取缓存中的字符写入中转队列;

确定读取到的字符不是换行符,则执行步骤3。

本发明实施例中,确定读取到的为数据块尾执行步骤2之前,进一步执行日志异常检测,

确定日志异常,则重置指针偏移量后执行步骤2。

本发明实施例中,在执行步骤2之前进一步包括:判断是否有新增的日志文件;其中,

确定没有新增日志文件,执行步骤2;

确定有新增日志文件,则在读取完当前日志文件后指定新增的日志文件为下一个待读取的日志文件。

本发明实施例中,在执行步骤3之前包括:

判断是否读取到数据块;

确定读取到数据块,则执行步骤3;

确定未读取到数据块,则进行等待预设的指定时间。

本发明实施例中,确定未读取到数据块,等待预设的指定时间之后,执行日志异常检测,日志异常则重置指针偏移量后执行步骤判断是否有新增的日志文件。

同时,本发明还提供一种日志数据采集系统,包括:

区域划分装置,用于将待采集日志数据的目标区域划分为至少两个采集区域,各采集区域均包括:数据中心和至少一个分支机构,日志存储系统位于所述至少两个采集区域其中之一的第一采集区域的数据中心;

日志数据采集装置,用于采集各分支机构和数据中心中的web服务器的日志数据,并将采集的各分支机构的日志数据传输到该分支机构所在采集区域的数据中心;

flume一级接收端,设置于所述第一采集区域的数据中心,用于将各采集区域的日志数据存储至日志存储系统。

本发明实施例中,所述的日志数据采集装置包括:

采集客户端,设置于所述各分支机构和数据中心,采集各分支机构和数据中心中的web服务器的日志数据;

flume接收端,设置于所述各分支结构和数据中心;其中,

采集的数据中心的web服务器的日志数据,通过数据中心的flume二级接收端传输至所述flume一级接收端存储至日志存储系统;

采集的第一采集区域的分支机构的web服务器的日志数据,通过该分支机构的flume接收端传输至flume一级接收端存储至日志存储系统;

采集的非第一采集区域的分支机构的web服务器的日志数据,通过该分支机构的flume接收端传输至对应的数据中心的二级接收端,并通过数据中心的flume二级接收端传输至所述flume一级接收端存储至日志存储系统。

本发明实施例中,非第一采集区域的数据中心的flume二级接收端通过高速网络专线连接至flume一级接收端。

本发明实施例中,所述的采集装置包括:

读取模块,以数据块为单位读取web服务器的日志数据并写入中转队列;

中转模块,用于将中转队列中的日志数据发送至flume接收端;

所述flume接收端根据所在地类型确定日志数据的下游发送地。

本发明实施例中,所述读取模块包括:

原则预设单元,用于预先设定web服务器的日志数据的切分原则,所述的切分原则包括:以大小或时间对日志数据进行切分;

切分单元,用于根据设定的web服务器的日志数据的切分原则生成存储日志数据的日志文件。

本发明实施例中,所述的读取模块以数据块为单位读取web服务器的日志数据并写入中转队列包括:

步骤1,将文件指针指向待采集的日志;

步骤2,从指定偏移量以数据块为单位读取当前日志文件中的日志数据;

步骤3,从数据块中逐一读取字符放入缓存;

步骤4,按行提取缓存中的字符写入中转队列。

本发明实施例中,所述的读取模块还包括:日志异常检测模块,用于执行日志异常检测。

本发明实施例中,所述的读取模块还包括:

块尾判断单元,用于判断是否读取到新的字符以确定是否为数据块尾;

确定读取到的为数据块尾,则执行步骤2。

本发明实施例中,所述读取模块还包括:

换行符判断单元,用于判断读取到新的字符是否为换行符;

确定读取到的字符为换行符,提取缓存中的字符写入中转队列;

确定读取到的字符不是换行符,则执行步骤3。

本发明实施例中,确定读取到的为数据块尾执行步骤2之前,日志异常检测模块执行日志异常检测,确定日志异常,则重置指针偏移量后执行步骤2。

本发明实施例中,在读取模块还包括:

新增日志判断单元,用于判断是否有新增的日志文件;其中,

确定没有新增日志文件,执行步骤2;

确定有新增日志文件,则在读取完当前日志文件后指定新增的日志文件为下一个待读取的日志文件。

本发明实施例中,在读取模块还包括:

数据块判断单元,用于判断是否读取到数据块;

确定读取到数据块,则执行步骤3;

确定未读取到数据块,则进行等待预设的指定时间。

确定未读取到数据块,等待预设的指定时间之后,利用所述日志异常检测模块执行日志异常检测,日志异常则重置指针偏移量后执行步骤判断是否有新增的日志文件。

本发明提出改进的日志采集方案,结合高可用性、高可靠性、高时效等特性为一体,提高工作效率。采用本技术可以提高日志数据采集效率和可靠性,保证生产系统正常运行。

为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明公开的日志数据采集方法的流程图;

图2为本发明一实施方式的日志实时采集系统的示意图;

图3为本发明实施例中日志实时采集的流程图;

图4为本发明实施例中日志实时采集系统的采集算法流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供一种日志数据采集方法,如图1所示,该方法包括:

步骤s101,预先将待采集日志数据的目标区域划分为至少两个采集区域,各采集区域均包括:数据中心和至少一个分支机构,日志存储系统位于所述至少两个采集区域其中之一的第一采集区域的数据中心;

步骤s102,采集各分支机构和数据中心中的web服务器的日志数据,并将采集的各分支机构的日志数据传输到该分支机构所在采集区域的数据中心;

步骤s103,各采集区域的日志数据通过第一采集区域的数据中心的flume一级接收端存储至日志存储系统。

其中,上述的采集各分支机构和数据中心中的web服务器的日志数据,并将采集的各分支机构的日志数据传输到该分支机构所在采集区域的数据中心包括:

采集的分支机构的web服务器的日志数据,通过位于分支机构的flume接收端传输到该分支机构所在采集区域的数据中心的flume接收端。

采集的数据中心的web服务器的日志数据,通过数据中心的flume二级接收端传输至第一采集区域的数据中心的flume一级接收端存储至日志存储系统;

采集的第一采集区域的分支机构的web服务器的日志数据,通过该分支机构的flume接收端传输至所述flume一级接收端存储至日志存储系统;

采集的非第一采集区域的分支机构的web服务器的日志数据,通过对应的数据中心的flume二级接收端传输至所述flume一级接收端存储至日志存储系统。

本发明实施例中,非第一采集区域的数据中心的flume二级接收端通过高速网络专线连接至flume一级接收端。

如图2所示为本发明一实施方式的日志实时采集系统的示意图,本实施例中预先根据采集地理位置划分出多个区域,首先将日志待采集的目标区域初步划分为区域1和区域2,在区域1和区域2分别设立一个数据中心,数据中心1负责收集区域1的日志数据,数据中心2则负责收集存储包括区域1和区域2的日志数据。

本实施例中数据中心1和数据中心2之间架设一条网络专线,数据中心1的日志数据可通过该通道高速传输至数据中心2。进一步地,在具体部署采集作业时,细分出数据中心1、数据中心2、分支机构1和分支机构2这四类日志采集区域。本发明实施例中,分支机构1和分支机构2同数据中心1和数据中心2的区别在于,分支机构仅用于收集机构内部的日志数据,数据中心则收集、汇总包括本数据中心和所属区域内全部分支机构(若部署有多个分支机构)的日志数据。

本实施例中数据中心2为日志存储系统所在地,数据中心2在处理本区域内日志数据的基础上会进一步收集其他数据中心的日志数据。需要说明的是,本发明实施例中上述划分方法不具有绝对性,可根据每个采集案例的实际情况基于“分而治之”的思想进行最佳划分。

在采集区内部,设有一个小型采集系统,采集系统由多个采集客户端和多个flume接收端组成,运行于一个局域网内网环境中。采集客户端以无侵入的方式运行在web应用服务器上,负责实时采集本地服务器上的日志,由于其占用web应用服务器的计算资源较小,不会对服务器的业务应用产生压力。

本发明对客户端日志采集进行了高可用性、高可靠性、高实效性的创新设计。为了追求远程传输数据的低耗时,本发明引入了一条高速网络通道,距离较远的采集区域的日志数据则可通过该高速通道传输至日志存储系统所在地;为了减轻日志存储系统hdfs的文件写入压力和系统开销,本发明设计了多层级flume模式,数据只能通过flume端逐级写入hdfs。采用本技术可以提高日志数据采集效率和可靠性,保证生产系统正常运行。

本实施例中flume接收端运行在flume服务器中,负责实时收集汇总数据发送至下游节点,其采用的技术为成熟的flume采集技术。在这里,所述下游节点为flume接收端的日志数据发送终端,下游节点既可能是flume接收端,也可能是日志存储系统。各个小型采集系统的数据最后归总到某个采集系统的日志存储系统中进行后续挖掘处理,在本发明案例该系统为数据中心2的hdfs文件系统。为了合理利用服务器资源,上述部署策略遵循简单、灵活的原则,不管是数据中心还是分支机构内部,采集客户端和flume接收端的数目根据采集任务量的大小灵活调整。

根据flume接收端相对hdfs文件系统的位置属性,对flume进行了多层级设置。其中,一级flume接收端负责接收来自二级flume端的日志数据并汇总写入hdfs系统,二级flume接收端负责接收三级flume接收端的日志数据并转发至一级flume接收端中,依次类推。在这里,级别的设置仅用于区分本级别flume接收端将日志数据最终传输到hdfs文件系统需要经过的flume接收端个数,其功能并无区别。例如,三级flume接收端需要经过三个flume接收端(包括本端)最终才能存储到hdfs文件系统。flume接收端直接的数据传输采用avro协议。以图1中数据中心2为例,中心内设有二个层级的flume采集端,二级flume端将采集客户端采集的日志后转发给一级flume端,一级flume端负责接收来自中心内部、数据中心1和分支机构2二级flume端的数据并写入hdfs。而在数据中心1和分支机构2内部,仅设有单层的二级flume接收端,负责将日志数据传输至数据中心2的一级接收端中转后再存入hdfs。不同的是,由于分支机构2在地理位置上距离数据中心2较近,数据传输走普通网络线路,数据中心1的数据可借助数据中心1和2的网络专线获得更高传输性能。对于分支机构1,采集客户端的数据先经由flume三级接收端转发至数据中心1的flume二级接收端,最后同数据中心2的数据一起经由高速网络通道存入hdfs。

需要说明的是,以上实施例中采集客户端、flume接收端的数目、形态设计未按实际实施情况绘制,在实际实施时采集客户端、flume接收端的具体数目、形态可能随意变化,布局形态也更为复杂。

在本发明日志实时采集系统中,日志数据流先后经过采集客户端和flume的三级、二级和一级接收端,最后流入hdfs的日志存储系统。本实施例中无论是采集客户端还是flume接收端,其内部构造具有相同的特征,即,内部构造分为读数模块和发数模块。其特征还在于,两者共同管理维护一个日志数据中转队列,该中转队列用于缓存日志数据,读数模块和发数模块异步地对该队列进行读/写操作,互不干涉对方模块的运行。如图3所示为本发明实施例中日志实时采集的流程图。

步骤101:日志采集客户端的读数模块将指针指向待采集的文件,动态地以数据块为单位读数并解析放入队列

本实施例中,web服务器端的应用程序将系统应用的日志数据以日志文件为基本单位,存放于日志采集目录中进行管理。为了避免单个日志文件过大而难以查看,可通过指定大小和时间控制每个日志文件的容量,因此在日志采集目录含有多个日志文件,其中一个为当前日志文件,其余为日志归档文件。应用程序预先设定日志切分原则,目前支持以大小和时间两种切分方式。若以日志大小切分,则确保每个日志文件为既定大小;若以时间切分,则确保每分钟生成一个日志文件。当前日志文件数据生成量一旦达到切分要求,则停止在当前文件进行写入,同时生成新的用于写入数据的日志文件。应用程序将当前日志文件添加数字后缀变成历史归档文件,而新生成的文件沿用当前日志文件的名字。

读数模块在采集日志数据时,逐一对新生成的日志文件进行逐块读取。具体地,所述模块将读数指针指向当前日志文件,每次以数据块为基本单位一次读取一段日志内容,从读取的内容解析出一行行日志。若在某次读数时发现日志无新数据生成,所述模块会将指针指向下一次日志读取位置,停止指定的时间,等待新的日志内容生成。等待时间结束后,所述模块先去判断等待的时间段内是否生成新的日志文件。若是,则说明先前读取日志文件不再有新数据生成,所述模块先从上一次指针指向位置起读完先前文件的剩余内容,然后将指针指向新生成的文件开始读取新的数据。若无,则说明先前读取的日志文件还未到切换指定容量,所述模块继续以数据块的方式读取内容并解析。进一步的,在日志采集过程中,添加日志异常检测的步骤,对于日志被删除或内容覆盖等问题及时修正采集策略,保证所采集数据的正确性完整性。上述采集算法步骤的详细描述见图3。

步骤102:日志采集客户端的发数模块负责从客户端的中转队列中读取数据行发送到下游flume服务器。

每个客户端内部配置有下游可发送数据的flume接收端地址列表,所述发数模块与flume接收端之间的连接采用负载均衡机制。当采集客户端启动后,所述发数模块从这个列表中随机选择一个地址,向该地址所对应的flume接收端建立长连接。为提高发送效率,所述发数模块每次可从中转队列中读取若干条数据行,数据行数目为预设值,若中转队列剩余数据行数小于该预设值,则读取剩余行数。所述模块将读取的数据行打包成一个数据包,通过tcp协议发送到相应的flume接收端。

步骤103:根据flume接收端服务器的所在地的类型选择下游发送地。

根据flume接收端服务器的所在区域的不同特性,不同区域的flume接收端在进行数据传输时相对应的采用不同的处理方式。

如图3中所示,判断flume服务器所在区域为分支机构1,则将数据发送至数据中心1,转向步骤104;判断flume服务器所在区域为数据中心1或者分支机构2,则将数据发送至数据中心2,转向步骤105;判断flume服务器所在区域为数据中心2,则无需将数据发送至外部区域,转向步骤106。

步骤104:数据中心1的flume三级接收端将数据传输至位于数据中心1flume二级接收端。

位于分支机构1的flume接收端在系统级别层面称为三级接收端。flume接收端级别越高,数据传输需要通过的flume接收端越多,耗费的传输时间也随之越多。若通过普通线路直接将数据传输至数据中心2,不利于保证数据传输的时效性。为了避免高延迟,分支机构1的flume接收端将数据转发至数据中心1,由数据中心1的flume接收端进行下一步高速网络通道的数据传输。经过实验测试验证,这样的二次传输方式在传输时间上远小于直接的远程传输。

步骤105:数据中心1、分支机构2将数据分别以高速通道、普通网络的不同方式传输至数据中心2的一级flume端。

位于数据中心1和分支机构2的flume接收端在系统级别层面称为二级接收端。flume二级接收端可将其接收的数据直接传输至数据中心2的flume一级接收端。本实施例中由于数据中心1和数据中心2直接架设有一条高速网络通路,因此,数据中心1的flume接收端可通过该高速通道将数据传输至数据中心2。分支机构2则通过普通网络线路将数据传输至数据中心2。

步骤106:数据中心2的flume一级接收端接收来自本中心内外的数据,最终上传至hdfs。

数据中心2的flume一级接收端不仅接收来自本地二级接收端的日志数据,同样接收来自分支机构2和数据中心1的二级接收端的日志数据。本发明系统采用将各区域的日志数据经由flume一级接收端汇总整合的方式,而不是各区域的日志数据各自独立上传至hdfs日志存储系统。这样设计的原因之一在于,flume一级接收端在汇总数据过程中可合并同一服务应用相关的日志数据,减少最终日志文件的数目,从而缓解hdfs文件系统对大量小文件存储的压力。原因之二,本系统设置只有flume一级接收端可访问hdfs系统,不仅便于hdfs的访问管理,而且从网络安全层面减少外部服务端破坏hdfs系统的可能性。

如图4所示,为本发明实施例中日志实时采集系统的采集算法流程图。本实施例中已知采集客户端启动后,若无外界强制中断则可不停地进行日志采集工作。其读数模块反复使用同一套采集算法进行操作,具体算法流程如下:

步骤10101:文件指针指向待采集的日志,设置指针初始偏移量为0。

正常情况下,日志数据从文件首部开始进行收集,因此,读文件指针首先指向日志文件数据的首行首字符。

步骤10102:判断是否有新增的其他日志文件。

读数模块在每次从头读新日志文件的数据或者未读到数据等待一段时间继续读数之前,必须进行上述判断,若当前只有一个待采集的日志,则转向步骤10103,若除指针指向的待采集日志之外又生成了新的日志文件,则转向步骤10112。

步骤10103:文件指针从指定偏移量起以块为单位读取当前日志文件数据。

本发明以数据块为基本单位进行数据读取,数据块是一段具有固定字节长度的日志数据,只有在文件末尾读到的最后一块数据块可能不足指定的字节长度。数据块中含有若干数据行,数据块的首部和尾部可能是不完整的半行数据,数据行的提取步骤见步骤10105-步骤10108。

步骤10104:判断是否读到数据块。

由于客户端web服务器应用程序写日志文件是动态的过程,读数模块无法确保每次都可读到日志数据块。因此每次完成一次读取操作后,进行一次判断,看是否真正读到数据。若读到数据则转向步骤10105,若没有读到数据则转向步骤10110。

步骤10105:从数据块中逐一读取字符并加入到动态字符数组末尾。

读到一块数据后,将该数据块其放入采集客户端的缓存中,缓存中负责存放待解析的数据。设一个指针专门负责扫描读取缓存中的字符,缓存读数指针从缓存第一个字符位置起读取字符,将该字符加入一个动态字符数组末尾,然后扫描下一个字符。动态字符数组负责暂存数据行的中间数据状态,其长度随存储的字符的增加而增长。

如果上一次数据块读取完毕后动态字符数组中可能仍留存有部分数据,本次数据块解析时,动态字符数组会保留上次尚未提取的剩余数据,将扫描到的新字符仍追加写入动态字符数据尾部,直到解析出一整行数据再次进行提取操作。

步骤10106:判断是否读到数据块结尾。

由于指针扫描读取数据块缓存的数据字符是一种循环读取操作,因此每次读取后判断是否读到新的字符,若读到说明该数据块尚未读取完毕,则转向步骤10107;若发现无法读到新的字符,即数据块结尾,则说明当前数据块已经完成读取,需提取新数据块读取,转向步骤10109。

步骤10107:判断新读取的字符是否满足数据行提取要求。

若最新读取的字符为换行符’\n’,则说明动态字符数组满足数据行提取要求,转向步骤10108;若该字符为非换行符的普通字符,则继续下一字符的读取,转向步骤10105。

步骤10108:解析提取一条数据行,将该数据行写入客户端的中转队列。

动态字符数组存储的数据已满足数据行的提取要求,将其数据行拷贝至中转队列后清空动态字符数组的内容。

步骤10109:日志异常检测,若异常则重置指针偏移量。

在读取下一个的数据块之前,需要进行日志异常检测。这是由于客户端web服务器应用程序在运行过程中可能发生重启或停机等异常,则对应的日志文件内容发生变化,例如,原有日志文件被新的日志数据从头覆盖。日志异常检测的流程如下,首先,读数模块更新下一次读日志的偏移量,新的偏移量即本次读日志的偏移量加上所读数据块字节长度。其次,将当前日志文件大小与该偏移量值进行比较,为后续表达清楚,设新的偏移量值为a值,当前日志文件大小为b值。若a值大于b值,则断定日志文件发生覆写异常。这时,日志数据需从头读起,重置下一次读日志文件的指针偏移量为0。若a值小于b值,则需进一步获取动态字符数组存储的字符数(设为c值),从日志文件的读指针移动至(a-c,即指针原位置处)偏移量处,扫到的第一个字符应为新行首字符,于是再向前挪动一个字符位置,扫描该字符内容并判断。若该内容不是换行符’\n’,则说明发生覆写异常,应重置下一次读日志文件的指针偏移量为0。若该内容应为换行符’\n’,说明未发生异常情况。下一次读文件的指针偏移量为a值。

步骤10110:读不到数据,等待指定时间。

若在一段时间内web服务器端没有日志数据写入文件,指针定为到文件尾部则读不到数据内容。采集客户端无法预测何时可读取新数据,等待一段时间再尝试读取。

步骤10111:日志异常检测,若异常则重置指针偏移量。

步骤10111与步骤10109类似,不再赘述。有所区别的是,若未检测到日志异常,步骤10109中下一次读日志的偏移量是本次偏移量的基础上增加所读数据块字节长度(设为d值),即a+d。步骤10111中下一次读日志的偏移量依旧是本次读日志的偏移量,即a。

进一步的,对于部署在linux操作系统的客户端,步骤10111比步骤10109多了一项关于是日志否有被删除的监测。具体的,当采集模块在读取预设次数后仍没有取到数据块,则触发文件删除的检测。检测时,会先判断指定文件名的文件是否存在:若不存在指定文件名的文件,则直接判定当前文件已被删除、新文件又未生成,此时则等待新文件生成;若存在指定文件名的文件,则通过现有的stat命令获取指定文件名对应文件的“设备id+inode号(索引节点号)”字符串,和已打开文件的该字符串进行对比,若不同则判定原文件已被删除、新文件又已生成,此时,将文件读指针指向新文件,并且设置下一次读日志的偏移量设为0。

步骤10112:从指定偏移量起以块为单位循环读完当前日志的剩余数据,指定新增日志为下个处理文件。

需要说明的是,本实施例中,在进入步骤10112时,系统会先将当前指针指向的日志的数据读取完毕,反复逐数据块读取并解析数据行,其过程与上述步骤10103-步骤10108类似,区别在于,由于新日志生成说明当前日志已经写满,因此无需执行步骤10104,即不再判断每次读取是否可读到数据块。随后指针指向新增日志文件进行数据读取。

为了提高日志采集的时效性,本发明采取在日志文件生成过程中动态采集日志数据,每次按数据块读取并逐行解析,可持续传输日志数据;为了保证数据采集的完整性,本发明在采集过程中实时监测异常,一旦发现日志被删除或覆盖内容则及时调整采集策略,避免读取错误的日志数据。

同时,本发明还公开一种日志数据采集系统,包括:

区域划分装置,预先将待采集日志数据的目标区域划分为至少两个采集区域,各采集区域均包括:数据中心和至少一个分支机构,日志存储系统位于所述至少两个采集区域其中之一的第一采集区域的数据中心;

日志数据采集装置,设置于各分支机构、数据中心,用于采集各分支机构和数据中心中的web服务器的日志数据,并将采集的各分支机构的日志数据传输到该分支机构所在采集区域的数据中心;

flume一级接收端,设置于所述第一采集区域的数据中心,用于将采集的各采集区域的日志数据存储至日志存储系统。

本发明实施例中,所述的日志数据采集装置包括:

采集客户端,设置于所述各分支机构和数据中心,采集各分支机构和数据中心中的web服务器的日志数据;

flume接收端,设置于各分支结构和数据中心;其中,

采集的数据中心的web服务器的日志数据,通过数据中心的flume二级接收端传输至所述flume一级接收端存储至日志存储系统;

采集的第一采集区域的分支机构的web服务器的日志数据,通过该分支机构的flume接收端传输至flume一级接收端存储至日志存储系统;

采集的非第一采集区域的分支机构的web服务器的日志数据,通过该分支机构的flume接收端传输至对应的数据中心的二级接收端,并通过数据中心的flume二级接收端传输至所述flume一级接收端存储至日志存储系统。

本发明实施例中,非第一采集区域的数据中心的flume二级接收端通过高速网络专线连接至flume二级接收端。

本发明的日志实时采集系统在全局部署策略上采用多层级flume服务器模式,即在每个采集区域内部设置若干flume服务器将日志采集中转,最后由hdfs所在采集区的若干flume服务器汇总各个采集区的日志并写入hdfs。这种设计模式,第一,避免了大量flume服务器对hdfs直接读写造成的系统压力,同时避免了hdfs因存储大量小文件而导致的namenode性能降低问题;第二,将远程传输数据、将数据写至hdfs这两个开销较大的io操作解耦和设计,避免了数据中心1将数据直接发送至数据中心2hdfs的巨大通讯延时;第三,便于hdfs访问的统一管理,同时从网络安全层面减少了防火墙白名单的地址。

而在采集客户端内部日志采集算法设计上,本发明采集方法不仅能够以行为单位采集收集日志,提高了日志采集的时效性,而且屏蔽了web服务器应用重启、停机等异常对本发明采集系统的影响。采集系统在异常情况发生后依旧正常运行,精准地采集到日志内容,同flume自带的采集方法相比有效避免了读半行数据的现象。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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