日志存儲的方法及裝置的制造方法
【專利摘要】本公開是關于一種日志存儲的方法及裝置,該方法包括:在消息列隊中預先劃分為多個分區,在獲取第一日志消息后,根據預設的關鍵字類型獲取第一日志消息的關鍵字,并獲取關鍵字的哈希碼,從而根據關鍵字的哈希碼和消息隊列的分區信息確定第一日志消息應當存儲的目標分區,并將第一日志消息存儲到消息隊列中的目標分區中。能夠解決無法對日志區分以及在使用日志時實時性差的問題,能夠實現日志的分類存儲,提高使用日志時實時性。
【專利說明】
曰志存儲的方法及裝置
技術領域
[0001 ]本公開涉及日志處理技術領域,尤其涉及一種日志存儲的方法及日志存儲的裝置。
【背景技術】
[0002]終端(例如手機、電腦等)在使用中會產生大量的日志,我們經常需要對這些日志進行收集,進而對這些日志進行分析。相關技術中日志的收集過程通常是:終端通常先將日志上傳到服務器代理,再使用scribe(—種日志收集系統)實時收集這些數據,并將收到的日志消息發送至消息隊列,然后消息隊列中的日志消息可以導入到分布式文件系統(Hadoop Distributed File System,簡稱HDFS),從而完成了日志的收集。
【發明內容】
[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]獲取待使用的目標日志消息的關鍵字;
[0035]根據所述目標日志消息的關鍵字確定所述目標日志消息所在的分區;
[0036]從所述目標日志消息所在的分區獲取所述目標日志消息。
[0037]可選的,所述從所述目標日志消息所在的分區獲取所述目標日志消息包括:
[0038]獲取所述目標日志消息的子關鍵字;
[0039]根據所述目標日志消息的子關鍵字確定所述目標日志消息所在的子分區;所述目標日志消息所在的子分區是所述目標日志消息所在分區中的子分區;
[0040]從所述目標日志消息所在的子分區獲取所述目標日志消息。
[0041 ]可選的,所述方法還包括:
[0042]當滿足預設的備份條件時,將消息隊列的每個分區中存儲的日志消息進行備份。
[0043]根據本公開實施例的第二方面,提供一種日志存儲的裝置,所述裝置包括:
[0044]消息獲取模塊,被配置為獲取第一日志消息;
[0045]關鍵字識別模塊,被配置為根據預設的關鍵字類型獲取所述第一日志消息的關鍵字;
[0046]計算模塊,被配置為獲取所述關鍵字的哈希碼;
[0047]分區選擇模塊,被配置為根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區;所述消息隊列包括多個分區,所述目標分區為所述多個分區中的任一分區;
[0048]存儲模塊,被配置為將所述第一日志消息存儲到所述消息隊列中的所述目標分區中。
[0049]可選的,所述分區選擇模塊被配置為:
[0050]根據所述關鍵字的哈希碼和消息隊列的每個分區的標識號確定所述第一日志消息應當存儲的目標分區;或者,
[0051]根據所述關鍵字的哈希碼和消息隊列的分區總數確定所述第一日志消息應當存儲的目標分區。
[0052]可選的,所述分區選擇模塊包括:
[0053]第一計算子模塊,被配置為獲取所述關鍵字的哈希碼的絕對值;
[0054]第二計算子模塊,被配置為將所述關鍵字的哈希碼的絕對值分別與消息隊列的每個分區的標識號進行模運算,得到多個模值,其中每個模值對應一個分區;
[0055]確定子模塊,被配置為根據每個分區對應的模值確定所述目標分區。
[0056]可選的,所述分區選擇包括:
[0057]第三計算子模塊,被配置為獲取所述關鍵字的哈希碼的絕對值;
[0058]第四計算子模塊,被配置為將所述關鍵字的哈希碼的絕對值與所述分區總數進行模運算;
[0059]獲取子模塊,被配置為獲取將進行模運算得到的模值除以預設值所得的余數;
[0060]確定子模塊,被配置為根據所述余數確定所述目標分區。
[0061 ]可選的,所述存儲模塊包括:
[0062]關鍵字獲取子模塊,被配置為根據預設的子關鍵字類型獲取所述第一日志消息的子關鍵字;
[0063]哈希計算子模塊,被配置為獲取所述子關鍵字的哈希碼;
[0064]確定子模塊,被配置為根據所述子關鍵字的哈希碼和所述目標分區的子分區信息確定所述第一日志消息應當存儲的目標子分區;所述目標子分區為所述至少一個子分區中的任一子分區;
[0065]存儲子模塊,被配置為將所述第一日志消息存儲到所述目標子分區。
[0066]可選的,所述裝置還包括:
[0067]標識獲取模塊,被配置為獲取待使用的目標日志消息所在分區的分區標識號;
[0068]第一消息提取模塊,被配置為根據所述分區標識號從所述目標日志消息所在分區獲取所述目標日志消息。
[0069]可選的,所述第一消息提取模塊包括:
[0070]標識獲取子模塊,被配置為獲取所述目標日志消息所在的子分區的子分區標識號;所述目標日志消息所在的子分區是所述目標日志消息所在分區中的子分區;
[0071 ]消息獲取子模塊,被配置為根據所述子分區標識號從所述目標日志消息所在的子分區獲取所述目標日志消息。
[0072]可選的,所述裝置還包括:
[0073]關鍵字獲取模塊,被配置為獲取待使用的目標日志消息的關鍵字;
[0074]分區確定模塊,被配置為根據所述目標日志消息的關鍵字確定所述目標日志消息所在的分區;
[0075]第二消息提取模塊,被配置為從所述目標日志消息所在的分區獲取所述目標日志消息。
[0076]可選的,所述第二消息提取模塊包括:
[0077]關鍵字獲取子模塊,被配置為獲取所述目標日志消息的子關鍵字;
[0078]子分區確定子模塊,根據所述目標日志消息的子關鍵字確定所述目標日志消息所在的子分區;所述目標日志消息所在的子分區是所述目標日志消息所在分區中的子分區;
[0079]消息獲取子模塊,被配置為從所述目標日志消息所在的子分區獲取所述目標日志消息。
[0080]可選的,所述裝置還包括:
[0081]備份模塊,被配置為當滿足預設的備份條件時,將消息隊列的每個分區中存儲的日志消息進行備份。
[0082]根據本公開實施例的第三方面,提供一種日志存儲的裝置,所述裝置包括:
[0083]處理器;
[0084]用于存儲處理器可執行指令的存儲器;
[0085]其中,所述處理器被配置為:
[0086]獲取第一日志消息;
[0087]根據預設的關鍵字類型獲取所述第一日志消息的關鍵字;
[0088]獲取所述關鍵字的哈希碼;
[0089]根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區;所述消息隊列包括多個分區,所述目標分區為所述多個分區中的任一分區;
[0090]將所述第一日志消息存儲到所述消息隊列中的所述目標分區中。
[0091]根據本公開實施例的第四方面,提供一種非臨時性計算機可讀存儲介質,當所述存儲介質中的指令由移動終端的處理器執行時,使得移動終端能夠執行一種日志存儲的方法,所述方法包括:獲取第一日志消息;根據預設的關鍵字類型獲取所述第一日志消息的關鍵字;獲取所述關鍵字的哈希碼;根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區;所述消息隊列包括多個分區,所述目標分區為所述多個分區中的任一分區;將所述第一日志消息存儲到所述消息隊列中的所述目標分區中。
[0092]本公開的實施例提供的技術方案可以包括以下有益效果:
[0093]本公開提供的日志存儲的方法及裝置,通過將消息列隊預先劃分為多個分區,在獲取第一日志消息后,根據預設的關鍵字類型獲取所述第一日志消息的關鍵字,并獲取所述關鍵字的哈希碼,從而根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區,所述目標分區為所述多個分區中的任一分區,最終將所述第一日志消息存儲到所述消息隊列中的所述目標分區中。由于相關技術中的日志收集過程中數據是集中在一起進行收集的,無法對日志的區分,從而也導致在使用日志時,需要對分布式文件系統中存儲的大量日志進行分析才能找到需要的日志,實時性差。本公開利用關鍵字將日志存儲在不同的分區中,能夠解決相關技術中無法對日志區分以及在使用日志時實時性差的問題,能夠實現日志的分類存儲,提高使用日志時實時性。
[0094]應當理解的是,以上的一般描述和后文的細節描述僅是示例性和解釋性的,并不能限制本公開。
【附圖說明】
[0095]此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本公開的實施例,并與說明書一起用于解釋本公開的原理。
[0096]圖1是根據一示例性實施例示出的一種日志存儲的方法的流程圖;
[0097]圖2是根據一示例性實施例示出的一種日志存儲的方法的流程圖;
[0098]圖3是根據一示例性實施例示出的另一種日志存儲的方法的流程圖;
[0099]圖4是根據一示例性實施例示出的一種日志存儲的裝置框圖;
[0100]圖5是圖4所示實施例示出的一種分區選擇模塊框圖;
[0101 ]圖6是圖4所示實施例示出的另一種分區選擇模塊框圖;
[0102]圖7是圖4所示實施例示出的一種存儲模塊框圖;
[0103]圖8是根據一示例性實施例示出的另一種日志存儲的裝置框圖;
[0104]圖9是圖8所示實施例示出的第一消息提取模塊框圖;
[0105]圖10是根據一示例性實施例示出的又一種日志存儲的裝置框圖;
[0106]圖11是圖10所示實施例示出的第二消息提取模塊框圖;
[0107]圖12是根據一示例性實施例示出的又一種日志存儲的裝置框圖;
[0108]圖13是根據一示例性實施例示出的一種日志存儲的裝置框圖。
【具體實施方式】
[0109]這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本公開相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本公開的一些方面相一致的裝置和方法的例子。
[0110]在介紹本公開提供的日志存儲的方法之前,首先對本公開所涉及應用場景進行介紹,該實施環境可以包括:終端,以及服務器,終端可以將自身產生的日志(此時是用戶數據的形式)上傳的服務代理,而后由位于服務器的日志收集系統scribe進行收集并將收到的日志消息存儲到消息隊列中,其中消息隊列可以預先劃分成多個分區,并且可以在日志收集系統scribe自定義消息攔截器,該攔截器可以預先定義一個或者多個關鍵字種類,從而可以根據收到的消息的關鍵字來確定將該日志消息存儲到哪個分區中。其中,終端例如可以是智能手機、功能平板電腦、智能電視、智能手表、PDA(Personal Digital Assistant,個人數字助理)、便攜計算機等移動終端,也可以是臺式計算機等固定終端。服務器可以是一臺服務器,或者由若干臺服務器組成的服務器集群,或者可以是一個云計算服務中心。
[0111]圖1是根據一示例性實施例示出的一種日志存儲的方法的流程圖,該方法可以應用于服務器,如圖1所示,該方法包括以下步驟。
[0112]步驟101,獲取第一日志消息。
[0113]其中,該第一日志消息可以是某一終端,例如手機、電腦等上傳的日志,獲取該第一日志消息可以由服務器中的日志收集系統scribe來執行。
[0114]步驟102,根據預設的關鍵字類型獲取第一日志消息的關鍵字。即可以理解為獲取所述第一日志消息中的屬于該預設的關鍵字類型的關鍵字。
[0115]步驟103,獲取關鍵字的哈希碼(hashcode)。
[0116]步驟104,根據關鍵字的哈希碼和消息隊列的分區信息確定第一日志消息應當存儲的目標分區;消息隊列包括多個分區,目標分區為該多個分區中的任一分區。
[0117]其中,可以預先在消息隊列中設置多個分區,示例的,可以在消息隊列的用于存儲日志的Topic(主題)設置多個分區,每個分區分配一定的存儲空間,用于存儲接收到的日志消息。另外,分區信息可以是消息隊列的每個分區的標識號(比如ID),或者可以是分區的總數。
[0118]步驟105,將第一日志消息存儲到消息隊列中的目標分區中。
[0119]綜上,本公開提供的日志存儲的方法,通過將消息列隊預先劃分為多個分區,在獲取第一日志消息后,根據預設的關鍵字類型獲取所述第一日志消息的關鍵字,并獲取所述關鍵字的哈希碼,從而根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區,所述目標分區為所述多個分區中的任一分區,最終將所述第一日志消息存儲到所述消息隊列中的所述目標分區中。由于相關技術中的日志收集過程中數據是集中在一起進行收集的,無法對日志的區分,從而也導致在使用日志時,需要對分布式文件系統中存儲的大量日志進行分析才能找到需要的日志,實時性差。本公開利用關鍵字將日志存儲在不同的分區中,能夠解決相關技術中無法對日志區分以及在使用日志時實時性差的問題,能夠實現日志的分類存儲,提高使用日志時實時性。
[0120]圖2是根據一示例性實施例示出的一種日志存儲的方法的流程圖,該方法可以應用于服務器,在該服務器中,可以利用日志收集系統scribe設置攔截器,用于在將接收到的日志消息存儲到消息隊列之前先對收到的日志消息進行分析,以確定日志消息應當存儲的分區,其中分區是指消息隊列中的分區,該消息隊列中包括預先設置的多個分區,如圖2所示,該方法包括以下步驟。
[0121]步驟201,獲取第一日志消息。
[0122]其中,該第一日志消息可以是某一終端,例如手機、電腦等上傳的日志,獲取該第一日志消息可以有服務器中的日志收集系統scribe來執行。
[0123]步驟202,根據預設的關鍵字類型獲取第一日志消息的關鍵字。
[0124]即可以理解為獲取所述第一日志消息中的屬于該預設的關鍵字類型的關鍵字。例如,假設預設的關鍵字類型為“用戶ID”,并假設第一日志消息中包括“用戶ID: 123456,用戶性別:00(示例地,以00表示女性,01表示男性),用戶年齡:21,其他信息:XXXXXXX”,則根據指定的關鍵字類型“用戶ID”獲取的關鍵字應當為“123456”。
[0125]步驟203,獲取關鍵字的哈希碼。
[0126]步驟204,根據關鍵字的哈希碼和消息隊列的分區信息進行模運算,根據模運算的結果確定第一日志消息應當存儲的目標分區。
[0127]其中,分區信息可以是消息隊列中每個分區的標識號,或者是分區總數,在設置好消息隊列中的多個分區后,可以給每個分區分配唯一的標識號(例如ID),示例地假設消息隊列中有5個分區,則可以記為分區I?分區5,則確定第一日志消息應當存儲的目標分區可以通過以下兩種方式:
[0128]第一種,可以根據所述關鍵字的哈希碼和消息隊列的每個分區的標識號確定所述第一日志消息應當存儲的目標分區。示例地,可以包括:
[0129]首先,獲取所述關鍵字的哈希碼的絕對值;其次,將所述關鍵字的哈希碼的絕對值分別與消息隊列的每個分區的標識號進行模運算,得到多個模值,其中每個模值對應一個分區;再次,可以利用預設的分配策略,根據每個分區對應的模值確定第一日志消息應當存儲的目標分區。
[0130]第二種,可以根據所述關鍵字的哈希碼和消息隊列的分區總數(或者稱為分區標識號的最大值)確定所述第一日志消息應當存儲的目標分區。示例地,可以包括:
[0131]首先,獲取所述關鍵字的哈希碼的絕對值;其次,將所述關鍵字的哈希碼的絕對值與所述分區總數進行模運算;再次,獲取將進行模運算得到的模值除以預設值所得的余數;最后,根據所述余數確定第一日志消息應當存儲的目標分區,例如根據余數與分區標識號的對應關系來確定,比如余數為I則可以確定目標分區為分區I,該對應關系可以是預先設置的。
[0132]另外,值得一提的是,采用分區標識號進行模運算,可以在分區被誤刪后不影響后續的日志收集過程。
[0133]步驟205,將第一日志消息存儲到消息隊列中的目標分區中。
[0134]進一步,如果在設置攔截器時,設置的關鍵字類型可以有多個,則可以理解為從多個維度去確定日志消息應當存儲的分區其中這里設置的多個關鍵字類型可以是有關聯關系的,例如在設置了某一關鍵字類型后,還可以進一步設置子關鍵字類型,則相應的可以在消息隊列中建立子分區。比如預設的關鍵字類型為“用戶ID”,子關鍵字類型為“用戶性別”,假設分區為分區I至分區5,分別用于存儲I類用戶、2類用戶、3類用戶、4類用戶和5類用戶的日志消息,并且在每個分區中建立有兩個子分區,分別對應用戶性別為男性和女性。示例地,圖3是根據一示例性實施例示出的另一種日志存儲的方法的流程圖,如圖3所示,在預設了子關鍵字類型的情況下,該方法可以用以下步驟206?步驟209替換步驟205。
[0135]步驟206,根據預設的子關鍵字類型獲取第一日志消息的子關鍵字。
[0136]其中,與獲取關鍵字的方法相同,以步驟202中的第一日志消息“用戶ID:123456,用戶性別:00(示例地,以00表示女性,01表示男性),用戶年齡:21,其他信息:XXXXXXX”為例,假設子關鍵字類型為“用戶性別”,則這里獲取的第一日志消息的子關鍵字為“00”。其中步驟206也可以在執行步驟201時一起執行。
[0137]步驟207,獲取子關鍵字的哈希碼。
[0138]步驟208,根據子關鍵字的哈希碼和目標分區的子分區信息確定第一日志消息應當存儲的目標子分區。
[0139]其中,子分區信息可以為目標分區中的每個子分區的標識號,或者是子分區總數,因此確定第一日志消息應當存儲的目標子分區可以也通過兩種方式:
[0140]第一種,可以根據所述子關鍵字的哈希碼和目標分區中的每個子分區的標識號確定所述第一日志消息應當存儲的目標子分區。示例地,可以包括:
[0141]首先,獲取所述子關鍵字的哈希碼的絕對值;其次,將所述子關鍵字的哈希碼的絕對值分別與每個子分區的標識號進行模運算,得到多個模值,其中每個模值對應一個子分區;再次,可以利用預設的分配策略,根據每個子分區對應的模值確定第一日志消息應當存儲的目標子分區。
[0142]第二種,可以根據所述子關鍵字的哈希碼和消息隊列的子分區總數確定所述第一日志消息應當存儲的目標子分區。示例地,可以包括:
[0143]首先,獲取所述子關鍵字的哈希碼的絕對值;其次,將所述子關鍵字的哈希碼的絕對值與所述子分區總數進行模運算;再次,獲取將進行模運算得到的模值除以預設值所得的余數;最后,根據所述余數確定第一日志消息應當存儲的子目標分區,例如根據余數與子分區標識號的對應關系來確定。
[0144]例如,假設已經確定的目標分區為分區I,并且獲得的余數為1,則可以確定目標分區為子分區1-1,該對應關系可以是預先設置的。根據前文所述,分區對應的是I類用戶,并且假設子分區1-1對應的是用戶性別為女性的子分區,則通過上述方法,可以將所有的I類用戶中的女性用戶的相關日志消息都存儲在分區I中的子分區1-1中,可以將具有相似關鍵字的日志消息存儲在同一個分區,甚至子分區中。
[0145]步驟209,將第一日志消息存儲到目標子分區。
[0146]另外每個子分區還可以有更進一步的子分區,其實現方法與步驟206?209相同,不再贅述。可以見通過多關鍵字和子分區能夠進一步的將分區細化,實現在日志存儲中更精細的進行分區存儲。因此,上述方法實現了日志的分區存儲,有利于日志的區分,可以將具有相似關鍵字的日志消息存儲在同一個分區,甚至子分區中,從而能夠實現在使用存儲的日志消息時快速定位需要的目標日志消息。
[0147]示例地,在使用存儲的日志時,可以先獲取待使用的目標日志消息所在分區的分區標識號,再根據分區標識號從目標日志消息所在分區獲取目標日志消息,例如獲取的目標日志消息為“分區I”,則可以從分區I中去獲取目標日志消息。如果第一日志消息是存儲在子分區中,則除了獲取目標日志消息所在分區的分區標識號之外,還需要獲取目標日志消息所在的子分區的子分區標識號(所述目標日志消息所在的子分區是所述目標日志消息所在分區中的子分區),從而在根據分區標識號確定目標日志消息所在分區后,根據子分區標識號從目標日志消息所在的子分區獲取目標日志消息,例如,目標日志消息位于分區I中的子分區1-2,則可以獲取“分區I”以及“子分區1-2”,從而可以從分區I的子分區1-2中獲取目標日志消息。
[0148]或者,在使用存儲的日志時,可以先獲取待使用的目標日志消息的關鍵字,而后根據目標日志消息的關鍵字確定目標日志消息所在的分區,再從目標日志消息所在的分區獲取目標日志消息。如果第一日志消息是存儲在子分區中,則除了獲取目標日志消息的關鍵字之外,還需要獲取目標日志消息的子關鍵字,從而在根據目標日志消息的關鍵字確定目標日志消息所在的分區后,根據目標日志消息的子關鍵字確定目標日志消息所在的子分區(所述目標日志消息所在的子分區是所述目標日志消息所在分區中的子分區),并從目標日志消息所在的子分區獲取目標日志消息。其中,根據目標日志消息的關鍵字確定目標日志消息所在的分區的方法可以參考步驟204,根據目標日志消息的子關鍵字確定目標日志消息所在的子分區的方法可以參考步驟208。
[0149]另外,還可以在滿足預設的備份條件時,將消息隊列的每個分區中存儲的日志消息進行備份。其中,該備份條件可以為預先設置的備份時間點,當到達備份時間點時將消息隊列的每個分區中存儲的日志消息進行備份,或者接收到備份指令時進行備份等等。從而如果某一分區出現問題,例如被誤刪除,則可以新建一個相同ID的分區,并利用備份恢復即可。其中,對一個每個分區中存儲的日志消息進行備份,包括對每個分區中的每個子分區中存儲的日志消息進行備份。
[0150]綜上,本公開提供的日志存儲的方法,通過將消息列隊預先劃分為多個分區,在獲取第一日志消息后,根據預設的關鍵字類型獲取所述第一日志消息的關鍵字,并獲取所述關鍵字的哈希碼,從而根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區,所述目標分區為所述多個分區中的任一分區,最終將所述第一日志消息存儲到所述消息隊列中的所述目標分區中。由于相關技術中的日志收集過程中數據是集中在一起進行收集的,無法對日志的區分,從而也導致在使用日志時,需要對分布式文件系統中存儲的大量日志進行分析才能找到需要的日志,實時性差。本公開利用關鍵字將日志存儲在不同的分區中,能夠解決相關技術中無法對日志區分以及在使用日志時實時性差的問題,能夠實現日志的分類存儲,提高使用日志時實時性。
[0151]圖4是根據一示例性實施例示出的一種日志存儲的裝置框圖。該裝置400可以用于執行圖1?圖3任一所述的方法,參照圖4,該裝置包括消息獲取模塊401,關鍵字識別模塊402,計算模塊403,分區選擇模塊404和存儲模塊405。
[0152]消息獲取模塊401,被配置為獲取第一日志消息;
[0153]關鍵字識別模塊402,被配置為根據預設的關鍵字類型獲取所述第一日志消息的關鍵字;
[0154]計算模塊403,被配置為獲取所述關鍵字的哈希碼;
[0155]分區選擇模塊404,被配置為根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區;所述消息隊列包括多個分區,所述目標分區為所述多個分區中的任一分區;
[0156]存儲模塊405,被配置為將所述第一日志消息存儲到所述消息隊列中的所述目標分區中。
[0157]可選的,所述分區選擇模塊被配置為:
[0158]根據所述關鍵字的哈希碼和消息隊列的每個分區的標識號確定所述第一日志消息應當存儲的目標分區;或者,
[0159]根據所述關鍵字的哈希碼和消息隊列的分區總數確定所述第一日志消息應當存儲的目標分區。
[0160]可選的,圖5是圖4所示實施例示出的一種分區選擇模塊框圖,如圖5所示,所述分區選擇模塊404包括:
[0161]第一計算子模塊4041,被配置為獲取所述關鍵字的哈希碼的絕對值;
[0162]第二計算子模塊4042,被配置為將所述關鍵字的哈希碼的絕對值分別與消息隊列的每個分區的標識號進行模運算,得到多個模值,其中每個模值對應一個分區;
[0163]確定子模塊4043,被配置為根據每個分區對應的模值確定所述目標分區。
[0164]可選的,圖6是圖4所示實施例示出的另一種分區選擇模塊框圖,如圖6所示,所述分區選擇模塊404包括:
[0165]第三計算子模塊4044,被配置為獲取所述關鍵字的哈希碼的絕對值;
[0166]第四計算子模塊4045,被配置為將所述關鍵字的哈希碼的絕對值與所述分區總數進行模運算;
[0167]獲取子模塊4046,被配置為獲取將進行模運算得到的模值除以預設值所得的余數;
[0168]確定子模塊4047,被配置為根據所述余數確定所述目標分區。
[0169]可選的,圖7是圖4所示實施例示出的一種存儲模塊框圖,如圖7所示,所述存儲模塊405包括:
[0170]關鍵字獲取子模塊4051,被配置為根據預設的子關鍵字類型獲取所述第一日志消息的子關鍵字;
[0171]哈希計算子模塊4052,被配置為獲取所述子關鍵字的哈希碼;
[0172]確定子模塊4053,被配置為根據所述子關鍵字的哈希碼和所述目標分區的子分區信息確定所述第一日志消息應當存儲的目標子分區;所述目標子分區為所述至少一個子分區中的任一子分區;
[0173]存儲子模塊4054,被配置為將所述第一日志消息存儲到所述目標子分區。
[0174]可選的,圖8是根據一示例性實施例示出的另一種日志存儲的裝置框圖,如圖8所示,所述裝置400還包括:
[0175]標識獲取模塊406,被配置為獲取待使用的目標日志消息所在分區的分區標識號;
[0176]第一消息提取模塊407,被配置為根據所述分區標識號從所述目標日志消息所在分區獲取所述目標日志消息。
[0177]可選的,圖9是圖8所示實施例示出的第一消息提取模塊框圖,如圖9所示,所述第一消息提取模塊407包括:
[0178]標識獲取子模塊4071,被配置為獲取所述目標日志消息所在的子分區的子分區標識號;所述目標日志消息所在的子分區是所述目標日志消息所在分區中的子分區;
[0179]消息獲取子模塊4072,被配置為根據所述子分區標識號從所述目標日志消息所在的子分區獲取所述目標日志消息。
[0180]可選的,圖10是根據一示例性實施例示出的又一種日志存儲的裝置框圖,如圖10所示,所述裝置400還包括:
[0181]關鍵字獲取模塊408,被配置為獲取待使用的目標日志消息的關鍵字;
[0182]分區確定模塊409,被配置為根據所述目標日志消息的關鍵字確定所述目標日志消息所在的分區;
[0183]第二消息提取模塊410,被配置為從所述目標日志消息所在的分區獲取所述目標曰志消息。
[0184]可選的,圖11是圖10所示實施例示出的第二消息提取模塊框圖,如圖9所示,所述第二消息提取模塊410包括:
[0185]關鍵字獲取子模塊4101,被配置為獲取所述目標日志消息的子關鍵字;
[0186]子分區確定子模塊4102,根據所述目標日志消息的子關鍵字確定所述目標日志消息所在的子分區;所述目標日志消息所在的子分區是所述目標日志消息所在分區中的子分區;
[0187]消息獲取子模塊4103,被配置為從所述目標日志消息所在的子分區獲取所述目標曰志消息。
[0188]可選的,圖12是根據一示例性實施例示出的又一種日志存儲的裝置框圖,如圖12所示,所述裝置還包括:
[0189]備份模塊411,被配置為當滿足預設的備份條件時,將消息隊列的每個分區中存儲的日志消息進行備份。
[0190]綜上,本公開提供的日志存儲的方法,通過將消息列隊預先劃分為多個分區,在獲取第一日志消息后,根據預設的關鍵字類型獲取所述第一日志消息的關鍵字,并獲取所述關鍵字的哈希碼,從而根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區,所述目標分區為所述多個分區中的任一分區,最終將所述第一日志消息存儲到所述消息隊列中的所述目標分區中。由于相關技術中的日志收集過程中數據是集中在一起進行收集的,無法對日志的區分,從而也導致在使用日志時,需要對分布式文件系統中存儲的大量日志進行分析才能找到需要的日志,實時性差。本公開利用關鍵字將日志存儲在不同的分區中,能夠解決相關技術中無法對日志區分以及在使用日志時實時性差的問題,能夠實現日志的分類存儲,提高使用日志時實時性。
[0191]關于上述實施例中的裝置,其中各個模塊執行操作的具體方式已經在有關該方法的實施例中進行了詳細描述,此處將不做詳細闡述說明。
[0192]圖13是根據一示例性實施例示出的一種日志存儲的裝置1300的框圖。例如,裝置1300可以被提供為一服務器。參照圖13,裝置1300包括處理組件1322,其進一步包括一個或多個處理器,以及由存儲器1332所代表的存儲器資源,用于存儲可由處理組件1322的執行的指令,例如應用程序。存儲器1332中存儲的應用程序可以包括一個或一個以上的每一個對應于一組指令的模塊。此外,處理組件1322被配置為執行指令,以執行上述日志存儲的方法。
[0193]裝置1300還可以包括一個電源組件1326被配置為執行裝置1300的電源管理,一個有線或無線網絡接口 1350被配置為將裝置1300連接到網絡,和一個輸入輸出(I/O)接口1358。裝置1300可以操作基于存儲在存儲器1332的操作系統,例如Windows ServerTM,MacOS XTM,UnixTM,LinuxTM,FreeBSDTM或類似。
[0194]在示例性實施例中,還提供了一種包括指令的非臨時性計算機可讀存儲介質,例如包括指令的存儲器1332,上述指令可由裝置1300的處理組件1322執行以完成上述日志存儲的方法。例如,所述非臨時性計算機可讀存儲介質可以是ROM、隨機存取存儲器(RAM)、CD-R0M、磁帶、軟盤和光數據存儲設備等。
[0195]本領域技術人員在考慮說明書及實踐本公開后,將容易想到本公開的其它實施方案。本申請旨在涵蓋本公開的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本公開的一般性原理并包括本公開未公開的本技術領域中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本公開的真正范圍和精神由下面的權利要求指出。
[0196]應當理解的是,本公開并不局限于上面已經描述并在附圖中示出的精確結構,并且可以在不脫離其范圍進行各種修改和改變。本公開的范圍僅由所附的權利要求來限制。
【主權項】
1.一種日志存儲的方法,其特征在于,所述方法包括: 獲取第一日志消息; 根據預設的關鍵字類型獲取所述第一日志消息的關鍵字; 獲取所述關鍵字的哈希碼; 根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區;所述消息隊列包括多個分區,所述目標分區為所述多個分區中的任一分區; 將所述第一日志消息存儲到所述消息隊列中的所述目標分區中。2.根據權利要求1所述的方法,其特征在于,所述根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區包括: 根據所述關鍵字的哈希碼和消息隊列的每個分區的標識號確定所述第一日志消息應當存儲的目標分區;或者, 根據所述關鍵字的哈希碼和消息隊列的分區總數確定所述第一日志消息應當存儲的目標分區。3.根據權利要求2所述的方法,其特征在于,所述根據所述關鍵字的哈希碼和消息隊列的每個分區的標識號確定所述第一日志消息應當存儲的目標分區,包括: 獲取所述關鍵字的哈希碼的絕對值; 將所述關鍵字的哈希碼的絕對值分別與消息隊列的每個分區的標識號進行模運算,得到多個模值,其中每個模值對應一個分區; 根據每個分區對應的模值確定所述目標分區。4.根據權利要求2所述的方法,其特征在于,根據所述關鍵字的哈希碼和消息隊列的分區總數確定所述第一日志消息應當存儲的目標分區,包括: 獲取所述關鍵字的哈希碼的絕對值; 將所述關鍵字的哈希碼的絕對值與所述分區總數進行模運算; 獲取將進行模運算得到的模值除以預設值所得的余數; 根據所述余數確定所述目標分區。5.根據權利要求1所述的方法,其特征在于,所述目標分區中包括至少一個子分區,所述將所述第一日志消息存儲到所述消息隊列中的所述目標分區中,包括: 根據預設的子關鍵字類型獲取所述第一日志消息的子關鍵字; 獲取所述子關鍵字的哈希碼; 根據所述子關鍵字的哈希碼和所述目標分區的子分區信息確定所述第一日志消息應當存儲的目標子分區;所述目標子分區為所述至少一個子分區中的任一子分區; 將所述第一日志消息存儲到所述目標子分區。6.根據權利要求1所述的方法,其特征在于,所述方法還包括: 獲取待使用的目標日志消息所在分區的分區標識號; 根據所述分區標識號從所述目標日志消息所在分區獲取所述目標日志消息。7.根據權利要求6所述的方法,其特征在于,所述根據所述分區標識號從所述目標日志消息所在分區中獲取所述目標日志消息包括: 獲取所述目標日志消息所在的子分區的子分區標識號;所述目標日志消息所在的子分區是所述目標日志消息所在分區中的子分區; 根據所述子分區標識號從所述目標日志消息所在的子分區獲取所述目標日志消息。8.根據權利要求1所述的方法,其特征在于,所述方法還包括: 獲取待使用的目標日志消息的關鍵字; 根據所述目標日志消息的關鍵字確定所述目標日志消息所在的分區; 從所述目標日志消息所在的分區獲取所述目標日志消息。9.根據權利要求8所述的方法,其特征在于,所述從所述目標日志消息所在的分區獲取所述目標日志消息包括: 獲取所述目標日志消息的子關鍵字; 根據所述目標日志消息的子關鍵字確定所述目標日志消息所在的子分區;所述目標日志消息所在的子分區是所述目標日志消息所在分區中的子分區; 從所述目標日志消息所在的子分區獲取所述目標日志消息。10.根據權利要求1所述的方法,其特征在于,所述方法還包括: 當滿足預設的備份條件時,將消息隊列的每個分區中存儲的日志消息進行備份。11.一種日志存儲的裝置,其特征在于,所述裝置包括: 消息獲取模塊,被配置為獲取第一日志消息; 關鍵字識別模塊,被配置為根據預設的關鍵字類型獲取所述第一日志消息的關鍵字; 計算模塊,被配置為獲取所述關鍵字的哈希碼; 分區選擇模塊,被配置為根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區;所述消息隊列包括多個分區,所述目標分區為所述多個分區中的任一分區; 存儲模塊,被配置為將所述第一日志消息存儲到所述消息隊列中的所述目標分區中。12.根據權利要求11所述的裝置,其特征在于,所述分區選擇模塊被配置為: 根據所述關鍵字的哈希碼和消息隊列的每個分區的標識號確定所述第一日志消息應當存儲的目標分區;或者, 根據所述關鍵字的哈希碼和消息隊列的分區總數確定所述第一日志消息應當存儲的目標分區。13.根據權利要求12所述的裝置,其特征在于,所述分區選擇模塊包括: 第一計算子模塊,被配置為獲取所述關鍵字的哈希碼的絕對值; 第二計算子模塊,被配置為將所述關鍵字的哈希碼的絕對值分別與消息隊列的每個分區的標識號進行模運算,得到多個模值,其中每個模值對應一個分區; 確定子模塊,被配置為根據每個分區對應的模值確定所述目標分區。14.根據權利要求12所述的裝置,其特征在于,所述分區選擇模塊包括: 第三計算子模塊,被配置為獲取所述關鍵字的哈希碼的絕對值; 第四計算子模塊,被配置為將所述關鍵字的哈希碼的絕對值與所述分區總數進行模運算; 獲取子模塊,被配置為獲取將進行模運算得到的模值除以預設值所得的余數; 確定子模塊,被配置為根據所述余數確定所述目標分區。15.根據權利要求11所述的裝置,其特征在于,所述存儲模塊包括: 關鍵字獲取子模塊,被配置為根據預設的子關鍵字類型獲取所述第一日志消息的子關鍵字; 哈希計算子模塊,被配置為獲取所述子關鍵字的哈希碼; 確定子模塊,被配置為根據所述子關鍵字的哈希碼和所述目標分區的子分區信息確定所述第一日志消息應當存儲的目標子分區;所述目標子分區為所述至少一個子分區中的任一子分區; 存儲子模塊,被配置為將所述第一日志消息存儲到所述目標子分區。16.根據權利要求11所述的裝置,其特征在于,所述裝置還包括: 標識獲取模塊,被配置為獲取待使用的目標日志消息所在分區的分區標識號; 第一消息提取模塊,被配置為根據所述分區標識號從所述目標日志消息所在分區獲取所述目標日志消息。17.根據權利要求16所述的裝置,其特征在于,所述第一消息提取模塊包括: 標識獲取子模塊,被配置為獲取所述目標日志消息所在的子分區的子分區標識號;所述目標日志消息所在的子分區是所述目標日志消息所在分區中的子分區; 消息獲取子模塊,被配置為根據所述子分區標識號從所述目標日志消息所在的子分區獲取所述目標日志消息。18.根據權利要求11所述的裝置,其特征在于,所述裝置還包括: 關鍵字獲取模塊,被配置為獲取待使用的目標日志消息的關鍵字; 分區確定模塊,被配置為根據所述目標日志消息的關鍵字確定所述目標日志消息所在的分區; 第二消息提取模塊,被配置為從所述目標日志消息所在的分區獲取所述目標日志消息。19.根據權利要求18所述的裝置,其特征在于,所述第二消息提取模塊包括: 關鍵字獲取子模塊,被配置為獲取所述目標日志消息的子關鍵字; 子分區確定子模塊,根據所述目標日志消息的子關鍵字確定所述目標日志消息所在的子分區;所述目標日志消息所在的子分區是所述目標日志消息所在分區中的子分區; 消息獲取子模塊,被配置為從所述目標日志消息所在的子分區獲取所述目標日志消息。20.根據權利要求11所述的裝置,其特征在于,所述裝置還包括: 備份模塊,被配置為當滿足預設的備份條件時,將消息隊列的每個分區中存儲的日志消息進行備份。21.—種日志存儲的裝置,其特征在于,所述裝置包括: 處理器; 用于存儲處理器可執行指令的存儲器; 其中,所述處理器被配置為: 獲取第一日志消息; 根據預設的關鍵字類型獲取所述第一日志消息的關鍵字; 獲取所述關鍵字的哈希碼; 根據所述關鍵字的哈希碼和消息隊列的分區信息確定所述第一日志消息應當存儲的目標分區;所述消息隊列包括多個分區,所述目標分區為所述多個分區中的任一分區;將所述第一日志消息存儲到所述消息隊列中的所述目標分區中。
【文檔編號】G06F17/30GK106055630SQ201610366186
【公開日】2016年10月26日
【申請日】2016年5月27日
【發明人】張旭華, 楊松, 萬韶華
【申請人】北京小米移動軟件有限公司