DL文件自動(dòng)提取日志的結(jié)構(gòu)化數(shù)據(jù),后續(xù)可加 載到目標(biāo)數(shù)據(jù)庫(kù)供后續(xù)分析。在此過(guò)程中,日志使用方(下游系統(tǒng))無(wú)需理解晦澀難懂的日 志。同時(shí),在日志格式變化或業(yè)務(wù)邏輯變化后,日志所有方只需要提供新的日志孤L文件,日 志使用方就可W依據(jù)新的日志孤L文件對(duì)日志進(jìn)行解析。因此,本發(fā)明實(shí)施例所提供技術(shù)方 案能夠自適應(yīng)由日志格式變化或業(yè)務(wù)邏輯變化引起的字段解析規(guī)則變化,如分隔符變化、 字段增減、字段位置變化等。只要結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)接口不變,就不會(huì)對(duì)下游系統(tǒng)有影響, 下游系統(tǒng)也就不需要做任何修改。
[0046] 下面將進(jìn)一步介紹日志孤L文件。
[0047] 在本發(fā)明實(shí)施例中,上述所有實(shí)施例中的日志DDL文件可包括字段解析規(guī)則列表。
[0048] 進(jìn)一步的,字段解析規(guī)則列表中可包括N個(gè)字段解析規(guī)則(N不小于1);而每一個(gè)字 段解析規(guī)則又可包括前置處理規(guī)則、提取方式、提取方法參數(shù)和解析結(jié)果字段列表。
[0049] 其中;
[0050] 前置處理規(guī)則可為空也可不為空;
[0051 ]解析結(jié)果字段列表包括至少一個(gè)解析結(jié)果字段;
[0052] 每一解析結(jié)果字段包含字段名稱、字段類(lèi)型和屬性。字段名稱、字段類(lèi)型和屬性用 于表征字段定義。
[0053] 并且,上述解析結(jié)果字段的排列順序必須與字段解析規(guī)則提取的字段排列順序一 致。
[0054] 在本發(fā)明其他實(shí)施例中,上述所有實(shí)施例中的N個(gè)字段解析規(guī)則與N個(gè)輸出文件一 一對(duì)應(yīng)。
[0055] 則步驟S2中的"根據(jù)上述字段解析規(guī)則從上述日志文件中提取出字段"可細(xì)化包 括:
[0056] 針對(duì)日志文件中需要處理的第i行日志,依次使用N個(gè)字段解析規(guī)則對(duì)其進(jìn)行解 析,直至解析成功;i不小于0,不大于M-1(或者i不小于1不大于M);M為上述日志文件中所包 含的日志總行數(shù)。
[0057] 而上述步驟S2中的"存儲(chǔ)至輸出文件"可細(xì)化包括:
[0058] 將成功解析出的字段輸出到目標(biāo)文件。
[0059] 其中,目標(biāo)文件具體為:與解析成功的字段解析規(guī)則相對(duì)應(yīng)的輸出文件。
[0060] 舉例來(lái)講,假定輸出文件η~fN,分別對(duì)應(yīng)字段解析規(guī)則1~N。對(duì)于第i行日志,先 使用字段解析規(guī)則1進(jìn)行解析,若解析失敗,則使用字段解析規(guī)則2進(jìn)行解析,W此類(lèi)推,直 至解析成功。
[0061] 假定使用字段解析規(guī)則2解析成功,則將成功解析出的字段輸出到輸出文件f2(輸 出文件f 2與字段解析規(guī)則2對(duì)應(yīng))。
[0062] 在本發(fā)明其他實(shí)施例中,上述所有實(shí)施例中的任一字段解析規(guī)則還可包括字段輸 出順序,用于控制將成功解析出的字段輸出到目標(biāo)文件的順序。在具體實(shí)現(xiàn)時(shí),可使用 index標(biāo)簽來(lái)表征字段輸出順序,本文后續(xù)將做具體介紹。
[0063] 在本發(fā)明其他實(shí)施例中,上述所有實(shí)施例中的N個(gè)輸出文件又與N個(gè)字段類(lèi)型說(shuō)明 文件一一對(duì)應(yīng)。則在本發(fā)明實(shí)施例中,將生成N個(gè)建表腳本并提交給目標(biāo)數(shù)據(jù)庫(kù)。
[0064] 則后續(xù)目標(biāo)數(shù)據(jù)庫(kù)會(huì)根據(jù)運(yùn)N個(gè)建表腳本創(chuàng)建N個(gè)空白數(shù)據(jù)庫(kù)表,并加載各輸出文 件中的字段至相應(yīng)的空白數(shù)據(jù)庫(kù)表,從而最終生成N個(gè)結(jié)構(gòu)化數(shù)據(jù)數(shù)據(jù)庫(kù)表。
[0065] 在本發(fā)明其他實(shí)施例中,在上述所有實(shí)施例中,若某字段解析規(guī)則的前置處理規(guī) 則不為空,則在使用該字段解析規(guī)則對(duì)上述第i行日志進(jìn)行解析前還包括:
[0066] 使用上述前置處理規(guī)則對(duì)上述第i行日志進(jìn)行前置處理。
[0067] 上述前置處理可為加密、解碼等。
[0068] 舉例來(lái)講,在使用N個(gè)字段解析規(guī)則中的字段解析規(guī)則P(也即任一字段解析規(guī)則) 對(duì)第i行日志進(jìn)行解析時(shí),如果字段解析規(guī)則P的前置處理規(guī)則不為空,則在嘗試解析前,會(huì) 使用前置處理規(guī)則對(duì)第i行日志進(jìn)行前置處理。
[0069] 在本發(fā)明其他實(shí)施例中,上述所有實(shí)施例中,若上述解析成功的字段解析規(guī)則中、 解析結(jié)果字段的屬性里包括針對(duì)指定字段的嵌套解析規(guī)則,上述所有實(shí)施例中的"根據(jù)字 段解析規(guī)則從日志文件中提取出字段"還可包括:
[0070] 對(duì)指定字段使用上述嵌套解析規(guī)則進(jìn)行解析。
[0071] 更具體的,根據(jù)字段解析規(guī)則從日志文件中提取出字段并存儲(chǔ)至輸出文件的操 作,由化doopMapReduce計(jì)算框架的Map函數(shù)執(zhí)行。
[0072] 下面將W較普遍的日志類(lèi)型(N0RMAL_L0G)為例,對(duì)日志DDL文件進(jìn)行更具體的介 紹。此DDL可用于后續(xù)日志結(jié)構(gòu)化信息的自動(dòng)提取、信息檢核、日志格式變更管理等目的。
[0073] N0RMAL_L0G類(lèi)型的日志文件每一行的信息相對(duì)獨(dú)立或完整,即不需要依賴上下行 即可構(gòu)成一條完整的記錄。大部分日志屬于運(yùn)一類(lèi)型,如apache日志。
[0074] 為了示例說(shuō)明方便,使用如下簡(jiǎn)化的日志文件進(jìn)行說(shuō)明:
[0075] 第一行日志:10.10.201.115"GET/po;rta Vimages/zxc. gif ?pa;rm = C001 %7C%
[0076] 40%7C%E5%BC%A0%E4%B8%89"
[0077] 第二行日志:A008|@ I 456.00
[0078] 在日志文件中,第一行日志與第二行日志格式不同,第一行日志為簡(jiǎn)化版本的 apache日志,并且"pa;rm="字符之后的參數(shù)進(jìn)行了urlencode編碼;第二行日志為固定分割 符分隔的日志。
[0079] 與此日志文件對(duì)應(yīng)的DDL文件如下所示,包含提取規(guī)則和提取字段的定義(業(yè)務(wù)含 義)。具體的,此DDL文件包含兩條提取規(guī)則,第一條基于正則表達(dá)式,并且有一條嵌套解析 規(guī)則parm_rule(已用下劃線標(biāo)出)用于進(jìn)一步提取parm字段;第二條提取規(guī)則基于固定分 隔符。
[0080]
[0081]
[0082]
[0083]
[0084] 下面將對(duì)DDL中的各部分做出解釋:
[00化]1),<?xml version = "l .0"encoding = "UTF-8"?〉:encoding指定編碼格式,例如 支持UTF-8編碼;
[0086] 2),<file_name>:表示文件的名稱;
[0087] 3),<f ile_version>:表示該孤L文件的版本序號(hào);
[0088] 4),<index>:表示該字段在輸出文件中的排序,一般而言,在每一個(gè)頂層解析規(guī)則 (非嵌套在其他解析規(guī)則里面的解析規(guī)則)中,運(yùn)個(gè)值是從1開(kāi)始遞增的,如果后續(xù)由于日志 格式變更引起的字段位置變化,則可W通過(guò)修改此值來(lái)調(diào)整字段的輸出順序,保持?jǐn)?shù)據(jù)接 口不變;
[0089] W第一條基于正則表達(dá)式的字段解析規(guī)則為例,其中的IP、parm、CUSTOMER_ID、 Customer ' S name四個(gè)字段對(duì)應(yīng)的index值分別是1、2、3、4,則運(yùn)四個(gè)字段在輸出文件中的 排序即為1、2、3、4。
[0090] 如果后續(xù)由于日志格式變更引起的字段的排序?yàn)镃USTOMER_ID、Customer's name、IP、parm,則CUST0MER_ID字段對(duì)應(yīng)的index值更變?yōu)?,Customer's name字段對(duì)應(yīng)的 index值更變?yōu)?,IP字段對(duì)應(yīng)的index值更變?yōu)?,Customer ' S name字段對(duì)應(yīng)的index值更 變?yōu)?。
[0091] 4),〈type〉:半結(jié)構(gòu)化數(shù)據(jù)的類(lèi)型;
[0092] 5),<rule_list>:字段解析規(guī)則列表,可W包含多個(gè)分1116〉,也即字段解析規(guī)則;
[0093] 6),<rule>:-個(gè)具體的字段解析規(guī)則,每個(gè)字段解析規(guī)則中設(shè)置了提取規(guī)則名< name〉,前置處理<pre_action〉,提取方式〈method〉,提取方法參數(shù)<method_st;r〉,W及解析 結(jié)果字段列表<field_list〉。
[0094] 其中;
[0095] ①前置處理 <pre_action>:
[0096] 前置處理表示執(zhí)行字段解析規(guī)則前需要做的一些處理(如urldecode解碼);<pre_ action〉和</pre_action>是一對(duì)標(biāo)簽,有斜杠的表示結(jié)束標(biāo)簽,沒(méi)有斜杠的表示開(kāi)始標(biāo)簽。 標(biāo)簽之間為空,表示沒(méi)有前置處理動(dòng)作(前置處理規(guī)則為空)。
[0097] 由于業(yè)務(wù)或者技術(shù)需要,日志在存儲(chǔ)的時(shí)候可能做了某種加密或編碼,比如 apache日志的url部分可能就會(huì)做urlencode,對(duì)于運(yùn)種情況,需要在解析之前先對(duì)日志進(jìn) 行解碼或解密,運(yùn)只需要通過(guò)指定前置處理(pre_action)算子即可實(shí)現(xiàn),用戶也可W根據(jù) 需要添加前置處理算子。
[0098] ②提取方式〈method〉:
[0099] 字段解析規(guī)則至少包含兩種類(lèi)型,后續(xù)可W擴(kuò)展。第一種是固定分隔符分割解析 (