本發(fā)明屬于互聯(lián)網(wǎng)技術(shù)領(lǐng)域,更具體地,涉及一種分層模塊化的數(shù)據(jù)采集方法與裝置。
背景技術(shù):
傳統(tǒng)的數(shù)據(jù)采集方法針對每個具體業(yè)務(wù)、數(shù)據(jù)源、數(shù)據(jù)發(fā)送目標,需要開發(fā)一套數(shù)據(jù)采集程序。當具體業(yè)務(wù)場景變化時,往往意味著需要修改現(xiàn)有代碼來增加新功能。過此方式運行有以下缺點:修改現(xiàn)有代碼意味著有可能導(dǎo)致修改之后應(yīng)用程序出現(xiàn)BUG;代碼不斷增加越來越臃腫,不方便維護。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)的以上缺陷或改進需求,本發(fā)明提供了一種分層模塊化的數(shù)據(jù)采集方法與裝置,其目的在于將數(shù)據(jù)采集過程階段化和模塊化,從而能夠?qū)?shù)據(jù)采集的各個階段獨立開來,由此解決現(xiàn)有技術(shù)中系統(tǒng)設(shè)計復(fù)雜,開發(fā)難度大及調(diào)試不便的技術(shù)問題。
為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提供了一種分層模塊化的數(shù)據(jù)采集方法,包括:
收集原始數(shù)據(jù)信息,并將原始數(shù)據(jù)信息轉(zhuǎn)換成字符串類型;
根據(jù)設(shè)定的提取規(guī)則對上述字符串類型的原始數(shù)據(jù)信息進行數(shù)據(jù)提取,得到包含有與預(yù)設(shè)數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息的數(shù)據(jù)數(shù)組;
根據(jù)預(yù)設(shè)的輸出格式及輸出規(guī)則將上述數(shù)據(jù)數(shù)組輸出。
本發(fā)明的一個實施例中,所述根據(jù)設(shè)定的提取規(guī)則對上述字符串類型的原始數(shù)據(jù)信息進行數(shù)據(jù)提取,具體為:
使用正則表達式對字符串類型的原始數(shù)據(jù)信息進行數(shù)據(jù)匹配,得到與預(yù)設(shè)數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息,并將得到的數(shù)據(jù)字段信息存儲到包含有相應(yīng)數(shù)據(jù)字段的數(shù)據(jù)數(shù)組中。
本發(fā)明的一個實施例中,在進行數(shù)據(jù)提取后,還對提取的數(shù)據(jù)字段信息進行篩選得到包含有與篩選后的數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息的數(shù)據(jù)數(shù)組。
本發(fā)明的一個實施例中,所述收集原始數(shù)據(jù)信息具體為讀取文本文件信息或者監(jiān)聽網(wǎng)絡(luò)信息。
本發(fā)明的一個實施例中,所述根據(jù)預(yù)設(shè)的輸出格式及輸出規(guī)則將上述數(shù)據(jù)數(shù)組輸出,具體為:將上述數(shù)據(jù)數(shù)組寫入到文本文件,或者寫入數(shù)據(jù)庫,或者進行網(wǎng)絡(luò)傳輸。
按照本發(fā)明的另一方面,還提供了一種分層模塊化的數(shù)據(jù)采集裝置,包括數(shù)據(jù)收集模塊、數(shù)據(jù)提取模塊以及數(shù)據(jù)輸出模塊,其中:
所述數(shù)據(jù)收集模塊,用于收集原始數(shù)據(jù)信息,并將原始數(shù)據(jù)信息轉(zhuǎn)換成字符串類型;
所述數(shù)據(jù)提取模塊,用于根據(jù)設(shè)定的提取規(guī)則對上述字符串類型的原始數(shù)據(jù)信息進行數(shù)據(jù)提取,得到包含有與預(yù)設(shè)數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息的數(shù)據(jù)數(shù)組;
所述數(shù)據(jù)輸出模塊,用于根據(jù)預(yù)設(shè)的輸出格式及輸出規(guī)則將上述數(shù)據(jù)數(shù)組輸出。
本發(fā)明的一個實施例中,所述數(shù)據(jù)提取模塊根據(jù)設(shè)定的提取規(guī)則對上述字符串類型的原始數(shù)據(jù)信息進行數(shù)據(jù)提取,具體為:
使用正則表達式對字符串類型的原始數(shù)據(jù)信息進行數(shù)據(jù)匹配,得到與預(yù)設(shè)數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息,并將得到的數(shù)據(jù)字段信息存儲到包含有相應(yīng)數(shù)據(jù)字段的數(shù)據(jù)數(shù)組中。
本發(fā)明的一個實施例中,所述數(shù)據(jù)提取模塊還用于,在進行數(shù)據(jù)提取后,對提取的數(shù)據(jù)字段信息進行篩選得到包含有與篩選后的數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息的數(shù)據(jù)數(shù)組。
本發(fā)明的一個實施例中,所述數(shù)據(jù)收集模塊收集原始數(shù)據(jù)信息具體為讀取文本文件信息或者監(jiān)聽網(wǎng)絡(luò)信息。
本發(fā)明的一個實施例中,所述數(shù)據(jù)輸出模塊根據(jù)預(yù)設(shè)的輸出格式及輸出規(guī)則將上述數(shù)據(jù)數(shù)組輸出,具體為:將上述數(shù)據(jù)數(shù)組寫入到文本文件,或者寫入數(shù)據(jù)庫,或者進行網(wǎng)絡(luò)傳輸。
通過本發(fā)明提供的分層模塊化的數(shù)據(jù)采集方案,將數(shù)據(jù)采集的整個過程分成數(shù)據(jù)收集、提取和輸出三個處理階段和模塊,從而能夠獨立的對每個處理階段和模塊進行修改和調(diào)整,從而能夠簡化系統(tǒng)設(shè)計,加快開發(fā)速度,調(diào)試方便,并且各個模塊可復(fù)用。
附圖說明
圖1是本發(fā)明實施例中一種分層模塊化的數(shù)據(jù)采集方法的流程示意圖;
圖2是本發(fā)明實施例中一種分層模塊化的數(shù)據(jù)采集裝置的結(jié)構(gòu)示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
首先對本發(fā)明實施例中的術(shù)語進行解釋和說明:
正則表達式:又稱正規(guī)表示法、常規(guī)表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學(xué)的一個概念。正則表達式使用單個字符串來描述、匹配一系列符合某個句法規(guī)則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些符合某個模式的文本。
XML:可擴展標記語言,標準通用標記語言的子集,是一種用于標記電子文件使其具有結(jié)構(gòu)性的標記語言。
JSON:JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式。它基于ECMAScript的一個子集。
如圖1所示,本發(fā)明提供了一種分層模塊化的數(shù)據(jù)采集方法,包括:
S1、收集原始數(shù)據(jù)信息,并將原始數(shù)據(jù)信息轉(zhuǎn)換成字符串類型;
收集原始數(shù)據(jù)信息可以為多種,例如可以讀取文本文件信息或者監(jiān)聽網(wǎng)絡(luò)信息,收集上述信息后即可將信息轉(zhuǎn)換成字符串類型;
例如在讀取文本文件時,可以逐行讀取文本文件中的數(shù)據(jù)信息,每行數(shù)據(jù)信息為一條數(shù)據(jù)。在讀取時可以設(shè)置文件讀取路徑,并且路徑還可以使用通配符來設(shè)置,例如(/usr/local/*/logs/*.log)。另外還可以設(shè)置文本起始讀取位置,例如是從文件頭部開始讀取還是從尾部開始讀取。
S2、根據(jù)設(shè)定的提取規(guī)則對上述字符串類型的原始數(shù)據(jù)信息進行數(shù)據(jù)提取,得到包含有與預(yù)設(shè)數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息的數(shù)據(jù)數(shù)組;
當收集了原始數(shù)據(jù)信息后,對原始數(shù)據(jù)信息進行相應(yīng)的數(shù)據(jù)提取,例如按照預(yù)設(shè)的數(shù)據(jù)字段提取數(shù)據(jù)字段信息,并可進行進一步的數(shù)據(jù)字段的篩選。
例如,可以使用正則表達式對從文本文件中讀取的原始數(shù)據(jù)信息進行數(shù)據(jù)字段提取,通過使用正則表達式進行文本內(nèi)容匹配后,會得到與預(yù)設(shè)數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息。當然,為了方便的存儲數(shù)據(jù)字段信息,通??梢杂脭?shù)據(jù)數(shù)組來存儲上述數(shù)據(jù)字段信息,當然所述數(shù)據(jù)數(shù)組應(yīng)包括有相應(yīng)的數(shù)據(jù)字段。
例如日志數(shù)據(jù)收集場景中,會提取日志對應(yīng)的時間、日志級別、日志信息等數(shù)據(jù)字段。用戶需要設(shè)置一個字段名稱數(shù)組,該數(shù)組對應(yīng)正則表達式所匹配出的數(shù)據(jù)(如:logTime,logLevel,logMsg)。
進一步地,在進行數(shù)據(jù)提取后,還對提取的數(shù)據(jù)字段信息進行篩選得到包含有與篩選后的數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息的數(shù)據(jù)數(shù)組。例如:在配置文件中配置logLevel=ERROR,則只會將日志級別為ERROR的日志數(shù)據(jù)提取出來。
S3、根據(jù)預(yù)設(shè)的輸出格式及輸出規(guī)則將上述數(shù)據(jù)數(shù)組輸出。
當在步驟S2中得到需要的數(shù)據(jù)字段信息后,需要將上述數(shù)據(jù)數(shù)組輸出,例如將上述數(shù)據(jù)數(shù)組寫入到文本文件,或者寫入數(shù)據(jù)庫,或者進行網(wǎng)絡(luò)傳輸。
例如在寫入文件時,可以根據(jù)配置文件中的“輸出文件地址”信息,將數(shù)據(jù)寫入到該路徑中。
另外,還可以配置單個文件大小,當輸出文件大小到達該限制時、數(shù)據(jù)會寫到一個新的文件中
另外,文件輸出格式也可以在配置文件中進行配置(如:XML、JSON)。并且還可以進行擴展,從而支持更多的配輸出格式。
進一步地,如圖2所示,本發(fā)明還提供了一種分層模塊化的數(shù)據(jù)采集裝置,包括數(shù)據(jù)收集模塊1、數(shù)據(jù)提取模塊2以及數(shù)據(jù)輸出模塊3,其中:
所述數(shù)據(jù)收集模塊1,用于收集原始數(shù)據(jù)信息,并將原始數(shù)據(jù)信息轉(zhuǎn)換成字符串類型;
其中,所述數(shù)據(jù)收集模塊1收集原始數(shù)據(jù)信息具體為讀取文本文件信息或者監(jiān)聽網(wǎng)絡(luò)信息;
所述數(shù)據(jù)提取模塊2,用于根據(jù)設(shè)定的提取規(guī)則對上述字符串類型的原始數(shù)據(jù)信息進行數(shù)據(jù)提取,得到包含有與預(yù)設(shè)數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息的數(shù)據(jù)數(shù)組;
其中,所述數(shù)據(jù)提取模塊2根據(jù)設(shè)定的提取規(guī)則對上述字符串類型的原始數(shù)據(jù)信息進行數(shù)據(jù)提取,具體為:使用正則表達式對字符串類型的原始數(shù)據(jù)信息進行數(shù)據(jù)匹配,得到與預(yù)設(shè)數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息,并將得到的數(shù)據(jù)字段信息存儲到包含有相應(yīng)數(shù)據(jù)字段的數(shù)據(jù)數(shù)組中;
進一步地,所述數(shù)據(jù)提取模塊2還用于,在進行數(shù)據(jù)提取后,對提取的數(shù)據(jù)字段信息進行篩選得到包含有與篩選后的數(shù)據(jù)字段對應(yīng)的數(shù)據(jù)字段信息的數(shù)據(jù)數(shù)組;
所述數(shù)據(jù)輸出模塊3,用于根據(jù)預(yù)設(shè)的輸出格式及輸出規(guī)則將上述數(shù)據(jù)數(shù)組輸出;
其中,所述數(shù)據(jù)輸出模塊3根據(jù)預(yù)設(shè)的輸出格式及輸出規(guī)則將上述數(shù)據(jù)數(shù)組輸出,具體為:將上述數(shù)據(jù)字段寫入到文本文件,或者寫入數(shù)據(jù)庫,或者進行網(wǎng)絡(luò)傳輸。
進一步地,結(jié)合一個具體實施例中給出的數(shù)據(jù)采集方案說明本發(fā)明提供的分層模塊化的數(shù)據(jù)采集方法,將數(shù)據(jù)采集過程分為3層,分別通過3個模塊來實現(xiàn),具體如下:
數(shù)據(jù)收集
數(shù)據(jù)收集模塊包括1個接口
●輸出
將收集到的數(shù)據(jù)輸出到數(shù)據(jù)提取層。
該接口有一個參數(shù),內(nèi)容為數(shù)據(jù)文本(字符串類型)。
●數(shù)據(jù)流程:
用戶編寫數(shù)據(jù)收集模塊獲取數(shù)據(jù)(如:讀取文件,監(jiān)聽網(wǎng)絡(luò)),隨后數(shù)據(jù)通過輸出接口傳遞給數(shù)據(jù)提取模塊。
示例:
●文本文件數(shù)據(jù)收集模塊
該模塊逐行讀取文件中的數(shù)據(jù)信息,每行信息為一調(diào)數(shù)據(jù)。并發(fā)送給數(shù)據(jù)提取模塊。
可以設(shè)置文件讀取路徑,改路徑可以使用通配符(如:/usr/local/*/logs/*.log)
可以設(shè)置文本讀取位置,從文件頭部開始讀取還是從尾部開始讀取。
數(shù)據(jù)提取
數(shù)據(jù)提取模塊包含2個接口
●輸入
從輸入接口獲取數(shù)據(jù)收集模塊中發(fā)出的數(shù)據(jù)。
接收到的數(shù)據(jù)為字符串。
●輸出
輸出整理后的結(jié)果到數(shù)據(jù)輸出層。
該接口有一個參數(shù),參數(shù)內(nèi)容為經(jīng)過數(shù)據(jù)提取后的數(shù)據(jù)對象。
●數(shù)據(jù)流程:
用戶編寫數(shù)據(jù)提取模塊,數(shù)據(jù)從輸入接口流入數(shù)據(jù)提取模塊后,該模塊對數(shù)據(jù)進行相應(yīng)的數(shù)據(jù)提取(如:提取并命名數(shù)據(jù)字段)、數(shù)據(jù)篩選。整理完畢后數(shù)據(jù)會通過輸出接口傳遞給數(shù)據(jù)輸出模塊。
示例:
●文本數(shù)據(jù)提取模塊
文本數(shù)據(jù)提取模塊使用正則表達式對文本進行數(shù)據(jù)提取,通過使用正則表達式進行文本匹配后,文本數(shù)據(jù)提取模塊會獲得文本中相應(yīng)的數(shù)據(jù)數(shù)組。例如日志數(shù)據(jù)收集場景中,會提取日志對應(yīng)的時間、日志級別、日志信息等數(shù)據(jù)。
用戶需要設(shè)置一個字段名稱數(shù)組,該數(shù)組對應(yīng)正則表達式所匹配出的數(shù)據(jù)(如:logTime,logLevel,logMsg)。
該模塊還可以對字段進行篩選,如:在配置文件中配置logLevel=ERROR,則只會將日志級別為ERROR的日志數(shù)據(jù)提取出來
上述過程執(zhí)行完畢后數(shù)據(jù)會封裝成一個數(shù)據(jù)對象發(fā)送給數(shù)據(jù)輸出模塊。
數(shù)據(jù)輸出
數(shù)據(jù)輸出模塊包含1個接口
●輸入
該接口負責接收數(shù)據(jù)提取模塊發(fā)出的數(shù)據(jù)對象
●數(shù)據(jù)流程:
用戶編寫數(shù)據(jù)輸出模塊,數(shù)據(jù)從輸入接口流入數(shù)據(jù)輸出模塊后,該模塊對數(shù)據(jù)進行一些后續(xù)操作(如:寫入到文件、寫入數(shù)據(jù)庫、網(wǎng)絡(luò)傳輸)。
示例:
●文件輸出模塊
文件輸出模塊獲得數(shù)據(jù)提取模塊輸出的數(shù)據(jù)對象后,根據(jù)配置文件中的“輸出文件地址”信息,將數(shù)據(jù)寫入到該路徑中。
可以配置單個文件大小,當輸出文件大小到達該限制時、數(shù)據(jù)會寫到一個新的文件中
文件輸出格式也可以在配置文件中進行配置(如:XML、JSON)??梢詫υ撃K進行擴展,從而支持更多的配輸出格式。
上述方案的實施特點為:
在不同業(yè)務(wù)場景中,數(shù)據(jù)的來源方式大致相同(如:日志都是寫在文件里)。這樣只需開發(fā)一種數(shù)據(jù)收集模塊。
每個數(shù)據(jù)收集層都可以根據(jù)需要,開發(fā)不同的模塊。
根據(jù)實際數(shù)據(jù)采集場景,通過配置文件配置每個數(shù)據(jù)層的數(shù)據(jù)處理模塊即可。模塊可以自由組合。
如:數(shù)據(jù)收集--文件、數(shù)據(jù)提取--XML、數(shù)據(jù)輸出--網(wǎng)絡(luò)
數(shù)據(jù)收集--網(wǎng)絡(luò)、數(shù)據(jù)提取--JSON、數(shù)據(jù)輸出--文件
通過本發(fā)明提供的分層模塊化的數(shù)據(jù)采集方案,將數(shù)據(jù)采集的整個過程分成數(shù)據(jù)收集、提取和輸出三個處理階段和模塊,從而能夠獨立的對每個處理階段和模塊進行修改和調(diào)整,從而能夠簡化系統(tǒng)設(shè)計,加快開發(fā)速度,調(diào)試方便,并且各個模塊可復(fù)用。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。