亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于切分日志的實時增量日志信息讀取的方法與流程

文檔序號:12363949閱讀:737來源:國知局
基于切分日志的實時增量日志信息讀取的方法與流程

本發(fā)明涉及實時增量日志信息讀取,特別是涉及基于切分日志的實時增量日志信息讀取的方法。



背景技術:

在監(jiān)控系統(tǒng)中,我們常采用日志方式收集被監(jiān)控系統(tǒng)的監(jiān)控數(shù)據(jù)。為了保證監(jiān)控數(shù)據(jù)和告警的準確性,日志增量內(nèi)容實時讀取方案的準確性和魯棒性是重中之重。

日志增量內(nèi)容的實時讀取涉及文件監(jiān)聽。文件監(jiān)聽指的是使用文件監(jiān)聽器,實時監(jiān)聽日志文件的變化情況,包括文件的創(chuàng)建、修改以及刪除等事件。對監(jiān)聽到的事件進行響應以完成日志在切分后增量日志內(nèi)容的讀取。

現(xiàn)有技術的技術方案:

常見日志文件增量讀取方案如下:

1.監(jiān)聽日志路徑下文件變化情況,當有新日志文件產(chǎn)生時,記錄該文件讀取起始位置position為0。從0開始讀取增量日志內(nèi)容,讀取完后修改讀取起始位置position為當前讀取日志長度length(position=length);

2.當監(jiān)聽到日志文件有修改時,獲取讀取起始位置position的值,如果沒有則設置為0(position=0),從position位置開始讀取增量日志內(nèi)容,讀取完后修改讀取起始位置position為position加上讀取增量日志長度length(position=position+length);

3.當監(jiān)聽到文件被刪除時,不做任何處理。

現(xiàn)有技術的缺點

上述方案是常見文件增量讀取方案,算法直觀有效,僅可以適用于無切分的日志增量內(nèi)容讀取。

然而,實踐中,為了保證日志大小的可控,采用按日志大小切分的方式寫日志文件是一種通用方案。如本領域技術人員公知的,在系統(tǒng)運行時,為了監(jiān)控系統(tǒng)運行狀態(tài),會輸出日志信息到日志文件中,時間一長,日志文件將變得非常大,不利于閱讀和管理。因此,一般情況下我們希望日志按一定時間段或文件大小存成不同的文件,這就涉及日志切分。為了快速讀取增量日志及控制日志大小,在監(jiān)控系統(tǒng)中我們采用例如輪轉(zhuǎn)切分方式保存日志文件。本領域技術人員可以理解,可以采用其他切分方式。

例如,假定系統(tǒng)輸出原始日志為a.log,日志輪轉(zhuǎn)大小為10MB,輪轉(zhuǎn)日志個數(shù)為3。具體地,日志切分過程可以描述如下:

1.新建日志文件a.log;

2.當a.log大小達到10M時,將a.log重命名為a.log.1,新建a.log,新的日志內(nèi)容繼續(xù)往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.因輪轉(zhuǎn)日志個數(shù)設置為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文件繼續(xù)寫入新的日志;

6.后續(xù)再觸發(fā)切分事件,重復步驟5。

日志切分后最多會保留如下4個日志文件:

log(最新)、a.log.1(次新)、a.log.2、a.log.3(舊)

在這種情況下,如果有a.log文件,當該文件會發(fā)生切分,上述文件增量讀取方案處理如下:

1.正常讀取a.log增量,記錄該文件的讀取起始位置為position;

2.如果此時發(fā)生日志切分,從前文介紹的按大小切分的過程可以知道,將先重命名a.log為a.log.1(文件監(jiān)聽器會將重命名先后標記為a.log.1的新建事件和a.log的刪除事件),然后新建a.log文件,那么整個過程發(fā)生三次事件發(fā)生:新建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的新增事件響應讀取了整個日志文件的內(nèi)容,增量讀取錯誤,正確處理應該是讀取從記錄的position位置到文件末的增量日志。由此可見該方案是不適用于基于輪轉(zhuǎn)日志的增量讀取的。

因此,需要一種能夠基于切分日志的實時增量讀取的方法。



技術實現(xiàn)要素:

根據(jù)本發(fā)明的一個實施例,提供了一種基于切分日志的實時增量讀取的方法,包括:

掃描日志目錄下的日志文件,并設置每個文件的讀取起始位置;

開啟文件監(jiān)聽器以監(jiān)聽日志目錄下的日志文件變化;

當監(jiān)聽到日志文件新建、修改或更新事件時:

判斷所述日志文件是否有切分文件;

如果有所述切分文件,則讀取增量日志信息并且所述讀取起始位置被設置為當前讀取長度。

優(yōu)選地,進一步包括:當監(jiān)聽到日志文件刪除事件時:

判斷所述日志文件是否存在;以及

如果所述日志文件不存在,則刪除所述文件記錄的位置。

優(yōu)選地,所述讀取增量日志信息進一步包括:

獲取所述日志文件的讀取起始位置;

讀取所述日志文件的增量日志信息;

將所述讀取起始設置為0;以及

將所述日志文件轉(zhuǎn)移到備份路徑。

優(yōu)選地,進一步包括:如果沒有所述切分文件,則計算所述日志文件的增量日志信息長度。

優(yōu)選地,進一步包括:如果所述增量日志信息長度大于0,則:

獲取所述讀取起始位置;

讀取所述增量日志信息;以及

將讀取起始位置設置為“所述初始讀取位置+所述增量日志信息長度”。

優(yōu)選地,所述增量日志信息長度是當前文件長度減去所述讀取起始位置。

優(yōu)選地,如果所述增量日志信息長度不大于0,則將讀取起始位置設置為0。

優(yōu)選地,在判斷所述日志文件是否存在之前,休眠預定時間。

根據(jù)本公開和附圖的下面的詳細描述,對本領域的普通技術人員來說其它的目的、特征、以及優(yōu)點將是顯而易見的。

附圖說明

附圖圖示了本發(fā)明的實施例,并與說明書一起用于解釋本發(fā)明的原理。在附圖中:

圖1圖示了根據(jù)本發(fā)明實施例的基于切分日志的實時增量內(nèi)容讀取的方法的流程圖。

圖2圖示了根據(jù)本發(fā)明實施例的無輪轉(zhuǎn)切分日志增量內(nèi)容讀取示意圖。

圖3圖示了根據(jù)本發(fā)明實施例的有輪轉(zhuǎn)切分日志增量內(nèi)容讀取示意圖。

具體實施方式

根據(jù)本發(fā)明的實施例公開了一種基于切分日志的實時增量讀取的方法。在以下描述中,為了說明的目的,闡述了多個具體細節(jié)以提供對本發(fā)明的實施例的全面理解。然而,對于本領域技術人員顯而易見的是,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實現(xiàn)。

為了避免因日志文件過大造成增量讀取性能下降及降低對服務器磁盤空間使用不可控性,采用按大小切分日志文件保存監(jiān)控日志是非常必要,而傳統(tǒng)的日志文件增量讀取方案已無法滿足這種場景的日志采集任務。

本發(fā)明旨在解決在使用輪轉(zhuǎn)切分日志記錄日志內(nèi)容時如何準確及時的讀取增量日志內(nèi)容問題,通過采用本體日志文件(非輪轉(zhuǎn)日志文件,在前面例子中指a.log)監(jiān)聽方式,單獨處理文件切分時觸發(fā)的多個監(jiān)聽事件,同時增加刪除事件過濾和采集增量日志信息長度校驗雙重機制來保證日志文件讀取的準確性和穩(wěn)定性。

輪轉(zhuǎn)切分日志指的是按照一定規(guī)則切分后用于保存歷史數(shù)據(jù)的日志文件,又稱輪轉(zhuǎn)日志。前面所述的切分方法產(chǎn)生的a.log.1、a.log.2、 a.log.3均為輪轉(zhuǎn)切分日志。

本發(fā)明技術方案在常見的日志增量內(nèi)容讀取方案上進行改進,形成新的技術方案——基于輪轉(zhuǎn)切分日志增量內(nèi)容讀取方法,如圖1所示,文件監(jiān)聽器(例如,F(xiàn)ileAlterationMonitor)可以監(jiān)聽某個路徑下某一類文件的變化,在本方案中,監(jiān)聽的是本體日志文件,即文件名以.log結(jié)尾的日志文件。

圖1圖示了根據(jù)本發(fā)明實施例的基于切分日志的實時增量讀取的方法的流程圖。如圖1所示,在步驟101,掃描日志目錄下所有的日志文件,并設置每個文件的讀取起始位置,例如,將每個文件的讀取起始位置設置為0。在步驟103,開啟文件監(jiān)聽器以監(jiān)聽日志目錄下的日志文件變化的情況。根據(jù)本發(fā)明的實施方案,針對新建、修改或更新和刪除日志文件事件分別進行針對性處理。

新建日志文件事件

當監(jiān)聽到有新的日志文件被建立時,也就是,日志文件變化情況時新建事件,在步驟105,判斷是否有輪轉(zhuǎn),即,判斷該文件是否有切分文件。

圖2圖示了根據(jù)本發(fā)明實施例的無輪轉(zhuǎn)切分日志增量內(nèi)容讀取示意圖。如圖2所示,如果在步驟105判斷沒有輪轉(zhuǎn),則在步驟107,計算本體日志文件的增量日志信息長度,該增量日志信息長度是當前文件長度減去讀取起始位置。然后,在步驟109,判斷該增量日志信息長度是否大于0,如果大于0,則在步驟111,獲取讀取起始位置,讀取本體日志文件的增量日志信息,即,從讀取起始位置到當前文件大小的日志內(nèi)容,并在讀取完畢之后將讀取起始位置修改為“讀取起始位置+增量日志信息長度”。如果不是大于0,則在步驟113,將讀取起始位置設置為0。

圖3圖示了根據(jù)本發(fā)明實施例的有輪轉(zhuǎn)切分日志增量內(nèi)容讀取示意圖。如圖3所示,如果在步驟105判斷有輪轉(zhuǎn),則在步驟115,獲取讀取起始位置,按照附圖3所示的順序讀取所有的輪轉(zhuǎn)日志文件,在讀取完成之后將讀取起始位置設置為0。然后,在步驟117,將輪轉(zhuǎn)日志文件轉(zhuǎn)移到備份路徑。在步驟119,讀取本體日志文件的增量日志信息,并將讀取起始位置設置為當前讀取長度。

修改或更新日志文件事件

當監(jiān)聽到有日志文件被修改或更新時,也就是,日志文件變化情況時修改或更新事件,處理方法與以上新建日志文件事件的處理方法相同,如圖1所示。

刪除日志文件事件

當監(jiān)聽到有日志文件被刪除時,也就是,日志文件變化情況是刪除事件,在步驟121休眠預定時間(例如,0.5秒)。然后在步驟123,檢測該日志文件是否存在。如果該文件不存在,則在步驟125,刪除該文件記錄的位置。休眠是指當監(jiān)聽到刪除事件時不立即處理,而是等待一段時間的操作。休眠的原因是為了確認刪除是否真實。因為日志重命名時監(jiān)聽器會監(jiān)聽到兩個事件,即,先刪除、再重建。例如,這里的刪除事件明顯不是真實的刪除,因此后面需要判斷該日志文件是否存在。如果有,則說明是切分操作,否則是真實的刪除。因此為了給新建文件預留時間而休眠一段時間是重要的。

圖1中兩個虛線框中的判斷用于對因輪轉(zhuǎn)時觸發(fā)的假刪除事件進行過濾和兼容處理。當文件被刪除時,如果不刪除該文件的位置值,則當新建一個和該文件同名的日志文件并寫入日志時,將使用之前記錄的位置值,即,將從該位置讀取文件內(nèi)容。在這種情況下,當新文件的長度小于該位置時,讀取將會發(fā)生異常。而圖中區(qū)域2部分判斷將會兼容這種異常,將讀取起始位置重置為0,下次讀取恢復正常,區(qū)域1部分判斷處理則用可避免該異常問題。

針對現(xiàn)有日志增量內(nèi)容讀取方案無法準確讀取基于輪轉(zhuǎn)切分的日志增量內(nèi)容問題,根據(jù)本發(fā)明的技術方案,通過分解日志輪轉(zhuǎn)切分過程并準確提取過程中的所有監(jiān)聽事件,通過讀取起始位置的動態(tài)調(diào)整以及輪轉(zhuǎn)切分日志從舊到新依次讀取,同時增加刪除事件過濾和增量日志信息長度校驗雙重機制保證了基于切分日志的實時增量讀取的方法的可靠性,實現(xiàn)了輪轉(zhuǎn)切分日志增量內(nèi)容的準確讀取,極大的提高了基于切分日志的實時增量內(nèi)容讀取方法的魯棒性。

上述實施例僅是本發(fā)明的優(yōu)選實施例,并不用于限制本發(fā)明。對本領域技術人員顯而易見的是,在不脫離本發(fā)明精神和范圍的情況下,可以對本發(fā)明的實施例進行各種修改和改變。因此,本發(fā)明意在涵蓋落入如權利要求所限定的本發(fā)明的范圍之內(nèi)的所有的修改或變型。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1