CN106294470B - 基于切分日志的实时增量日志信息读取的方法 - Google Patents
基于切分日志的实时增量日志信息读取的方法 Download PDFInfo
- Publication number
- CN106294470B CN106294470B CN201510297384.2A CN201510297384A CN106294470B CN 106294470 B CN106294470 B CN 106294470B CN 201510297384 A CN201510297384 A CN 201510297384A CN 106294470 B CN106294470 B CN 106294470B
- Authority
- CN
- China
- Prior art keywords
- log
- file
- reading
- incremental
- log file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1734—Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于切分日志的实时增量读取的方法。所述方法包括:扫描日志目录下的日志文件,并设置每个文件的读取起始位置;开启文件***以监听日志目录下的日志文件变化;当监听到日志文件新建、修改或更新事件时:判断所述日志文件是否有切分文件;如果有所述切分文件,则读取增量日志信息并且所述读取起始位置被设置为当前读取长度。
Description
技术领域
本发明涉及实时增量日志信息读取,特别是涉及基于切分日志的实时增量日志信息读取的方法。
背景技术
在监控***中,我们常采用日志方式收集被监控***的监控数据。为了保证监控数据和告警的准确性,日志增量内容实时读取方***性和鲁棒性是重中之重。
日志增量内容的实时读取涉及文件监听。文件监听指的是使用文件***,实时监听日志文件的变化情况,包括文件的创建、修改以及删除等事件。对监听到的事件进行响应以完成日志在切分后增量日志内容的读取。
现有技术的技术方案:
常见日志文件增量读取方案如下:
1.监听日志路径下文件变化情况,当有新日志文件产生时,记录该文件读取起始位置position为0。从0开始读取增量日志内容,读取完后修改读取起始位置position为当前读取日志长度length(position=length);
2.当监听到日志文件有修改时,获取读取起始位置position的值,如果没有则设置为0(position=0),从position位置开始读取增量日志内容,读取完后修改读取起始位置position为position加上读取增量日志长度length(position=position+length);
3.当监听到文件被删除时,不做任何处理。
现有技术的缺点
上述方案是常见文件增量读取方案,算法直观有效,仅可以适用于无切分的日志增量内容读取。
然而,实践中,为了保证日志大小的可控,采用按日志大小切分的方式写日志文件是一种通用方案。如本领域技术人员公知的,在***运行时,为了监控***运行状态,会输出日志信息到日志文件中,时间一长,日志文件将变得非常大,不利于阅读和管理。因此,一般情况下我们希望日志按一定时间段或文件大小存成不同的文件,这就涉及日志切分。为了快速读取增量日志及控制日志大小,在监控***中我们采用例如轮转切分方式保存日志文件。本领域技术人员可以理解,可以采用其他切分方式。
例如,假定***输出原始日志为a.log,日志轮转大小为10MB,轮转日志个数为3。具体地,日志切分过程可以描述如下:
1.新建日志文件a.log;
2.当a.log大小达到10M时,将a.log重命名为a.log.1,新建a.log,新的日志内容继续往a.log里写入;
3.当新的a.log大小达到10M,将a.log.1重命名为a.log.2,a.log重命名为a.log.1,新建a.log;
4.当a.log再次达到10M,重复步骤3;
5.因轮转日志个数设置为3个,当a.log.3生成后,a.log再次达到10M时,将先删除a.log.3,再将a.log.2重命名为a.log.3,a.log.1重命名为a.log.2,a.log重命名为a.log.1,新建a.log文件继续写入新的日志;
6.后续再触发切分事件,重复步骤5。
日志切分后最多会保留如下4个日志文件:
log(最新)、a.log.1(次新)、a.log.2、a.log.3(旧)
在这种情况下,如果有a.log文件,当该文件会发生切分,上述文件增量读取方案处理如下:
1.正常读取a.log增量,记录该文件的读取起始位置为position;
2.如果此时发生日志切分,从前文介绍的按大小切分的过程可以知道,将先重命名a.log为a.log.1(文件***会将重命名先后标记为a.log.1的新建事件和a.log的删除事件),然后新建a.log文件,那么整个过程发生三次事件发生:新建a.log.1,删除a.log,新建a.log;
3.响应a.log.1新建事件,从0开始读取a.log.1文件增量日志;响应a.log删除事件,不做任何处理;响应a.log新增事件,从0开始读取a.log增量日志。
从上述步骤中,我们可以看到删除a.log和新增a.log事件处理均正确,但a.log.1的新增事件响应读取了整个日志文件的内容,增量读取错误,正确处理应该是读取从记录的position位置到文件末的增量日志。由此可见该方案是不适用于基于轮转日志的增量读取的。
因此,需要一种能够基于切分日志的实时增量读取的方法。
发明内容
根据本发明的一个实施例,提供了一种基于切分日志的实时增量读取的方法,包括:
扫描日志目录下的日志文件,并设置每个文件的读取起始位置;
开启文件***以监听日志目录下的日志文件变化;
当监听到日志文件新建、修改或更新事件时:
判断所述日志文件是否有切分文件;
如果有所述切分文件,则读取增量日志信息并且所述读取起始位置被设置为当前读取长度。
优选地,进一步包括:当监听到日志文件删除事件时:
判断所述日志文件是否存在;以及
如果所述日志文件不存在,则删除所述文件记录的位置。
优选地,所述读取增量日志信息进一步包括:
获取所述日志文件的读取起始位置;
读取所述日志文件的增量日志信息;
将所述读取起始设置为0;以及
将所述日志文件转移到备份路径。
优选地,进一步包括:如果没有所述切分文件,则计算所述日志文件的增量日志信息长度。
优选地,进一步包括:如果所述增量日志信息长度大于0,则:
获取所述读取起始位置;
读取所述增量日志信息;以及
将读取起始位置设置为“所述初始读取位置+所述增量日志信息长度”。
优选地,所述增量日志信息长度是当前文件长度减去所述读取起始位置。
优选地,如果所述增量日志信息长度不大于0,则将读取起始位置设置为0。
优选地,在判断所述日志文件是否存在之前,休眠预定时间。
根据本发明的另一方面,提供一种基于切分日志的实时增量读取的电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器至少实现:
扫描日志目录下的日志文件,并设置每个文件的读取起始位置;
开启文件***以监听日志目录下的日志文件变化;
当监听到日志文件新建、修改或更新事件时:
判断所述日志文件是否有切分文件;
如果有所述切分文件,则读取增量日志信息并且所述读取起始位置被设置为当前读取长度。
根据本发明的又一方面,提供一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时至少实现:
扫描日志目录下的日志文件,并设置每个文件的读取起始位置;
开启文件***以监听日志目录下的日志文件变化;
当监听到日志文件新建、修改或更新事件时:
判断所述日志文件是否有切分文件;
如果有所述切分文件,则读取增量日志信息并且所述读取起始位置被设置为当前读取长度。
根据本公开和附图的下面的详细描述,对本领域的普通技术人员来说其它的目的、特征、以及优点将是显而易见的。
附图说明
附图图示了本发明的实施例,并与说明书一起用于解释本发明的原理。在附图中:
图1图示了根据本发明实施例的基于切分日志的实时增量内容读取的方法的流程图。
图2图示了根据本发明实施例的无轮转切分日志增量内容读取示意图。
图3图示了根据本发明实施例的有轮转切分日志增量内容读取示意图。
具体实施方式
根据本发明的实施例公开了一种基于切分日志的实时增量读取的方法。在以下描述中,为了说明的目的,阐述了多个具体细节以提供对本发明的实施例的全面理解。然而,对于本领域技术人员显而易见的是,本发明的实施例可以在没有这些具体细节的情况下实现。
为了避免因日志文件过大造成增量读取性能下降及降低对服务器磁盘空间使用不可控性,采用按大小切分日志文件保存监控日志是非常必要,而传统的日志文件增量读取方案已无法满足这种场景的日志采集任务。
本发明旨在解决在使用轮转切分日志记录日志内容时如何准确及时的读取增量日志内容问题,通过采用本体日志文件(非轮转日志文件,在前面例子中指a.log)监听方式,单独处理文件切分时触发的多个监听事件,同时增加删除事件过滤和采集增量日志信息长度校验双重机制来保证日志文件读取的准确性和稳定性。
轮转切分日志指的是按照一定规则切分后用于保存历史数据的日志文件,又称轮转日志。前面所述的切分方法产生的a.log.1、a.log.2、a.log.3均为轮转切分日志。
本发明技术方案在常见的日志增量内容读取方案上进行改进,形成新的技术方案——基于轮转切分日志增量内容读取方法,如图1所示,文件***(例如,FileAlterationMonitor)可以监听某个路径下某一类文件的变化,在本方案中,监听的是本体日志文件,即文件名以.log结尾的日志文件。
图1图示了根据本发明实施例的基于切分日志的实时增量读取的方法的流程图。如图1所示,在步骤101,扫描日志目录下所有的日志文件,并设置每个文件的读取起始位置,例如,将每个文件的读取起始位置设置为0。在步骤103,开启文件***以监听日志目录下的日志文件变化的情况。根据本发明的实施方案,针对新建、修改或更新和删除日志文件事件分别进行针对性处理。
新建日志文件事件
当监听到有新的日志文件被建立时,也就是,日志文件变化情况时新建事件,在步骤105,判断是否有轮转,即,判断该文件是否有切分文件。
图2图示了根据本发明实施例的无轮转切分日志增量内容读取示意图。如图2所示,如果在步骤105判断没有轮转,则在步骤107,计算本体日志文件的增量日志信息长度,该增量日志信息长度是当前文件长度减去读取起始位置。然后,在步骤109,判断该增量日志信息长度是否大于0,如果大于0,则在步骤111,获取读取起始位置,读取本体日志文件的增量日志信息,即,从读取起始位置到当前文件大小的日志内容,并在读取完毕之后将读取起始位置修改为“读取起始位置+增量日志信息长度”。如果不是大于0,则在步骤113,将读取起始位置设置为0。
图3图示了根据本发明实施例的有轮转切分日志增量内容读取示意图。如图3所示,如果在步骤105判断有轮转,则在步骤115,获取读取起始位置,按照附图3所示的顺序读取所有的轮转日志文件,在读取完成之后将读取起始位置设置为0。然后,在步骤117,将轮转日志文件转移到备份路径。在步骤119,读取本体日志文件的增量日志信息,并将读取起始位置设置为当前读取长度。
修改或更新日志文件事件
当监听到有日志文件被修改或更新时,也就是,日志文件变化情况时修改或更新事件,处理方法与以上新建日志文件事件的处理方法相同,如图1所示。
删除日志文件事件
当监听到有日志文件被删除时,也就是,日志文件变化情况是删除事件,在步骤121休眠预定时间(例如,0.5秒)。然后在步骤123,检测该日志文件是否存在。如果该文件不存在,则在步骤125,删除该文件记录的位置。休眠是指当监听到删除事件时不立即处理,而是等待一段时间的操作。休眠的原因是为了确认删除是否真实。因为日志重命名时***会监听到两个事件,即,先删除、再重建。例如,这里的删除事件明显不是真实的删除,因此后面需要判断该日志文件是否存在。如果有,则说明是切分操作,否则是真实的删除。因此为了给新建文件预留时间而休眠一段时间是重要的。
图1中两个虚线框中的判断用于对因轮转时触发的假删除事件进行过滤和兼容处理。当文件被删除时,如果不删除该文件的位置值,则当新建一个和该文件同名的日志文件并写入日志时,将使用之前记录的位置值,即,将从该位置读取文件内容。在这种情况下,当新文件的长度小于该位置时,读取将会发生异常。而图中区域2部分判断将会兼容这种异常,将读取起始位置重置为0,下次读取恢复正常,区域1部分判断处理则用可避免该异常问题。
针对现有日志增量内容读取方案无法准确读取基于轮转切分的日志增量内容问题,根据本发明的技术方案,通过分解日志轮转切分过程并准确提取过程中的所有监听事件,通过读取起始位置的动态调整以及轮转切分日志从旧到新依次读取,同时增加删除事件过滤和增量日志信息长度校验双重机制保证了基于切分日志的实时增量读取的方法的可靠性,实现了轮转切分日志增量内容的准确读取,极大的提高了基于切分日志的实时增量内容读取方法的鲁棒性。
上述实施例仅是本发明的优选实施例,并不用于限制本发明。对本领域技术人员显而易见的是,在不脱离本发明精神和范围的情况下,可以对本发明的实施例进行各种修改和改变。因此,本发明意在涵盖落入如权利要求所限定的本发明的范围之内的所有的修改或变型。
Claims (10)
1.一种基于切分日志的实时增量读取的方法,包括:
扫描日志目录下的本体日志文件,并设置所述本体日志文件的读取起始位置;
开启文件***以监听日志目录下所述本体日志文件的变化;
当监听到所述本体日志文件新建、修改或更新事件时:
判断所述本体日志文件是否有切分文件;
如果有切分文件,则获取读取起始位置,确定最旧切分文件,并按照从旧到新的顺序,对各切分文件进行增量日志信息读取,以得到所有切分文件的增量日志信息,之后将所述读取起始位置设置为零;
读取所述本体日志文件的增量日志信息,计算所述本体日志文件的增量日志信息的长度,将所述本体日志文件的读取起始位置设置为所述长度。
2.根据权利要求1所述的方法,其中,进一步包括:
当监听到所述本体日志文件删除事件时:
判断所述本体日志文件是否存在;以及
如果所述本体日志文件不存在,则删除所述本体日志文件在所述日志目录中的位置。
3.根据权利要求1所述的方法,其中,所述得到所有切分文件的增量日志信息进一步包括:
将所有切分文件转移到备份路径。
4.根据权利要求1所述的方法,其中,进一步包括:如果没有切分文件,则计算所述本体日志文件的增量日志信息长度。
5.根据权利要求4所述的方法,其中,进一步包括:
如果所述增量日志信息长度大于0,则:
将所述本体日志文件的读取起始位置设置为“所述读取起始位置+所述增量日志信息长度”。
6.根据权利要求4所述的方法,其中,所述增量日志信息长度是当前文件长度减去所述读取起始位置。
7.根据权利要求4所述的方法,其中,进一步包括:
如果所述增量日志信息长度不大于0,则将所述本体日志文件的读取起始位置设置为0。
8.根据权利要求2所述的方法,其中,在判断所述本体日志文件是否存在之前,休眠预定时间。
9.一种基于切分日志的实时增量读取的电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-8中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510297384.2A CN106294470B (zh) | 2015-06-03 | 2015-06-03 | 基于切分日志的实时增量日志信息读取的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510297384.2A CN106294470B (zh) | 2015-06-03 | 2015-06-03 | 基于切分日志的实时增量日志信息读取的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106294470A CN106294470A (zh) | 2017-01-04 |
CN106294470B true CN106294470B (zh) | 2020-06-05 |
Family
ID=57656080
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510297384.2A Active CN106294470B (zh) | 2015-06-03 | 2015-06-03 | 基于切分日志的实时增量日志信息读取的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106294470B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019445B (zh) * | 2017-09-08 | 2021-07-06 | 北京京东尚科信息技术有限公司 | 数据同步方法和装置、计算设备和存储介质 |
CN108304305A (zh) * | 2018-01-11 | 2018-07-20 | 北京潘达互娱科技有限公司 | 日志文件读取的方法和设备 |
CN110545296A (zh) * | 2018-05-28 | 2019-12-06 | 阿里巴巴集团控股有限公司 | 一种日志数据获取方法、装置及其设备 |
CN112685370B (zh) * | 2020-12-17 | 2022-08-05 | 福建新大陆软件工程有限公司 | 一种日志采集方法、装置、设备和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1995016237A1 (en) * | 1993-12-10 | 1995-06-15 | Intelligence Quotient International Limited | Incremental backup system |
CN104283719A (zh) * | 2014-10-28 | 2015-01-14 | 北京国双科技有限公司 | 一种日志的处理方法、装置及服务器 |
CN104951474A (zh) * | 2014-03-31 | 2015-09-30 | 阿里巴巴集团控股有限公司 | 一种用于获取MySQL binlog增量日志的方法和装置 |
-
2015
- 2015-06-03 CN CN201510297384.2A patent/CN106294470B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1995016237A1 (en) * | 1993-12-10 | 1995-06-15 | Intelligence Quotient International Limited | Incremental backup system |
CN104951474A (zh) * | 2014-03-31 | 2015-09-30 | 阿里巴巴集团控股有限公司 | 一种用于获取MySQL binlog增量日志的方法和装置 |
CN104283719A (zh) * | 2014-10-28 | 2015-01-14 | 北京国双科技有限公司 | 一种日志的处理方法、装置及服务器 |
Also Published As
Publication number | Publication date |
---|---|
CN106294470A (zh) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8290994B2 (en) | Obtaining file system view in block-level data storage systems | |
CN106294470B (zh) | 基于切分日志的实时增量日志信息读取的方法 | |
CN107577717B (zh) | 一种保障数据一致性的处理方法、装置及服务器 | |
CN109284073B (zh) | 数据存储方法、装置、***、服务器、控制节点及介质 | |
CN103761165B (zh) | 日志备份方法及装置 | |
CN105573859A (zh) | 一种数据库的数据恢复方法和设备 | |
US10459804B2 (en) | Database rollback using WAL | |
CN107402870B (zh) | 一种元数据服务器中日志段的处理方法及装置 | |
CN109614054B (zh) | 数据的读取方法和*** | |
US8271454B2 (en) | Circular log amnesia detection | |
CN112925759A (zh) | 数据文件的处理方法和装置、存储介质、电子装置 | |
US10969970B2 (en) | Storage optimization of database in volatile and non-volatile storing unit | |
WO2017067397A1 (zh) | 一种数据恢复方法和装置 | |
CN114238018B (zh) | 日志采集文件完整性检测方法、***、装置及存储介质 | |
CN110543452B (zh) | 一种数据采集的方法及设备 | |
CN111736778B (zh) | 数据更新方法、装置、***和电子设备 | |
CN113672167A (zh) | 一种分布式存储***的数据一致性校验方法、装置及设备 | |
CN114036121A (zh) | 一种日志文件处理方法、装置、***、设备及存储介质 | |
CN113485872A (zh) | 故障处理方法、装置及分布式存储*** | |
CN110109934B (zh) | 一种数据库管理方法、装置、服务器及存储介质 | |
CN113535482A (zh) | 云备份链数据备份、管理方法及装置、设备、可读介质 | |
CN112650613A (zh) | 一种错误信息处理方法、装置、电子设备及存储介质 | |
CN111625402A (zh) | 数据恢复方法、装置、电子设备及计算机可读存储介质 | |
CN113312309A (zh) | 快照链的管理方法、装置和存储介质 | |
CN106959888B (zh) | 云存储***中的任务处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |