一種數據采集方法、裝置及系統的制作方法
【專利摘要】本發明公開了一種數據采集方法、裝置及系統,包括:檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件;若滿足,則將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下;采集線程從所述指定目錄下采集所述新的日志文件并發送至服務器。可見,通過將滿足拆分條件的日志數據拆分另存為新的日志文件這種拆分方式,使采集線程工作時,不影響寫入線程繼續寫入日志數據,從而減小了傳輸延時的同時,提高了工作效率,解決了現有技術中由于寫入進程和采集進程不能同時進行而導致的采集等待時間較長,整體過程連貫性差和效率不佳的問題。
【專利說明】
一種數據采集方法、裝置及系統
技術領域
[0001]本發明涉及數據采集技術領域,更具體地說,涉及一種數據采集方法、裝置及系統。
【背景技術】
[0002]目前,日志數據的寫入和采集是阻塞方式。傳統方式下,日志寫入進程和日志采集進程交互鎖定日志數據;當采集進程進行日志采集時,進程執行read()系統調用;如果該日志數據正在被寫入進程鎖定,在日志采集進程會一直被阻塞,處于掛起狀態;直至寫入進程釋放日志數據;反之亦然。因此,在此方式下,由于采集的進程導致寫入進程的掛起,會嚴重影響整體系統的性能;另一方面,正在寫入時,采集進程被掛起,導致采集等待時間較長,整體過程連貫性差和效率不佳。
[0003]因此,如何解決傳統方式下對日志數據寫入和采集時存在的問題,是本領域技術人員需要解決的。
【發明內容】
[0004]本發明的目的在于提供一種數據采集方法、裝置及系統,以解決傳統方式下對日志數據寫入和采集時整體過程連貫性差和效率不佳的問題。
[0005]為實現上述目的,本發明實施例提供了如下技術方案:
[0006]—種數據采集方法,包括:
[0007]檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件;
[0008]若滿足,則將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下;
[0009]采集線程從所述指定目錄下采集所述新的日志文件并發送至服務器;
[0010]其中,在將滿足拆分條件的日志數據拆分出時,所述寫入線程繼續寫入日志數據,并繼續執行所述檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件的步驟。
[0011]其中,所述檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件,包括:
[0012]檢測寫入線程寫入的未采集的日志數據是否等于預定容量;和/或,檢測寫入線程寫入的未采集的日志數據是否滿足拆分時間條件。
[0013]其中,將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下,包括:
[0014]將滿足拆分條件的日志數據拆分出,并按照預定的重命名規則,將拆分出的日志數據重命名并保存在指定目錄下。
[0015]其中,還包括:
[0016]接收到服務器發送的手動采集指令后,將所述寫入線程寫入的未采集的日志數據立即拆分出,另存為新的日志文件并保存至指定目錄下。
[0017]一種數據采集裝置,包括:
[0018]檢測模塊,用于檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件;若滿足,則觸發拆分模塊;
[0019]所述拆分模塊,用于將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下;
[0020]發送模塊,用于將采集線程從所述指定目錄下采集的所述新的日志文件并發送至服務器;
[0021]其中,在所述拆分模塊將滿足拆分條件的日志數據拆分出時,所述寫入線程繼續寫入日志數據,且所述檢測模塊繼續檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件。
[0022 ]其中,所述檢測模塊,包括:
[0023]第一檢測單元,用于檢測寫入線程寫入的未采集的日志數據是否等于預定容量;和/或,
[0024]第二檢測單元,用于檢測寫入線程寫入的未采集的日志數據是否滿足拆分時間條件。
[0025]其中,所述拆分模塊將滿足拆分條件的日志數據拆分出后,按照預定的重命名規則,將拆分出的日志數據重命名并保存在指定目錄下。
[0026]其中,還包括:
[0027]執行模塊,用于在接收到服務器發送的手動采集指令后,立即觸發所述拆分模塊將所述寫入線程寫入的未采集的日志數據拆分出,另存為新的日志文件并保存至指定目錄下。
[0028]—種數據采集系統,包括上述任意一項所述的數據采集裝置和服務器。
[0029]其中,所述服務器包括:
[0030]接收模塊,用于根據接收的日志文件的名字和/或接收時間,對所述接收的日志文件進行排序存儲。
[0031]通過以上方案可知,本發明實施例提供的一種數據采集方法、裝置及系統,包括:檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件;若滿足,則將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下;采集線程從所述指定目錄下采集所述新的日志文件并發送至服務器;其中,在將滿足拆分條件的日志數據拆分出時,所述寫入線程繼續寫入日志數據,并繼續執行所述檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件的步驟。
[0032]可見,通過將滿足拆分條件的日志數據拆分另存為新的日志文件這種拆分方式,使采集線程工作時,不影響寫入線程繼續寫入日志數據,從而減小了傳輸延時的同時,提高了工作效率,解決了現有技術中由于寫入進程和采集進程不能同時進行而導致的采集等待時間較長,整體過程連貫性差和效率不佳的問題。
【附圖說明】
[0033]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0034]圖1為本發明實施例公開的一種數據采集方法流程示意圖;
[0035]圖2為本發明實施例公開的客戶端日志數據寫入與采集示意圖;
[0036]圖3為本發明實施例公開的日志數據傳輸示意圖;
[0037]圖4為本發明實施例公開的一種數據采集裝置結構示意圖。
【具體實施方式】
[0038]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0039]本發明實施例公開了一種數據采集方法、裝置及系統,以解決傳統方式下對日志數據寫入和采集時整體過程連貫性差和效率不佳的問題。
[0040]參見圖1,本發明實施例提供的一種數據采集方法,包括:
[0041 ] SlOl、檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件;
[0042]其中,所述檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件,包括:
[0043]檢測寫入線程寫入的未采集的日志數據是否等于預定容量;和/或,檢測寫入線程寫入的未采集的日志數據是否滿足拆分時間條件。
[0044]具體的,通常日志的寫入和采集是采用阻塞方式,同一進程下,日志的寫入,日志的采集是不連貫的,步驟是:客戶端日志寫入,日志采集、日志傳輸到服務端,服務端完成寫入、存儲后才能繼續開始新一輪客戶端的日志寫入、采集、傳輸,服務端寫入、存儲。即在此方式下,采集進程和寫入進程只能執行一種,因此采集的進程導致寫入進程的掛起,嚴重影響整體系統的性能;并且在執行寫入進程時,采集進程被掛起,導致采集等待時間較長,整體過程連貫性差和效率不佳。因此在本實施例中,采用非阻塞方式實現對日志數據的的寫入和采集,從而實現了采集與寫入的并行進行。
[0045]具體的,本實施例提供的這種數據采集方法可以適用于在云計算數據中心-中間件應用服務器的海量整體日志采集和處理系統中,針對大日志,長日志進行處理。在寫入日志數據時,檢測寫入的未采集的日志數據是否滿足拆分條件,即寫入未采集的日志數據等于預定閾值則進行拆分,這里的拆分條件可以為每1M拆分一次;且本實施例中的拆分時間條件可以為每一天拆分一次。
[0046]具體的,客戶端可以對本機運行多個server信息進行采集,為了避免并發,每個server產生一系列連續的日志文,并進行發送。
[0047]S102、若滿足,則將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下;
[0048]其中,將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下,包括:
[0049]將滿足拆分條件的日志數據拆分出,并按照預定的重命名規則,將拆分出的日志數據重命名并保存在指定目錄下。
[0050]具體的,若將預定容量設定為10M,即在寫入日志文件時,按照每1M為單位拆分日志數據,并按照拆分時間順序,對拆分的日志數據進行重命名并存儲,例如圖2中編號I,2,3……7 ο
[0051 ]需要說明的是,在采集拆分出的日志數據時,同時繼續檢測寫入的未采集的日志數據的容量是否等于預定容量,直至所述日志數據全部寫完,即參見圖2,客戶端寫入日志數據及采集日志數據的流程如下:
[0052]寫入日志數據I;寫入日志數據2,在寫入日志數據2的同時,采集日志數據I;寫入日志數據3,在寫入日志數據3的同時采集日志數據2……依次類推,實現了對數據的非阻塞寫入及采集。
[0053]需要說明的是,在本實施例中對整體日志數據的拆分條件除了對檢測寫入的日志數據的容量是否等于預定容量之外,還可以以每天為單位對整體日志數據的拆分和采集。
[0054]S103、采集線程從所述指定目錄下采集所述新的日志文件并發送至服務器;
[0055]其中,在將滿足拆分條件的日志數據拆分出時,所述寫入線程繼續寫入日志文件,并繼續執行所述檢測寫入線程寫入的未采集的日志文件是否滿足拆分條件的步驟。
[0056]具體的,客戶端發送新采集的日志文件之前,可以先確定上次發送的位置,再將客戶端采集的日志文件發送到服務端;或者,在客戶端向服務器發送數據之前,可以先查詢服務器的接收進度,根據服務器的實際接收情況,決定是否向服務器發送日志文件。
[0057]具體的,參見圖3,客戶端采集日志數據及服務器接收日志數據的流程如下:
[0058]在客戶端采集日志數據I后,將日志數據I發送至服務器;服務器將日志數據I寫入存儲的同時,客戶端繼續采集日志數據2,并發送至服務器;服務器將日志數據2寫入存儲的同時,客戶端繼續采集日志數據3,并發送至服務器……可見,在本實施例中客戶端采集和服務器端寫入僅相差一個日志數據時間的異步非實時方式,實現日志的連續傳輸和接收。在服務器端接收日志數據后進行排序合并,并進行存儲,再根據需要對多日志數據進行檢索讀取。
[0059]具體的,傳統方式中,客戶端發送和服務器接收同步實時工作,需要設定同步時鐘,實時響應等功能,實現成本較高,效果不理想。而在本實施例中,每拆分一個日志數據后,就會自動采集拆分后的日志數據,并發送至服務器,可見在本實施例中服務器接收到日志數據與客戶端發送日志數據的延時差僅相差一個日志數據寫入時間,若設定預定容量為10Μ,那么平均采集時間小于5分鐘,也就是說服務器接收到日志數據與客戶端發送日志數據的延時差僅為5分鐘左右。為了滿足不同用戶對延時的需求,可以通過設置預設容量的數值來改變延時時間。從而使這種異步非實時方式近似與同步實時方式。另外,傳統方式中,同步傳輸過程中新的日志采集要等待上一輪日志傳輸、寫入完成后,才能繼續進行,而本申請的日志采集和傳輸可以同時進行,提高了工作效率。
[0060]基于上述技術方案,本方案還包括:
[0061 ]接收到服務器發送的手動采集指令后,將所述寫入線程寫入的未采集的日志數據立即拆分出,另存為新的日志文件并保存至指定目錄下。
[0062]具體的,在自動采集的方式中,若設置預定容量為10Μ,則客戶端采集程序大約每5分鐘采集一次,并傳輸到日志服務器,即使日志服務器接收到的數據與客戶端相比總延遲5分鐘。因此,在本實施例中通過添加手動采集方式對自動采集方式進行補充,即服務器端發出手動采集指令后,客戶端直接對當前在正在寫入的日志進行采集,不需要等待5分鐘后再進行下次采集。該方式進一步彌補了異步非實時傳輸方式和同步實時方式傳輸的之間的日志時差,從而本實施例中的非實時傳輸更加接近于實時傳輸。
[0063]通過以上方案可知,本發明實施例提供的一種數據采集方法,包括:檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件;若滿足,則將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下;采集線程從所述指定目錄下采集所述新的日志文件并發送至服務器;其中,在將滿足拆分條件的日志數據拆分出時,所述寫入線程繼續寫入日志數據,并繼續執行所述檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件的步驟。
[0064]可見,通過將滿足拆分條件的日志數據拆分另存為新的日志文件這種拆分方式,使采集線程工作時,不影響寫入線程繼續寫入日志數據,從而減小了傳輸延時的同時,提高了工作效率,解決了現有技術中由于寫入進程和采集進程不能同時進行而導致的采集等待時間較長,整體過程連貫性差和效率不佳的問題。
[0065]下面對本發明實施例提供的一種數據采集裝置進行介紹,下文描述的一種數據采集裝置與上文描述的一種數據采集方法可以相互參照。
[0066]參見圖4,本發明實施例提供的一種數據采集裝置100,包括:
[0067]檢測模塊110,用于檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件;若滿足,則觸發拆分模塊120;
[0068]所述拆分模塊120,用于將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下;
[0069]發送模塊130,用于將采集線程從所述指定目錄下采集的所述新的日志文件并發送至服務器;
[0070]其中,在所述拆分模塊120將滿足拆分條件的日志數據拆分出時,所述寫入線程繼續寫入日志數據,且所述檢測模塊110繼續檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件。
[0071]基于上述技術方案,所述檢測模塊110,包括:
[0072]第一檢測單元,用于檢測寫入線程寫入的未采集的日志數據是否等于預定容量;和/或,
[0073]第二檢測單元,用于檢測寫入線程寫入的未采集的日志數據是否滿足拆分時間條件。
[0074]基于上述技術方案,所述拆分模塊120將滿足拆分條件的日志數據拆分出后,按照預定的重命名規則,將拆分出的日志數據重命名并保存在指定目錄下。
[0075]基于上述技術方案,本方案還包括:
[0076]執行模塊,用于在接收到服務器發送的手動采集指令后,立即觸發所述拆分模塊將所述寫入線程寫入的未采集的日志數據拆分出,另存為新的日志文件并保存至指定目錄下。
[0077]本發明實施例提供的一種數據采集系統,包括上一實施例中的數據采集裝置100和服務器。
[0078]基于上述技術方案,所述服務器包括:
[0079]接收模塊,用于根據接收的日志文件的名字和/或接收時間,對所述接收的日志文件進行排序存儲。
[0080]具體的,在接收客戶端發送的日志數據之前,還包括對服務端的配置文件參數設置,包括:定義日志數據的存儲路徑、傳輸模式、與客戶端的匹配信息、定義日志記錄解析格式等。配置文件主要是記錄上傳的日志數據的存儲位置,格式包括如何區分不同日志和日志如何解析。
[0081 ]具體的,服務器接收日志數據后,在配置文件指定的目錄下存放日志數據,并在傳輸控制文件狀態中記錄最后一個日志數據名。其中,服務器會收到的每一個日志文件有一個對應的傳輸控制文件,記錄相關的記錄數。傳輸控制文件對應最后的日志文件,如果通信正常,那么傳輸控制文件指向最后這個文件。如果不是正常通信,那么說明通信異常,最后的日志數據就是上次采集完成的日志文件。如果不存在對應日志數據,則取最新日志數據的前一個日志數據。為了確保操作的可控,傳輸控制文件先將當前位置的日志數據改名,再更新傳輸控制文件。
[0082]具體的,系統根據當前時間和順序號生成通訊id,使用時保證在并發下不重復;并且服務器端采用Servlet方式接收日志數據,并存放在指定目錄下,并支持對接收到的日志數據進行查詢和下載,且由于后臺日志存儲于多個文件中,因此系統要提供多日志數據查詢。具體查詢步驟包括:
[0083]第一步、選擇服務器和server,輸入時間范圍;
[0084]第二步、系統提供按級別查詢、類別查詢、日志信息內容(字符串)查詢,等多日志查詢,以及日志下載。
[0085]第三步、對日志查詢結果支持信息分頁功能。
[0086]本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。
[0087]對所公開的實施例的上述說明,使本領域專業技術人員能夠實現或使用本發明。對這些實施例的多種修改對本領域的專業技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發明的精神或范圍的情況下,在其它實施例中實現。因此,本發明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
【主權項】
1.一種數據采集方法,其特征在于,包括: 檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件; 若滿足,則將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下; 采集線程從所述指定目錄下采集所述新的日志文件并發送至服務器; 其中,在將滿足拆分條件的日志數據拆分出時,所述寫入線程繼續寫入日志數據,并繼續執行所述檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件的步驟。2.根據權利要求1所述的數據采集方法,其特征在于,所述檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件,包括: 檢測寫入線程寫入的未采集的日志數據是否等于預定容量;和/或,檢測寫入線程寫入的未采集的日志數據是否滿足拆分時間條件。3.根據權利要求2所述的數據采集方法,其特征在于,將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下,包括: 將滿足拆分條件的日志數據拆分出,并按照預定的重命名規則,將拆分出的日志數據重命名并保存在指定目錄下。4.根據權利要求1所述的數據采集方法,其特征在于,還包括: 接收到服務器發送的手動采集指令后,將所述寫入線程寫入的未采集的日志數據立即拆分出,另存為新的日志文件并保存至指定目錄下。5.一種數據采集裝置,其特征在于,包括: 檢測模塊,用于檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件;若滿足,則觸發拆分模塊; 所述拆分模塊,用于將滿足拆分條件的日志數據拆分出,另存為新的日志文件并保存至指定目錄下; 發送模塊,用于將采集線程從所述指定目錄下采集的所述新的日志文件并發送至服務器; 其中,在所述拆分模塊將滿足拆分條件的日志數據拆分出時,所述寫入線程繼續寫入日志數據,且所述檢測模塊繼續檢測寫入線程寫入的未采集的日志數據是否滿足拆分條件。6.根據權利要求5所述的數據采集裝置,其特征在于,所述檢測模塊,包括: 第一檢測單元,用于檢測寫入線程寫入的未采集的日志數據是否等于預定容量;和/或, 第二檢測單元,用于檢測寫入線程寫入的未采集的日志數據是否滿足拆分時間條件。7.根據權利要求6所述的數據采集裝置,其特征在于,所述拆分模塊將滿足拆分條件的日志數據拆分出后,按照預定的重命名規則,將拆分出的日志數據重命名并保存在指定目錄下。8.根據權利要求5所述的數據采集裝置,其特征在于,還包括: 執行模塊,用于在接收到服務器發送的手動采集指令后,立即觸發所述拆分模塊將所述寫入線程寫入的未采集的日志數據拆分出,另存為新的日志文件并保存至指定目錄下。9.一種數據采集系統,其特征在于,包括如權利要求5-8中任意一項所述的數據采集裝置和服務器。10.根據權利要求9所述的數據采集系統,其特征在于,所述服務器包括: 接收模塊,用于根據接收的日志文件的名字和/或接收時間,對所述接收的日志文件進行排序存儲。
【文檔編號】G06F3/06GK106095959SQ201610428479
【公開日】2016年11月9日
【申請日】2016年6月16日
【發明人】董愛強, 程志華, 齊志超, 馮揚, 張立新, 牟鵬
【申請人】北京中電普華信息技術有限公司, 國網信息通信產業集團有限公司, 國家電網公司