CN103914485B - 一种远程收集和检索展示应用***日志的***及方法 - Google Patents
一种远程收集和检索展示应用***日志的***及方法 Download PDFInfo
- Publication number
- CN103914485B CN103914485B CN201310005334.3A CN201310005334A CN103914485B CN 103914485 B CN103914485 B CN 103914485B CN 201310005334 A CN201310005334 A CN 201310005334A CN 103914485 B CN103914485 B CN 103914485B
- Authority
- CN
- China
- Prior art keywords
- record
- module
- file
- log
- time
- 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
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/172—Caching, prefetching or hoarding of files
-
- 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/13—File access structures, e.g. distributed indices
- G06F16/134—Distributed indices
-
- 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/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- 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/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
- H04L67/025—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP] for remote control or remote monitoring of applications
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)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种远程收集和检索展示应用***日志的***及方法,其中:将服务端***简称LogServer与需要收集日志的服务安装在同一台机器,配置LogServer日志收集目录为服务产生日志的目录;在任意一台终端运行客户端***简称LogViewer,添加需要收集日志的服务器,即可根据条件检索对应的日志;所述服务端***包括日志索引模块、日志检索模块、日志压缩模块、日志传输模块;所述客户端***包括请求预处理模块、请求处理模块、本地日志缓存维护模块、日志检索模块、信息展示模块。本发明可极大地提高定位解决应用***问题的效率,有效地减轻应用***运维的成本,增强应用***的完备性和可靠性。
Description
技术领域
本发明涉及一种日志收集***及方法,具体地,涉及一种远程收集和检索展示应用***日志的***及方法,尤其是针对海量日志其高性能的远程日志检索方法和灵活的过滤展示方案。
背景技术
日志记录几乎是所有应用***不可或缺的功能,为保证应用***出错的可追溯性和可恢复性,我们往往通过记录大量的日志来有效地检查和监视***的运行,快速定位***运行出现的问题。对于大量的日志,如何快速有效地对日志进行检索,尤其是对于那些将服务器部署在运维人员难以接触的地方,日志如何远程收集检索更是尤为突出的问题。
现有技术中,通常采用如下两种方案收集分析日志:
1)本地日志收集:直接在应用服务部署的主机上收集该服务运行的日志,此方案存在有多个明显的缺点,首先需要有权限接触到运行该服务的主机并且登录主机获取日志,这个对于部署在现场的环境往往是非常困难的,尤其对于像煤矿、炼钢、高速公路收费站等环境更是难上加难;其次对于那些需要动态监视检索日志查找***出错规律的问题往往无法通过用户实时提供日志信息,这就需要我们的产品开发维护人员到现场动态观测日志、分析日志,这无疑增加了许多额外成本;再次频繁地进入现场查看日志,分析问题也增加了用户对产品的不信任;
2)简单远程收集日志:通过在应用***中增加日志获取功能模块,然后通过特定终端获取日志,此方案实现时往往只能细化到获取特定模块的所有日志或者某天的日志,由于缺乏有效的检索技术手段,对于***异常时产生的大量日志获取一次通常需要大量的时间和占用大量的网络带宽,并且无法做到动态实时监控指定条件的异常日志,这对于现场需要紧急修复的问题显得尤为低效。
经检索,中国专利申请(专利)号:200810004231.4名称:终端日志传送***及方法,该发明公开了一种终端日志传送***及方法。其中,该终端日志传送***包括:日志发送单元,位于终端侧,用于响应于日志接收单元的日志会话请求,从日志存储单元中获取终端日志,并将终端日志发送给日志中转单元;日志中转单元,位于基站侧,用于在日志发送单元和日志接收单元之间中转日志会话请求和终端日志;以及日志接收单元,位于操作维护中心侧,用于向日志发送单元发送日志会话请求,以及用于接收并存储终端日志。通过该发明,可以在远程迅速获取终端的日志信息,从而可以较好地改善问题响应和故障定位的速度。
该专利提供了获取远程终端的日志信息方法,但是每次请求均只能返回所有的日志信息,无法增量的返回最新的日志记录,对于通过远程实时动态的监控***服务的日志来监控服务运行的需求其效率很差,甚至无法满足需求,因为其没有提供有效的增量请求机制和高效的检索算法来减少每次日志请求的记录数,从而减少网络传输所占用的带宽,提供远程获取终端日志的效率。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种远程收集和检索展示应用***日志的***及方法,实现海量日志的远程高效检索和过滤展示,减少网络传输所占用的带宽,提供远程获取终端日志的效率。通过本发明提供的高性能的日志检索及高效的日志过滤展示可极大地提高定位解决应用***问题的效率,有效地减轻应用***运维的成本,增强应用***的完备性和可靠性。
根据本发明的一个方面,提供一种远程收集和检索展示应用***日志的服务端***,包括:
日志索引模块:该模块负责将服务端产生的日志根据文件名称和产生时间建立索引表,并不断更新维护,索引表记录了每个日志文件对应的记录的起始时间和终止时间;
日志检索模块:该模块负责接受来自客户端某个时间段的日志检索请求,检索日志索引模块维护的索引表,通过使用基于时间字段的精确快速文件搜索算法,快速检索满足条件的日志记录;
日志压缩模块:该模块负责将日志检索模块返回的数据进行压缩,减少日志数据的大小;
日志传输模块:该模块负责将日志压缩模块的数据返回给日志查询客户端,支持断点续传功能。
根据本发明的另一个方面,提供一种远程收集和检索展示应用***日志的客户端***,包括:
请求处理模块:该模块首先将日志请求转发给请求预处理模块,请求预处理模块处理完毕后返回结果为“待检索时间段”和“本地缓存已有时间段”请求,请求处理模块将“待检索时间段”请求发送给服务端***,同时将服务端***反馈的数据进行解压处理,将服务端***反馈数据交付给本地日志缓存维护模块,将“本地缓存已有时间段”请求发送给日志检索模块检索本地缓存满足条件的日志记录,最后将所有满足条件的日志记录发送信息展示模块进行显示;
请求预处理模块:该模块针对用户每次日志请求的本地缓存对用户请求时间段进行切割(将请求时间段分为本地缓存已有时间段和待检索时间段),避免重叠区域的多次请求,本模块采用基于本地缓存的时间段请求切割算法,该模块将处理结果提交给请求处理模块;
日志检索模块:该模块接受来自请求处理模块的本地缓存日志检索请求,首先检索日志索引模块维护的索引表,然后通过使用基于时间字段的精确快速文件搜索算法,快速检索满足条件的日志记录,并将检索结果返回给请求处理模块;
本地日志缓存维护模块:该模块将返回的日志记录存储到对应的日志文件,对于不连续的日志单独的存放在一个独立的文件,对于与已有缓存文件时间上连续(本地缓存文件最大时间的下一时刻,或者最小时间的前一时刻)的日志进行合并,同时维护各个文件的时间索引信息;
信息展示模块:该模块通过界面将日志记录按照字段解析显示,并同步提供按字段排序,按日志级别标注不同颜色等高级功能,可以方便用户快速有效的定位问题。
根据本发明的另一个方面,提供一种远程收集和检索展示应用***日志的方法,步骤如下:
1)将服务端***(简称LogServer)与需要收集日志的服务安装在同一台机器,配置LogServer日志收集目录为服务产生日志的目录;
2)在任意一台终端运行客户端***(简称LogViewer),添加需要收集日志的服务器,即可根据条件检索对应的日志;
a)用户通过LogViewer提交日志时间段检索查询请求;LogViewer请求处理模块将检索请求提交给请求预处理模块;
b)LogViewer请求预处理模块生成本地缓存已有时间段和待检索时间段请求返回给请求处理模块,如果待检索时间段为空,则请求处理模块直接通过其日志检索模块从本地缓存读取日志记录并提交给其信息展示模块显示,结束本次请求,否则提交给LogViewer日志处理模块;
c)LogViewer日志处理模块提交请求给LogServer;
d)LogServer日志检索模块检索日志索引模块维护的日志索引,获取满足条件的日志记录提交给LogServer日志压缩模块;
e)LogServer日志压缩模块压缩日志记录,并提交给日志传输模块;
f)LogServer日志传输模块将日志返回给LogViewer;
g)LogViewer日志请求处理模块接收数据并解压,同时根据其请求预处理模块生成的本地缓存已有时间段通过其日志检索模块查询本地缓存获取对应记录,将接收的记录和本地查询获取的记录合并交给其信息展示模块显示日志信息,同时接收的记录交给本地日志缓存维护模块缓存日志请求信息。
优选地,所述日志检索模块使用基于时间字段的精确快速文件搜索算法,快速检索满足条件的日志记录,该算法如下:
(1).每条日志记录的最大长度记为MAX_RECORD_LEN字节,每条日志记录的最小长度记为MIN_RECORD_LEN字节;
(2).待搜索文件的大小记为M字节,文件的记录时间区间记为[FILE_RECORD_START_TIME,FILE_RECORD_END_TIME];
(3).日志文件里同一时间的记录可能有很多条,每条日志都包含换行符,每条日志的起始19个字节表示时间;
(4).客户端请求的时间区间记为[SEARCH_LOWER_BOUNDER,SEARCH_UPPER_BOUNDER];
(5).若SEARCH_LOWER_BOUNDER>=FILE_RECORD_START_TIME&&SEARCH_LOWER_BOUNDER<FILE_RECORD_END_TIME,则日志中有且仅有连续的两条记录,其记录时间分别为T1、T2,满足条件SEARCH_LOWER_BOUNDER∈[T1,T2),T1<T2;
(6).若SEARCH_UPPER_BOUNDER>FILE_RECORD_START_TIME&&SEARCH_UPPER_BOUNDER<=FILE_RECORD_END_TIME,则日志中有且仅有连续的两条记录,其记录时间分别为T1、T2,满足条件SEARCH_UPPER_BOUNDER∈(T1,T2],T1<T2。
与现有技术相比,本发明具有如下的有益效果:
本发明提供了高效的远程日志检索方案,极大地减少了日志收集带来的额外成本,有效地提高了根据日志定位解决问题的效率,为产品的日志收集提供了完善而高效的解决方案。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明实施例部署图;
图2为本发明实施例LogServer各模块交互图;
图3为本发明实施例LogViewer各模块交互图;
图4为本发明实施例日志文件内的记录格式。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。
实施例1
上海宝信软件股份有限公司高性能实时数据库,内核及后台服务部署的服务器同步部署了服务端***LogServer,通过客户端***LogViewer可快速有效的获取程序运行日志,监控程序运行状态。
本实施例后台服务记录日志信息的日志字段包括产生时间、等级、错误码、进程id、线程id、源文件、函数、详细信息等多个字段。如图1所示本方案采用CS架构部署,具体部署方案如下所述:
1)将LogServer与需要收集日志的服务安装在同一台机器,配置LogServer日志收集目录为服务产生日志的目录;
2)在任意一台终端运行LogViewer,添加需要收集日志的服务器,即可根据条件检索对应的日志。
为应对海量日志的快速检索,LogServer设计了多个并发高性能引擎模块,各个模块之间的交互见图2,各模块功能具体介绍如下:
●日志索引模块:该模块负责将服务端产生的日志根据文件名称和产生时间建立索引表,并不断更新维护,索引表记录了每个日志文件对应的记录的起始时间和终止时间;
●基于时间的高性能日志检索模块:该模块负责接受来自客户端某个时间段的日志检索请求,检索日志索引模块维护的索引表,通过使用基于时间字段的精确快速文件搜索算法,快速检索满足条件的日志记录,该算法详述如下:
1.每条日志记录的最大长度记为MAX_RECORD_LEN字节,每条日志记录的最小长度记为MIN_RECORD_LEN字节;
2.待搜索文件的大小记为M字节,文件的记录时间区间记为[FILE_RECORD_START_TIME,FILE_RECORD_END_TIME];
3.日志文件里同一时间的记录可能有很多条,每条日志都包含换行符,每条日志的起始19个字节表示时间,日志文件内的记录格式如图4;
4.客户端请求的时间区间记为[SEARCH_LOWER_BOUNDER,SEARCH_UPPER_BOUNDER](注意这里是闭区间);
5.若SEARCH_LOWER_BOUNDER>=FILE_RECORD_START_TIME&&SEARCH_LOWER_BOUNDER<FILE_RECORD_END_TIME,则日志中有且仅有连续的两条记录,其记录时间分别为T1、T2,满足条件SEARCH_LOWER_BOUNDER∈[T1,T2)(T1<T2,左闭右开区间);
6.若SEARCH_UPPER_BOUNDER>FILE_RECORD_START_TIME&&SEARCH_UPPER_BOUNDER<=FILE_RECORD_END_TIME,则日志中有且仅有连续的两条记录,其记录时间分别为T1、T2,满足条件SEARCH_UPPER_BOUNDER∈(T1,T2](T1<T2,左开右闭区间)。
算法输入:
1.文件对象指针fp
2.搜索的时间点tSearchTime
3.搜索条件tSearchCondition,定位为两种:GREATER_OR_EQUAL(大于等于T)和LESS_OR_EQUAL(小于等于T)
4.文件内搜索的起始位置nStartPos
5.文件内搜索的终止位置nEndPos
算法输出:
满足条件的记录在文件内的起始位置
算法描述:
1.置nStartPos=0,nEndPos=M;
2.若tSearchTime<FILE_RECORD_START_TIME或者tSearchTime>FILE_RECORD_END_TIME,返回-1(标识没有找到记录);
3.若tSearchCondition==GREATER_OR_EQUAL;
3.1若tSearchTime==FILE_RECORD_START_TIME,返回0;
3.2将文件对象指针定位到nPos=(nEndPos-nStartPos)/2,读取文件对象指针当前指向记录的时间tCurTime,计算起始位置nCurPos;
3.2.1若tSearchTime>tCurTime,计算nPos指向记录的下一条记录起始位置nNextLinePos,置nStartPos=nNextLinePos,继续执行3.2;
3.2.2若tSearchTime<=tCurTime,读取nPos指向记录的前一条记录的时间tPrevTime,计算起始位置为nPrevLinePos,若tSearchTime>tPrevTime,返回nCurPos;若tSearchTime<=tPrevTime,置nEndPos=nPrevLinePos,继续执行3.2;
4.若tSearchCondition==LESS_OR_EQUAL;
4.1若tSearchTime==FILE_RECORD_END_TIME,返回最后一条记录的起始位置;
4.2将文件对象指针定位到nPos=(nEndPos-nStartPos)/2,读取文件对象指针当前指向记录的时间tCurTime,计算起始位置nCurPos;
4.2.1若tSearchTime>=tCurTime,计算nPos指向记录的下一条记录起始位置nNextLinePos,置nStartPos=nNextLinePos,继续执行4.2;
4.2.2若tSearchTime<tCurTime,读取nPos指向记录的前一条记录的时间tPrevTime,计算起始位置为nPrevLinePos,若tSearchTime>=tPrevTime,返回nPrevLinePos;若tSearchTime<nPrevLinePos,置nEndPos=nPrevLinePos,继续执行4.2;
注解:读取文件指针指向记录的起始位置仅需将文件指针定位于当前位置(nCurPos)减去MAX_RECORD_LEN的位置(记为:nSearchPos)(如果为负数,置nSearchPos=0),然后读取nCurPos-nSearchPos个字节到内存Buffer,查找到最后一行在内存Buffer中的偏移量nOffset,nSearchPos+nOffset即为文件指针指向记录的起始位置;读取前一条记录的偏移量和读取后一条记录的起始位置类似。
算法复杂度:
该算法的复杂度可用平均读写文件次数来衡量,综上所述该算法的复杂度为O(Log(M/MIN_RECORD_LEN)),而采用逐行读取,获取指定记录的起始位置的复杂度为O(M/MIN_RECORD_LEN)
●高效的日志压缩模块:该引擎负责将日志检索引擎返回的数据进行压缩,由于日志中包含了很多冗余信息,通过该引擎处理后可极大地减少日志数据的大小,有效地节约网络带宽
●可断点续传的日志传输模块:该引擎负责将日志压缩引擎的数据返回给日志查询客户端,支持断点续传功能
为了有效的提高查询速度,减少网络交互时间,同时提高用户分析效率,LogViewer设计了如下几个模块,各模块交互见图3:
●请求预处理模块:该模块针对用户每次日志请求的本地缓存对用户请求时间段进行切割(将请求时间段分为本地缓存已有时间段和待检索时间段),避免重叠区域的多次请求,本模块设计实现了基于本地缓存的时间段请求切割算法,详述如下:
算法说明:
本地缓存的同一模块的多个日志文件其日志记录没有交集(即不可能同一条记录同时属于两个日志文件)
算法输入:
1.搜索的模块名szModuleName
2.搜索的时间区间[tSearchStartTime,tSearchEndTime]
算法描述:
1.加载模块szModuleName关联的缓存文件信息,通过文件名建立索引列表(缓存文件名-->记录的时间区间)并按照文件名升序排序(若已加载,则无需此步骤)
2.按顺序获取文件索引列表一条索引记录,若无索引记录,则算法返回,否则判断时间区间[tSearchStartTime,tSearchEndTime]与该索引记录的时间区间(记为[tIndexStartTime,tIndexEndTime])是否相交;
2.1不相交
直接向LogServer请求时间区间[tSearchStartTime,tSearchEndTime]内的日志记录,并创建新的缓存文件(文件名为:szModuleName_tSearchStartTime_tSearchEndTime.dat),在内存中添加一条新的索引szModuleName_tSearchStartTime_tSearchEndTime.dat-->[tSearchStartTime,tSearchEndTime],算法返回;
2.2相交
2.2.1若tSearchStartTime>=tIndexStartTime&&tSearchEndTime<=tIndexEndTime,直接读取对应缓存文件日志记录,算法返回;
2.2.2若tSearchStartTime>tIndexStartTime&&tSearchEndTime>tIndexEndTime,置tSearchStartTime=tIndexEndTime,继续执行算法2.2;
2.2.3若tSearchStartTime<tIndexStartTime&&tSearchEndTime<=tIndexEndTime,直接向LogServer请求时间区间[tSearchStartTime,tIndexStartTime]内的日志记录,并创建新的缓存文件(文件名为:szModuleName_tSearchStartTime_tIndexEndTime.dat)记录获取的日志,将索引对应的文件记录合并到该缓存文件中,内存中修改索引为:szModuleName_tSearchStartTime_tIndexEndTime.dat-->[tSearchStartTime,tIndexEndTime],算法返回;
2.2.4若tSearchStartTime<tIndexStartTime&&tSearchEndTime>tIndexEndTime,向LogServer请求时间区间[tSearchStartTime,tIndexStartTime]内的日志记录,并创建新的缓存文件(文件名为:szModuleName_tSearchStartTime_tIndexStartTime.dat),将索引对应的文件记录合并到该缓存文件中,内存中修改索引为:szModuleName_tSearchStartTime_tIndexStartTime.dat-->[tSearchStartTime,tIndexStartTime],置tSearchStartTime=tIndexEndTime,继续执行算法2.2;
算法注解:
合并缓存文件为避免重复记录需要进行特殊处理,现假设将B文件合并到A文件,获取B文件的首记录的起始时间,利用基于时间字段的精确快速文件搜索算法(见logserver介绍)查找出该时间在A文件里的位置,将A文件的文件指针定位于该位置,将B文件从该位置写入。
●请求处理模块:该模块负责将预处理生成的请求发送给LogServer,同时将LogServer反馈的数据进行解压处理,将LogServer反馈数据交付给本地日志缓存维护模块,同时结合本地缓存查询结果信息提交给展示模块进行显示;
●本地日志缓存维护模块:该模块将返回的日志记录存储到对应的日志文件,对于不连续的日志单独的存放在一个独立的文件,对于与已有缓存文件时间上连续(本地缓存文件最大时间的下一时刻,或者最小时间的前一时刻)的日志进行合并,同时维护各个文件的时间索引信息;
●基于时间的高性能日志检索模块:该模块和LogServer完全相同;
●信息展示模块:该模块通过界面将日志记录按照字段解析显示,并同步提供按字段排序,按日志级别标注不同颜色等高级功能,可以方便用户快速有效的定位问题。
基于上述内容,远程收集和检索展示应用***日志的方法处理流程如下:
a)用户通过LogViewer提交日志时间段检索查询请求,LogViewer请求处理模块将检索请求提交给请求预处理模块;
b)LogViewer请求预处理模块生成本地缓存已有时间段和待检索时间段请求,如果待检索时间段为空,则直接通过其日志检索模块从本地缓存读取日志记录并提交给其信息展示模块显示,结束本次请求,否则提交给LogViewer日志处理模块;
c)LogViewer日志请求处理模块提交请求给LogServer;
d)LogServer日志检索模块检索日志索引模块维护的日志索引,获取满足条件的日志记录提交给LogServer日志压缩模块;
e)LogServer日志压缩模块压缩日志记录,并提交给日志传输模块;
f)LogServer日志传输模块将日志返回给LogViewer;
g)LogViewer日志处理模块接收数据并解压,同时根据其请求预处理模块生成的本地缓存已有时间段通过其日志检索模块查询本地缓存获取对应记录,将接收的记录和本地查询获取的记录合并交给其信息展示模块显示日志信息,同时接收的记录交给本地日志缓存维护模块缓存日志请求信息。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。
Claims (5)
1.一种远程收集和检索展示应用***日志的服务端***,包括:
日志索引模块:该模块负责将服务端产生的日志根据文件名称和产生时间建立索引表,并不断更新维护,索引表记录了每个日志文件对应的记录的起始时间和终止时间;
日志检索模块:该模块负责接受来自客户端某个时间段的日志检索请求,检索日志索引模块维护的索引表,通过使用基于时间字段的精确快速文件搜索算法,快速检索满足条件的日志记录;
日志压缩模块:该模块负责将日志检索模块返回的数据进行压缩,减少日志数据的大小;
日志传输模块:该模块负责将日志压缩模块的数据返回给日志查询客户端,支持断点续传功能;
所述日志检索模块使用基于时间字段的精确快速文件搜索算法,快速检索满足条件的日志记录,该算法如下:
(1)每条日志记录的最大长度记为MAX_RECORD_LEN字节,每条日志记录的最小长度记为MIN_RECORD_LEN字节;
(2)待搜索文件的大小记为M字节,文件的记录时间区间记为[FILE_RECORD_START_TIME,FILE_RECORD_END_TIME];
(3)日志文件里同一时间的记录可能有很多条,每条日志都包含换行符,每条日志的起始19个字节表示时间;
(4)客户端请求的时间区间记为[SEARCH_LOWER_BOUNDER,SEARCH_UPPER_BOUNDER];
(5)若SEARCH_LOWER_BOUNDER>=FILE_RECORD_START_TIME&&SEARCH_LOWER_BOUNDER<FILE_RECORD_END_TIME,则日志中有且仅有连续的两条记录,其记录时间分别为T1、T2,满足条件SEARCH_LOWER_BOUNDER∈[T1,T2),T1<T2;
(6)若SEARCH_UPPER_BOUNDER>FILE_RECORD_START_TIME&&SEARCH_UPPER_BOUNDER<=FILE_RECORD_END_TIME,则日志中有且仅有连续的两条记录,其记录时间分别为T1、T2,满足条件SEARCH_UPPER_BOUNDER∈(T1,T2],T1<T2。
2.一种远程收集和检索展示应用***日志的客户端***,包括:
请求处理模块:该模块首先将日志请求转发给请求预处理模块,请求预处理模块处理完毕后返回结果为“待检索时间段”和“本地缓存已有时间段”请求,请求处理模块将“待检索时间段”请求发送给服务端***,同时将服务端***反馈的数据进行解压处理,将服务端***反馈数据交付给本地日志缓存维护模块,将“本地缓存已有时间段”请求发送给日志检索模块检索本地缓存满足条件的日志记录,最后将所有满足条件的日志记录发送信息展示模块进行显示;
请求预处理模块:该模块针对用户每次日志请求的本地缓存对用户请求时间段进行切割,将请求时间段分为本地缓存已有时间段和待检索时间段,避免重叠区域的多次请求,本模块采用基于本地缓存的时间段请求切割算法,该模块将处理结果提交给请求处理模块;
日志检索模块:该模块接受来自请求处理模块的本地缓存日志检索请求,首先检索日志索引模块维护的索引表,然后通过使用基于时间字段的精确快速文件搜索算法,快速检索满足条件的日志记录,并将检索结果返回给请求处理模块;
信息展示模块:该模块通过界面将日志记录按照字段解析显示,并同步提供按字段排序,按日志级别标注不同颜色功能,方便用户快速有效的定位问题;
所述日志检索模块使用基于时间字段的精确快速文件搜索算法,快速检索满足条件的日志记录,该算法如下:
(1)每条日志记录的最大长度记为MAX_RECORD_LEN字节,每条日志记录的最小长度记为MIN_RECORD_LEN字节;
(2)待搜索文件的大小记为M字节,文件的记录时间区间记为[FILE_RECORD_START_TIME,FILE_RECORD_END_TIME];
(3)日志文件里同一时间的记录可能有很多条,每条日志都包含换行符,每条日志的起始19个字节表示时间;
(4)客户端请求的时间区间记为[SEARCH_LOWER_BOUNDER,SEARCH_UPPER_BOUNDER];
(5)若SEARCH_LOWER_BOUNDER>=FILE_RECORD_START_TIME&&SEARCH_LOWER_BOUNDER<FILE_RECORD_END_TIME,则日志中有且仅有连续的两条记录,其记录时间分别为T1、T2,满足条件SEARCH_LOWER_BOUNDER∈[T1,T2),T1<T2;
(6)若SEARCH_UPPER_BOUNDER>FILE_RECORD_START_TIME&&SEARCH_UPPER_BOUNDER<=FILE_RECORD_END_TIME,则日志中有且仅有连续的两条记录,其记录时间分别为T1、T2,满足条件SEARCH_UPPER_BOUNDER∈(T1,T2],T1<T2。
3.一种采用权利要求1所述服务端***和权利要求2所述客户端***实现的远程收集和检索展示应用***日志的方法,步骤如下:
1)将服务端***简称LogServer与需要收集日志的服务安装在同一台机器,配置LogServer日志收集目录为服务产生日志的目录;
2)在任意一台终端运行客户端***简称LogViewer,添加需要收集日志的服务器,即可根据条件检索对应的日志;
a)用户通过LogViewer提交日志时间段检索查询请求;
b)LogViewer请求预处理模块生成本地缓存已有时间段和待检索时间段请求,如果待检索时间段为空,则直接通过其日志检索模块从本地缓存读取日志记录并提交给其信息展示模块显示,结束本次请求,否则提交给LogViewer日志处理模块;
c)LogViewer日志处理模块提交请求给LogServer;
d)LogServer日志检索模块检索日志索引模块维护的日志索引,获取满足条件的日志记录提交给LogServer日志压缩模块;
e)LogServer日志压缩模块压缩日志记录,并提交给日志传输模块;
f)LogServer日志传输模块将日志返回给LogViewer;
g)LogViewer日志处理模块接收数据并解压,同时根据其请求预处理模块生成的本地缓存已有时间段通过其日志检索模块查询本地缓存获取对应记录,将接收的记录和本地查询获取的记录合并交给其信息展示模块显示日志信息,同时接收的记录交给本地日志缓存维护模块缓存日志请求信息。
4.根据权利要求3所述的方法,其特征在于,所述基于时间字段的精确快速文件搜索算法,具体为:
算法输入:
文件对象指针fp;
搜索的时间点tSearchTime;
搜索条件tSearchCondition,定位为两种:GREATER_OR_EQUAL,大于等于T;和LESS_OR_EQUAL,小于等于T;
文件内搜索的起始位置nStartPos
文件内搜索的终止位置nEndPos
算法输出:
满足条件的记录在文件内的起始位置;
算法步骤:
①置nStartPos=0,nEndPos=M;
②若tSearchTime<FILE_RECORD_START_TIME或者tSearchTime>FILE_RECORD_END_TIME,返回-1标识没有找到记录;
③若tSearchCondition==GREATER_OR_EQUAL;
3.1若tSearchTime==FILE_RECORD_START_TIME,返回0;
3.2将文件对象指针定位到nPos=(nEndPos-nStartPos)/2,读取文件对象指针当前指向记录的时间tCurTime,计算起始位置nCurPos;
3.2.1若tSearchTime>tCurTime,计算nPos指向记录的下一条记录起始位置nNextLinePos,置nStartPos=nNextLinePos,继续执行3.2;
3.2.2若tSearchTime<=tCurTime,读取nPos指向记录的前一条记录的时间tPrevTime,计算起始位置为nPrevLinePos,若tSearchTime>tPrevTime,返回nCurPos;若tSearchTime<=tPrevTime,置nEndPos=nPrevLinePos,继续执行3.2;
④若tSearchCondition==LESS_OR_EQUAL;
4.1若tSearchTime==FILE_RECORD_END_TIME,返回最后一条记录的起始位置;
4.2将文件对象指针定位到nPos=(nEndPos-nStartPos)/2,读取文件对象指针当前指向记录的时间tCurTime,计算起始位置nCurPos:
4.2.1若tSearchTime>=tCurTime,计算nPos指向记录的下一条记录起始位置nNextLinePos,置nStartPos=nNextLinePos,继续执行4.2;
4.2.2若tSearchTime<tCurTime,读取nPos指向记录的前一条记录的时间tPrevTime,计算起始位置为nPrevLinePos,若tSearchTime>=tPrevTime,返回nPrevLinePos;若tSearchTime<nPrevLinePos,置nEndPos=nPrevLinePos,继续执行4.2。
5.根据权利要求3所述的方法,其特征在于,所述请求预处理模块采用基于本地缓存的时间段请求切割算法,该算法如下:
本地缓存的同一模块的多个日志文件其日志记录没有交集,即不可能同一条记录同时属于两个日志文件,算法输入:
搜索的模块名szModuleName
搜索的时间区间[tSearchStartTime,tSearchEndTime]
A1加载模块szModuleName关联的缓存文件信息,通过文件名建立索引列表:缓存文件名-->记录的时间区间,并按照文件名升序排序,若已加载,则无需此步骤;
A2按顺序获取文件索引列表一条索引记录,若无索引记录,则算法返回,否则判断时间区间[tSearchStartTime,tSearchEndTime]与该索引记录的时间区间[tIndexStartTime,tIndexEndTime]是否相交:
2.1不相交
直接向LogServer请求时间区间[tSearchStartTime,tSearchEndTime]内的日志记录,并创建新的缓存文件,文件名为:szModuleName_tSearchStartTime_tSearchEndTime.dat,在内存中添加一条新的索引szModuleName_tSearchStartTime_tSearchEndTime.dat-->[tSearchStartTime,tSearchEndTime],算法返回;
2.2相交
2.2.1若tSearchStartTime>=tIndexStartTime&&tSearchEndTime<=tIndexEndTime,直接读取对应缓存文件日志记录,算法返回;
2.2.2若tSearchStartTime>tIndexStartTime&&tSearchEndTime>tIndexEndTime,置tSearchStartTime=tIndexEndTime,继续执行算法步骤2.2;
2.2.3若tSearchStartTime<tIndexStartTime&&tSearchEndTime<=tIndexEndTime,直接向LogServer请求时间区间[tSearchStartTime,tIndexStartTime]内的日志记录,并创建新的缓存文件,文件名为:szModuleName_tSearchStartTime_tIndexEndTime.dat记录获取的日志,将索引对应的文件记录合并到该缓存文件中,内存中修改索引为:szModuleName_tSearchStartTime_tIndexEndTime.dat-->[tSearchStartTime,tIndexEndTime],算法返回;
2.2.4若tSearchStartTime<tIndexStartTime&&tSearchEndTime>tIndexEndTime,向LogServer请求时间区间[tSearchStartTime,tIndexStartTime]内的日志记录,并创建新的缓存文件,文件名为:szModuleName_tSearchStartTime_tIndexStartTime.dat,将索引对应的文件记录合并到该缓存文件中,内存中修改索引为:szModuleName_tSearchStartTime_tIndexStartTime.dat-->[tSearchStartTime,tIndexStartTime],置tSearchStartTime=tIndexEndTime,继续执行算法步骤2.2。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310005334.3A CN103914485B (zh) | 2013-01-07 | 2013-01-07 | 一种远程收集和检索展示应用***日志的***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310005334.3A CN103914485B (zh) | 2013-01-07 | 2013-01-07 | 一种远程收集和检索展示应用***日志的***及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103914485A CN103914485A (zh) | 2014-07-09 |
CN103914485B true CN103914485B (zh) | 2017-05-03 |
Family
ID=51040176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310005334.3A Active CN103914485B (zh) | 2013-01-07 | 2013-01-07 | 一种远程收集和检索展示应用***日志的***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103914485B (zh) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630626B (zh) * | 2014-11-03 | 2020-05-05 | 中兴通讯股份有限公司 | 事务备份处理方法及装置 |
CN104391954B (zh) * | 2014-11-27 | 2019-04-09 | 北京国双科技有限公司 | 数据库日志的处理方法及装置 |
CN104572916B (zh) * | 2014-12-26 | 2017-05-17 | 北京奇虎科技有限公司 | 文件查询方法和*** |
CN106445943B (zh) * | 2015-08-06 | 2020-09-08 | 南京中兴新软件有限责任公司 | 一种日志的展示方法及装置 |
CN105045905B (zh) * | 2015-08-07 | 2018-11-30 | 北京思特奇信息技术股份有限公司 | 一种基于全文检索的日志维护方法及*** |
KR20170082427A (ko) * | 2016-01-06 | 2017-07-14 | 삼성전자주식회사 | 이동 장치 및 그의 정보 획득 및 검색 방법 |
CN105740348A (zh) * | 2016-01-25 | 2016-07-06 | 武汉精伦电气有限公司 | 一种基于分布式终端***关键日志信息提取方法及*** |
CN106169962A (zh) * | 2016-09-13 | 2016-11-30 | 郑州云海信息技术有限公司 | 一种存储***故障监测方法及*** |
CN107153602A (zh) * | 2017-04-14 | 2017-09-12 | 努比亚技术有限公司 | 处理线上服务器的log数据的装置及方法 |
CN109101504B (zh) * | 2017-06-20 | 2023-09-19 | 恒为科技(上海)股份有限公司 | 一种日志压缩和索引方法 |
CN107181633A (zh) * | 2017-07-27 | 2017-09-19 | 郑州云海信息技术有限公司 | 一种远程获取业务日志的方法及*** |
CN107360242A (zh) * | 2017-07-27 | 2017-11-17 | 郑州云海信息技术有限公司 | 一种日志文件的下载方法及*** |
CN107480277B (zh) * | 2017-08-22 | 2021-01-26 | 北京京东尚科信息技术有限公司 | 用于网站日志采集的方法及装置 |
CN108363654B (zh) * | 2018-02-08 | 2021-03-23 | 上海闻泰电子科技有限公司 | ***日志的协处理方法、***及电子设备 |
CN108508459B (zh) * | 2018-04-04 | 2022-05-10 | 千寻位置网络有限公司 | 在线定位的排障方法及装置、定位*** |
CN108810122A (zh) * | 2018-06-01 | 2018-11-13 | 中冶南方工程技术有限公司 | 用于轧钢二级的日志***及其使用方法 |
CN109189726B (zh) * | 2018-08-08 | 2020-12-22 | 奇安信科技集团股份有限公司 | 一种读写日志的处理方法及装置 |
CN110750587B (zh) * | 2019-10-15 | 2023-04-25 | 大连莱克科技发展有限公司 | 一种调试设备的大量高速日志处理方法 |
CN115380282A (zh) * | 2020-05-20 | 2022-11-22 | 深圳市欢太科技有限公司 | 日志数据处理方法及相关产品 |
CN113190410A (zh) * | 2021-05-10 | 2021-07-30 | 芯讯通无线科技(上海)有限公司 | 日志收集方法、***、客户端和存储介质 |
CN115576908A (zh) * | 2021-07-05 | 2023-01-06 | 北京字节跳动网络技术有限公司 | 日志文件发送方法、装置和客户端 |
CN113342754A (zh) * | 2021-07-08 | 2021-09-03 | 北京中联国成科技有限公司 | 一种日志异常数据提取方法及装置 |
CN113656246B (zh) * | 2021-08-13 | 2024-03-19 | 杭州安恒信息技术股份有限公司 | 日志解析方法、***、电子装置、计算机设备及存储介质 |
CN115470179A (zh) * | 2022-08-15 | 2022-12-13 | 中国建设银行股份有限公司 | 一种文件查询方法、产品、介质和设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101055587A (zh) * | 2007-05-25 | 2007-10-17 | 清华大学 | 一种基于用户行为信息的搜索引擎检索结果重排序方法 |
CN101729295A (zh) * | 2009-12-02 | 2010-06-09 | 北京东土科技股份有限公司 | 一种日志功能的实现方法 |
CN101930468A (zh) * | 2010-08-31 | 2010-12-29 | 中兴通讯股份有限公司 | 文件获取方法及*** |
CN102780726A (zh) * | 2011-05-13 | 2012-11-14 | 中兴通讯股份有限公司 | 一种基于web平台的日志分析方法及*** |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2327211A1 (en) * | 2000-12-01 | 2002-06-01 | Nortel Networks Limited | Management of log archival and reporting for data network security systems |
-
2013
- 2013-01-07 CN CN201310005334.3A patent/CN103914485B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101055587A (zh) * | 2007-05-25 | 2007-10-17 | 清华大学 | 一种基于用户行为信息的搜索引擎检索结果重排序方法 |
CN101729295A (zh) * | 2009-12-02 | 2010-06-09 | 北京东土科技股份有限公司 | 一种日志功能的实现方法 |
CN101930468A (zh) * | 2010-08-31 | 2010-12-29 | 中兴通讯股份有限公司 | 文件获取方法及*** |
CN102780726A (zh) * | 2011-05-13 | 2012-11-14 | 中兴通讯股份有限公司 | 一种基于web平台的日志分析方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN103914485A (zh) | 2014-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103914485B (zh) | 一种远程收集和检索展示应用***日志的***及方法 | |
CN107506451B (zh) | 用于数据交互的异常信息监控方法及装置 | |
CA2530565C (en) | Server architecture and methods for persistently storing and serving event data | |
CN103548003B (zh) | 用于提高去重复***备份性能的客户端侧指纹缓存的方法和*** | |
CN110262807B (zh) | 集群创建进度日志采集***、方法和装置 | |
CN109947668A (zh) | 存储数据的方法和装置 | |
US20060093113A1 (en) | Collecting and delivering call data associated with court ordered traps | |
CN108509326A (zh) | 一种基于nginx日志的服务状态统计方法及*** | |
CN112445863A (zh) | 一种数据实时同步方法及*** | |
US20070083498A1 (en) | Distributed search services for electronic data archive systems | |
CN112181931A (zh) | 一种大数据***链路追踪方法及电子设备 | |
CN110637292A (zh) | 用于查询资源高速缓存的***和方法 | |
CN112825165A (zh) | 项目质量管理的方法和装置 | |
CN114139048A (zh) | 一种用户行为数据和页面数据的跟踪方法 | |
Hurst et al. | Social streams blog crawler | |
CN112506886B (zh) | 一种多源业务操作日志采集方法及*** | |
CN113986656B (zh) | 一种基于数据中台的电网数据安全监测*** | |
CN112579394A (zh) | 应用于互联网金融的日志处理***、方法及计算机设备 | |
CN111723262A (zh) | 一种批量合并网络新闻标题、摘要、正文的***和方法 | |
CN112416699A (zh) | 指标数据收集方法及*** | |
CN111914146A (zh) | 一种便于大数据交互且自动提取的商务软件平台 | |
CN109241007B (zh) | 一种网络环境下email大数据的预处理***及方法 | |
CN105912653A (zh) | 数据快速订阅方法及装置 | |
CN210804423U (zh) | 一种网站信息采集发布平台*** | |
CN109710673B (zh) | 作品处理方法、装置、设备和介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |