欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

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

文檔序號(hào):12363949閱讀:747來(lái)源:國(guó)知局
基于切分日志的實(shí)時(shí)增量日志信息讀取的方法與流程

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



背景技術(shù):

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

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

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

常見(jiàn)日志文件增量讀取方案如下:

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

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

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

現(xiàn)有技術(shù)的缺點(diǎn)

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

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

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

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

2.當(dāng)a.log大小達(dá)到10M時(shí),將a.log重命名為a.log.1,新建a.log,新的日志內(nèi)容繼續(xù)往a.log里寫(xiě)入;

3.當(dāng)新的a.log大小達(dá)到10M,將a.log.1重命名為a.log.2,a.log重命名為a.log.1,新建a.log;

4.當(dāng)a.log再次達(dá)到10M,重復(fù)步驟3;

5.因輪轉(zhuǎn)日志個(gè)數(shù)設(shè)置為3個(gè),當(dāng)a.log.3生成后,a.log再次達(dá)到10M時(shí),將先刪除a.log.3,再將a.log.2重命名為a.log.3,a.log.1重命名為a.log.2,a.log重命名為a.log.1,新建a.log文件繼續(xù)寫(xiě)入新的日志;

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

日志切分后最多會(huì)保留如下4個(gè)日志文件:

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

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

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

2.如果此時(shí)發(fā)生日志切分,從前文介紹的按大小切分的過(guò)程可以知道,將先重命名a.log為a.log.1(文件監(jiān)聽(tīng)器會(huì)將重命名先后標(biāo)記為a.log.1的新建事件和a.log的刪除事件),然后新建a.log文件,那么整個(gè)過(guò)程發(fā)生三次事件發(fā)生:新建a.log.1,刪除a.log,新建a.log;

3.響應(yīng)a.log.1新建事件,從0開(kāi)始讀取a.log.1文件增量日志;響應(yīng)a.log刪除事件,不做任何處理;響應(yīng)a.log新增事件,從0開(kāi)始讀取a.log增量日志。

從上述步驟中,我們可以看到刪除a.log和新增a.log事件處理均正確,但a.log.1的新增事件響應(yīng)讀取了整個(gè)日志文件的內(nèi)容,增量讀取錯(cuò)誤,正確處理應(yīng)該是讀取從記錄的position位置到文件末的增量日志。由此可見(jiàn)該方案是不適用于基于輪轉(zhuǎn)日志的增量讀取的。

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



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

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

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

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

當(dāng)監(jiān)聽(tīng)到日志文件新建、修改或更新事件時(shí):

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

如果有所述切分文件,則讀取增量日志信息并且所述讀取起始位置被設(shè)置為當(dāng)前讀取長(zhǎng)度。

優(yōu)選地,進(jìn)一步包括:當(dāng)監(jiān)聽(tīng)到日志文件刪除事件時(shí):

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

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

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

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

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

將所述讀取起始設(shè)置為0;以及

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

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

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

獲取所述讀取起始位置;

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

將讀取起始位置設(shè)置為“所述初始讀取位置+所述增量日志信息長(zhǎng)度”。

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

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

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

根據(jù)本公開(kāi)和附圖的下面的詳細(xì)描述,對(duì)本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō)其它的目的、特征、以及優(yōu)點(diǎn)將是顯而易見(jiàn)的。

附圖說(shuō)明

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

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

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

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

具體實(shí)施方式

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

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

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

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

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

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

新建日志文件事件

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

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

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

修改或更新日志文件事件

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

刪除日志文件事件

當(dāng)監(jiān)聽(tīng)到有日志文件被刪除時(shí),也就是,日志文件變化情況是刪除事件,在步驟121休眠預(yù)定時(shí)間(例如,0.5秒)。然后在步驟123,檢測(cè)該日志文件是否存在。如果該文件不存在,則在步驟125,刪除該文件記錄的位置。休眠是指當(dāng)監(jiān)聽(tīng)到刪除事件時(shí)不立即處理,而是等待一段時(shí)間的操作。休眠的原因是為了確認(rèn)刪除是否真實(shí)。因?yàn)槿罩局孛麜r(shí)監(jiān)聽(tīng)器會(huì)監(jiān)聽(tīng)到兩個(gè)事件,即,先刪除、再重建。例如,這里的刪除事件明顯不是真實(shí)的刪除,因此后面需要判斷該日志文件是否存在。如果有,則說(shuō)明是切分操作,否則是真實(shí)的刪除。因此為了給新建文件預(yù)留時(shí)間而休眠一段時(shí)間是重要的。

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

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

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

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
科尔| 安康市| 景东| 竹北市| 普安县| 曲靖市| 白玉县| 宣武区| 吴堡县| 乡宁县| 县级市| 怀柔区| 澄城县| 舟山市| 咸丰县| 南宫市| 苍南县| 乐昌市| 乐亭县| 新昌县| 惠来县| 桓仁| 禄丰县| 龙井市| 许昌县| 蕲春县| 公安县| 金门县| 沂南县| 肥城市| 文安县| 天峨县| 柏乡县| 灵台县| 疏附县| 诸城市| 张家口市| 凤翔县| 无锡市| 许昌市| 贵州省|