申请人: 深圳市世纪光速信息技术有限公司
公开号:CN103593277 A
申请日期:2012年8月15号
日志处理方法及系统技术领域
[0001] 本发明涉及日志处理技术,特别涉及一种基于动态脚本语言的日志处理方法及装置。
背景技术
[0002] 在现有的网络业务中,日志是一个必不可少的部分,通过对业务日志的分析处理,可以了解到业务的经营状况,同时在服务器出现问题的时候,也可以通过对日志进行分析找出问题所在,方便问题的解决。当前,日志文件都是以原始的格式存放于文件装置或者数据库装置,在对业务运营数据进行分析和统计的时候,需要对原始格式的日志数据文件进行分析处理,以得到想要的统计结果。
[0003]日志文件是由安全管理中心装置从各种对象设备(例如主机、防火墙、数据库、月艮务器等)收集而来的,由于各种设备产生的日志格式都不一样,如何统一处理这些不同格式的日志成为一个重要的问题。现有技术中针对每种类型的对象设备,都对应编写特定的格式化工具去将日志里的内容提取出来,并填写到一个统一的格式的范本里去,最终生成统一格式的日志。
[0004] 现有技术中的日志处理方法存在缺点,由于针对每一种对象设备的日志格式,都需要编写一种对应的代码来处理,当增加新的对象设备或者对象设备更改了日志格式时,将需要增加和修改对应的格式化器才能做到正确的采集和格式化日志,即在安全管理中心装置中需要对应的修改代码,重新发布,这样会造成装置维护量大,造成装置升级频繁,而且每次更改代码都需要重新编译装置。
发明内容
[0005] 有鉴于此,有必要提供一种日志处理方法及系统,其可以高效的将来自不同业务的具有不同格式的日志格式化处理成特定的格式进行输出。
[0006] 一种日志处理方法,包括:建立一个脚本语言解释器,在该脚本语言解释器中直接封装日志格式化处理用函数;针对不同格式的脚本分别建立相应的日志处理脚本从而构成动态脚本库,在该日志处理脚本中各种格式化操作由上述的函数完成;载入具有一定格式的日志;根据所述日志的格式从动态脚本库中载入相应的日志处理脚本;由所述的脚本语言解释器解释执行载入的日志处理脚本,完成日志格式化操作并输出处理结果。
[0007] —种日志处理系统,包括:动态脚本库,用于存储针对不同格式的脚本分别建立的日志处理脚本,在该日志处理脚本中各种格式化操作由函数完成;以及脚本语言解释器,包括:日志载入单元,用于载入具有一定格式的日志;脚本载入单元,用于根据所述日志的格式从动态脚本库中载入相应的日志处理脚本,该日志处理脚本中的格式化操作由函数实现;脚本解释单元,用于将载入的日志处理脚本中的函数解释成相应的执行指令;以及逻辑执行单元,用于执行所述的执行指令。
[0008] 在上述的日志处理方法及系统中:通过将函数直接封装在脚本语言解释器的内部,从而可以实现以非常简洁的方式完成不同格式的日志处理脚本的建立,提升了在新业务的日志导入时进行格式化的效率。
附图说明
[0009] 图1是第一实施例提供的一种日志处理方法的流程图。
[0010] 图2是第一实施例中要进行格式化的日志的示意图。
[0011] 图3是第一实施例中要进行格式化的日志格式化后的示意图。
[0012] 图4是第二实施例提供的一种日志处理系统的结构框图。
具体实施方式
[0013] 为更进一步阐述本发明为实现预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的日志处理方法及系统的具体实施方式、结构、特征及其功效,详细说明如后。
[0014] 本发明实施例提供一种日志处理方法,其可以高效的将来自不同业务的具有不同格式的日志格式化处理成特定的格式进行输出。不同的格式例如是指日志中包括的字段、排序、使用的格式化字符等等的不同。
[0015] 在上述的日志处理方法中,首先构建一种新的脚本解释语言及其脚本解释器,由脚本解释器解释符合该脚本解释语言的脚本以完成日志的格式化处理。另一方面,针对来自不同业务的具有不同格式的日志,分别构建相应的日志处理脚本从形成动态脚本库。当有新业务的日志需要导入时,根据该脚本解释语言重新构建符合新导入业务的日志处理脚本即可。当有现有业务无须再进行日志处理时,从该动态脚本库去除相应的脚本即可。
[0016] 上述的脚本解释语言关键特征如下:
[0017] 1、分段式的语法结构
[0018] 脚本分三个区块构成:初始化区块(begin)、循环区块(do)、及结束区块(end)。其中begin区块放置初始化逻辑,其代码在日志处理前只执行一遍,do区块放置对日志进行清洗、格式化的逻辑,在处理每一日志条目(一般对应于日志正文的一行)时代码均执行一遍,end区码块放置结束逻辑,代码在日志处理结束后执行一遍。上述的三个区块的结构如下所示:
[0019]
[0020] 2、脚本语言功能特征
[0021] 脚本语言实现了变量赋值语句、条件判断语句(if/else)、分支判断语句(switch)、循环语句(for/while),便于控制清洗、格式化逻辑,并且封装的一些日志格式化处理的常用逻辑,例如,网址解码(URLdecode)、编码互转(UTF8和GBK)、正则表达式抽取、字符串截取、屏幕打印、从网址(URL)中提取某个查询(query)参数等,这些常用的逻辑被封装成动态脚本语言中的函数,等价于C语言的函数,在脚本中可以通过嵌套调用这些函数达到日志格式化的目的。
[0022] 3、提供的函数
[0023] 对日志格式化处理的常用逻辑都封装成脚本语言中的函数,主要包括:
[0024] print:打印;
[0025] ip21ocal:把ip转换成物理位置,包括国家、省份、城市的信息;
[0026] detect_encoding:编码探测,自动识别指定字符串的编码类型;
[0027] iconv:进行编码转换,对中文在Utf8、gbk等编码间进行互转;
[0028] parse_url:从url中提取domain、端口、指定的查询参数;
[0029] url_decode:解码已编码的URL字符串;
[0030] log_get_field:从一个字符串中截取出指定起始、终止符对应的区块,如”[“和”]”框住的区段、双引号包住的区段;
[0031] detect_browser:从网页服务器记录的信息串中识别出客户端的浏览器类型。
[0032] 脚本解释器的工作流程
[0033] I)脚本解释引擎载入脚本后,对脚本进行词法分析,读入脚本后,识别出脚本中的关键字,标识符,常数,算符和界符,并用记号方式表示识别出的单词序列。
[0034] 2)脚本引擎在词法分析的基础上,根据语法规则,把单词序列组成各类语法单位,翻译成一个个的执行指令,这里的执行指令用可变长多元式作为节点来表示,形式例如:
【〈指令标识 >,< 参数个数 >,< 操作数1>,〈操作数2>,......,〈操作数n>】,则对于$a=37+39
这句代码,可以翻译成:
[0035] NodeOOl: ADD, 2,37,39
[0036] Node002:ASSIGN, 2,
[0037] 其中操作数可以是节点指针,从而可以在内存中用树形结构表示出执行的逻辑。[0038] 3)对于每一行载入的待处理日志,都用这个树形结构表示的执行逻辑进行处理,从而得到日志格式化处理后的结果。
[0039] 图1为第一实施例提供的一种日志处理方法的流程图;如图1所示,该方法包括:
[0040] 步骤S110、建立一个脚本语言解释器,在该脚本语言解释器中直接封装日志格式化处理用函数;可以理解,上述的日志格式化处理用函数是指前述的print等函数。
[0041] 步骤S120、针对不同格式的脚本分别建立相应的日志处理脚本从而构成动态脚本库,在该日志处理脚本中各种格式化操作由上述的函数完成;可以理解在新业务导入时在所述动态脚本库中建立与新导入的业务日志格式相对应的日志处理脚本。当有现有业务无须再进行日志处理时,从该动态脚本库去除相应的脚本即可。
[0042] 参阅图2,其为某一业务导出的日志内容的示意图,根据上述确定的语言特征及规贝U,提供一个日志处理脚本实例如下:
[0043]
[0044]
[0045] 可以理解,针对不同格式的日志,均可建立类似格式的日志处理脚本。
[0046] 步骤S130、载入具有一定格式的日志;上述的日志例如是由各种业务运行时产生的,由于不同的业务依赖于不同的系统,其开发者也不尽相同,因此日志的格式多种多样。
[0047] 步骤S140、根据所述日志的格式从动态脚本库中载入相应的日志处理脚本;日志的格式例如可以根据其文件后缀名判定,根据日志文件头部的描述字段确定,或者直接检测日志文件中的重复出现的日志条目确定。
`[0048] 步骤S150、由上述的脚本语言解释器解释执行载入的日志处理脚本,完成日志格式化操作并输出处理结果。参阅图3,其为图2的日志经过上述的日志处理脚本格式化后的示意图。
[0049] 可以理解,基于上述的脚本解释语言的三段式结构,解释执行载入的日志处理脚本包括:
[0050] 解释执行所述日志处理脚本的初始化区块;针对所述日志中的每一条记录执行所述日志处理脚本的格式化区块;以及解释执行所述日志处理脚本的结束区块。
[0051] 针对每个区块,具体的解释执行过程中,根据词法分析识别出所述日志处理脚本中的关键字、标识符、常数、函数和界符,并用记号方式表示识别出的单词序列;将所述单词序列转换成执行指令;然后执行所述执行指令。具体的原理已经详细描述如上,在此不再赘述。
[0052] 本实施例的日志处理方法中,通过将函数直接封装在脚本语言解释器的内部,从而可以实现以非常简洁的方式完成不同格式的日志处理脚本的建立,提升了在新业务的日志导入时进行格式化的效率。
[0053] 图4为第二实施例提供的日志处理系统的结构框图。如图4所示,日志处理系统200包括:动态脚本库210及脚本语言解释器220。[0054] 动态脚本库210用于存储针对不同格式的脚本分别建立的日志处理脚本,在该日志处理脚本中各种格式化操作由函数完成。
[0055] 脚本语言解释器220包括:
[0056] 日志载入单兀221,用于载入具有一定格式的日志;
[0057] 脚本载入单元222,用于根据所述日志的格式从动态脚本库中载入相应的日志处理脚本,该日志处理脚本中的格式化操作由函数实现;
[0058] 脚本解释单元223,用于将载入的日志处理脚本中的函数解释成相应的执行指令;以及
[0059] 逻辑执行单元224,用于执行所述的执行指令。具体地,逻辑执行单元224用于执行与所述日志处理脚本的初始化区块对应的执行指令;针对所述日志中的每一条记录重复执行与所述日志处理脚本的格式化区块对应的执行指令;以及执行与所述日志处理脚本的结束区块对应的执行指令。
[0060] 脚本解释单元223可包括词法分析单元225,用于根据词法分析识别出所述日志处理脚本中的关键字、标识符、常数、函数和界符,并用记号方式表示识别出的单词序列;以及语法分析单元226,用于根据所述单词序列分析生成执行指令。
[0061] 此外,日志处理系统200还可包括脚本建立单元230,用于在新业务导入时在所述动态脚本库中建立与新导入的业务日志格式相对应的日志处理脚本。
[0062] 关于日志处理系统200的其他细节,还可参考图1至图3及相关描述。
[0063] 本实施例的日志处理系统中,通过将函数直接封装在脚本语言解释器的内部,从而可以实现以非常简洁的方式完成不同格式的日志处理脚本的建立,提升了在新业务的日志导入时进行格式化的效率。
[0064] 此外,本发明实施例还提供一种计算机可读存储介质,其内存储有计算机可执行指令,上述的计算机可读存储介质例如为非易失性存储器例如光盘、硬盘、或者闪存。
[0065] 上述的计算机可执指令用于让计算机或者类似的运算装置完成上述的日志处理方法的各种操作。
[0066] 以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭示如上,然而并非用以限定本发明,任何本领域技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简介修改、等同变化与修饰,均仍属于本发明技术方案的范围内。