一種收集日志數(shù)據(jù)的方法及裝置的制造方法
【技術領域】
[0001]本申請涉及計算機技術領域,具體涉及一種收集日志數(shù)據(jù)的方法及裝置。
【背景技術】
[0002]隨著計算機技術的發(fā)展,計算機的功能也越來越多,計算機已成為必不可少的工具。計算機需要依靠程序才能運行,為了便于對程序進行維護,保證計算機正常運行,常常將程序運行過程中產生的運行狀態(tài)等日志數(shù)據(jù)記錄在指定日志文件中,通過查詢日志文件就可以得到程序相關的信息。在一個計算機集群中,往往需要把每個計算機中一些預設程序的日志數(shù)據(jù)收集到服務器上,對日志數(shù)據(jù)進行統(tǒng)一監(jiān)管和處理。
[0003]現(xiàn)有收集日志數(shù)據(jù)的方法如下:根據(jù)指定日志文件的文件名,查詢到指定日志文件,從指定日志文件中收集日志數(shù)據(jù)。
[0004]然而,為了防止日志文件過大,會按照預設規(guī)則(時間間隔或文件大小等)進行日志回滾,即:當指定日志文件滿足預設規(guī)則時,將指定日志文件重新命名(即修改為其它文件名),然后新建一個與指定日志文件的原文件名一樣的空白日志文件記錄回滾之后的日志數(shù)據(jù)?,F(xiàn)有收集日志數(shù)據(jù)的方法,是根據(jù)指定日志文件的文件名,從指定日志文件中收集日志數(shù)據(jù),當日志回滾后,記錄在重新命名后的日志文件中的日志數(shù)據(jù)就收集不到,使得收集的日志數(shù)據(jù)不全。
【發(fā)明內容】
[0005]本申請所要解決的技術問題在于提供一種收集日志數(shù)據(jù)的方法及裝置,可以收集到記錄在重新命名后的日志文件中的日志數(shù)據(jù),使得可以收集到完整齊全的日志數(shù)據(jù)。
[0006]為了解決上述問題,本申請公開了一種收集日志信息的方法,所述方法包括:
[0007]通過文件變化通知接口監(jiān)測指定的日志文件系統(tǒng);
[0008]獲取指定日志文件被寫入日志數(shù)據(jù)的事件;
[0009]判斷所述指定日志文件當前的文件指紋,與所述指定日志文件之前的文件指紋是否一致;
[0010]如果不一致,則獲取并根據(jù)所述指定日志文件對應的新文件名、原文件名和原文件偏移量,從所述原文件名對應的日志文件和所述新文件名對應的日志文件中收集日志數(shù)據(jù)。
[0011]進一步地,所述方法還包括:
[0012]所述通過文件變化通知接口監(jiān)測指定的日志文件系統(tǒng)之后,還包括:
[0013]獲取所述指定日志文件被重命名的事件;
[0014]記錄所述指定日志文件對應的新文件名和原文件名。
[0015]進一步地,所述文件變化通知接口包括:Linux系統(tǒng)中的inotify, windows系統(tǒng)中的文件系統(tǒng)監(jiān)測FileSystemWatcher ;
[0016]相應地,所述指定日志文件被寫入日志數(shù)據(jù)的事件包括:inotify中的文件有新的寫入 in_modify 事件,F(xiàn)ileSystemWatcher 中的變化 Changed 事件;
[0017]相應地,所述指定日志文件被重命名的事件包括:inotify中的文件移出in_move_from事件和文件移入in_move_to事件,F(xiàn)ileSystemffatcher中的重命名Renamed事件。
[0018]進一步地,所述獲取并根據(jù)所述指定日志文件對應的新文件名、原文件名和原文件偏移量,從所述原文件名對應的日志文件和所述新文件名對應的日志文件中收集日志數(shù)據(jù),包括:
[0019]將所述指定日志文件當前的文件偏移量和文件名分別作為所述原文件偏移量和所述原文件名記錄下來;
[0020]將所述指定日志文件當前的文件偏移量重置為0,收集所述指定日志文件中的日志數(shù)據(jù),重新生成并記錄所述指定日志文件的文件指紋;
[0021]當判定存在有所述指定日志文件對應的新文件名和原文件名的記錄時,根據(jù)所述原文件偏移量,從所述新文件名對應的日志文件中收集日志數(shù)據(jù)。
[0022]進一步地,所述獲取指定日志文件被寫入日志數(shù)據(jù)的事件之后,判斷所述指定日志文件當前的文件指紋,與所述指定日志文件之前的文件指紋是否一致之前,還包括:
[0023]判斷所述指定日志文件是不是第一次被收集日志數(shù)據(jù);
[0024]如果是,將所述指定日志文件加入到收集文件集合中,將所述指定日志文件的文件偏移量設置為0,收集所述指定日志文件中的日志數(shù)據(jù),生成并記錄所述指定日志文件的文件指紋;
[0025]如果不是,則執(zhí)行所述判斷所述指定日志文件當前的文件指紋,與所述指定日志文件之前的文件指紋是否一致的步驟。
[0026]進一步地,所述判斷所述指定日志文件當前的文件指紋,與所述指定日志文件之前的文件指紋是否一致之后,還包括:
[0027]如果一致,則根據(jù)所述指定日志文件當前的文件偏移量,從所述指定日志文件中收集日志數(shù)據(jù),并在收集日志數(shù)據(jù)后重新設置所述指定日志文件的文件偏移量。
[0028]為了解決上述問題,本申請公開了一種收集日志數(shù)據(jù)的裝置,所述裝置包括:
[0029]監(jiān)測模塊,用于通過文件變化通知接口監(jiān)測指定的日志文件系統(tǒng);
[0030]第一獲取模塊,用于獲取指定日志文件被寫入日志數(shù)據(jù)的事件;
[0031]第一判斷模塊,用于判斷所述指定日志文件當前的文件指紋,與所述指定日志文件之前的文件指紋是否一致;
[0032]第一收集模塊,用于如果所述第一判斷模塊的判斷結果是不一致,則獲取并根據(jù)所述指定日志文件對應的新文件名、原文件名和原文件偏移量,從所述原文件名對應的日志文件和所述新文件名對應的日志文件中收集日志數(shù)據(jù)。
[0033]進一步地,所述裝置還包括:
[0034]第二獲取模塊,用于獲取所述指定日志文件被重命名的事件;
[0035]記錄模塊,用于記錄所述指定日志文件對應的新文件名和原文件名。
[0036]進一步地,所述文件變化通知接口包括:Linux系統(tǒng)中的inotify, windows系統(tǒng)中的文件系統(tǒng)監(jiān)測FileSystemWatcher ;
[0037]相應地,所述指定日志文件被寫入日志數(shù)據(jù)的事件包括:inotify中的文件有新的寫入 in_modify 事件,F(xiàn)ileSystemWatcher 中的變化 Changed 事件;
[0038]相應地,所述指定日志文件被重命名的事件包括:inotify中的文件移出in_move_from事件和文件移入in_move_to事件,F(xiàn)ileSystemffatcher中的重命名Renamed事件。
[0039]進一步地,所述第一收集模塊包括:
[0040]記錄單元,用于如果不一致,將所述指定日志文件當前的文件偏移量和文件名分別作為所述原文件偏移量和所述原文件名記錄下來;
[0041]處理單元,用于將所述指定日志文件當前的文件偏移量重置為0,收集所述指定日志文件中的日志數(shù)據(jù),重新生成并記錄所述指定日志文件的文件指紋;
[0042]收集單元,用于當判定存在有所述指定日志文件對應的新文件名和原文件名的記錄時,根據(jù)所述原文件偏移量,從所述新文件名對應的日志文件中收集日志數(shù)據(jù)。
[0043]進一步地,所述裝置還包括:
[0044]第二判斷模塊,用于獲取指定日志文件被寫入日志數(shù)據(jù)的事件之后,判斷所述指定日志文件當前的文件指紋,與所述指定日志文件之前的文件指紋是否一致之前,判斷所述指定日志文件是不是第一次被收集日志數(shù)據(jù);
[0045]處理模塊,用于如果所述第二判斷模塊的判斷結果是是,將所述指定日志文件加入到收集文件集合中,將所述指定日志文件的文件偏移量設置為0,收集所述指定日志文件中的日志數(shù)據(jù),生成并記錄所述指定日志文件的文件指紋;
[0046]通知模塊,用于如果所述第二判斷模塊的判斷結果是不是,則通知所述第一判斷模塊執(zhí)行所述判斷所述指定日志文件當前的文件指紋,與所述指定日志文件之前的文件指紋是否一致的步驟。
[0047]進一步地,所述裝置還包括:
[0048]第二收集模塊,用于如果所述第一判斷模塊的判斷結果是一致,則根據(jù)所述指定日志文件當前的文件偏移量,從所述指定日志文件中收集日志數(shù)據(jù),并在收集日志數(shù)據(jù)后重新設置所述指定日志文件的文件偏移量。