本發(fā)明涉及日志系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種分布式日志采集方法及裝置。
背景技術(shù):
當(dāng)前,互聯(lián)網(wǎng)公司提供的服務(wù)都是基于復(fù)雜的大規(guī)模分布式的業(yè)務(wù)系統(tǒng)集群來實現(xiàn)的,即一個服務(wù)構(gòu)建于不同的業(yè)務(wù)系統(tǒng)集群之上,一個前端請求會調(diào)用多個不同的后端業(yè)務(wù),調(diào)用方式多種多樣,比如:遠(yuǎn)程過程調(diào)用、數(shù)據(jù)庫、分布式緩存、分布式文件系統(tǒng)等。這些后端業(yè)務(wù)系統(tǒng)集群可能是由不同的團隊來開發(fā)的,也可能是使用不同的編程語言來實現(xiàn)的,可能分布在多個服務(wù)器之上,也可能橫跨多個不同的數(shù)據(jù)中心。隨著公司業(yè)務(wù)的不斷拓展,業(yè)務(wù)需求只會越來越多,后端業(yè)務(wù)邏輯將會越來越復(fù)雜,開發(fā)人員將會遇到越來越多的系統(tǒng)問題、業(yè)務(wù)耦合問題以及性能問題,比如:上線了新的服務(wù),如何確定它一切正常,比如發(fā)布5臺服務(wù)器,如何直觀了解是否有請求進來,訪問是否正常,是否每臺服務(wù)器都可以正常提供服務(wù);某個核心服務(wù)出現(xiàn)故障,導(dǎo)致大量報錯,如何快速定位到出現(xiàn)故障的服務(wù);前端請求響應(yīng)慢,如何確定是哪些服務(wù)導(dǎo)致的,哪個環(huán)節(jié)的性能遇到瓶頸;應(yīng)用程序出現(xiàn)性能瓶頸,如何確定瓶頸在哪里;開發(fā)人員離職,接手業(yè)務(wù)的開發(fā)人員如何快速的上手業(yè)務(wù),快速的理清業(yè)務(wù)邏輯之間的調(diào)用關(guān)系。
解決這類問題需要占用多個不同業(yè)務(wù)線開發(fā)人員的大量時間與精力,并且未必能夠快速的有效的解決問題。在這種情況下,需要一些可以幫助開發(fā)人員理解業(yè)務(wù)邏輯、快速定位問題的日志數(shù)據(jù)供用戶參考。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是,提供一種分布式日志采集方法及裝置,及時從大規(guī)模業(yè)務(wù)系統(tǒng)集群的工作過程中采集到一些能夠反映業(yè)務(wù)邏輯的日志數(shù)據(jù)。
本發(fā)明采用的技術(shù)方案是,所述分布式日志采集方法,在客戶端側(cè)執(zhí)行的流程包括:
步驟1,當(dāng)客戶端中有業(yè)務(wù)系統(tǒng)基于請求調(diào)用所述業(yè)務(wù)系統(tǒng)對應(yīng)的中間件時,通過中間件中預(yù)設(shè)的埋點采集與所述業(yè)務(wù)系統(tǒng)調(diào)用有關(guān)的數(shù)據(jù),并將采集到的所述數(shù)據(jù)連同中間件運行時間數(shù)據(jù)一并填充入日志數(shù)據(jù);
步驟2,將所述日志數(shù)據(jù)發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲。
進一步的,所述方法在客戶端側(cè)執(zhí)行的流程,還包括:
在所述步驟1之前,按照預(yù)先設(shè)定的采樣率從所述業(yè)務(wù)系統(tǒng)接收到的所有的所述請求中選擇相應(yīng)數(shù)量的請求,針對選擇出的請求執(zhí)行所述步驟1。
進一步的,所述步驟2包括:
按照設(shè)定的通信方式將所述日志數(shù)據(jù)發(fā)送給日志收集代理模塊,再通過日志收集代理模塊發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲;
所述設(shè)定的通信方式,包括:套接字方式、共享內(nèi)存方式或者管道方式。
進一步的,所述按照設(shè)定的通信方式將所述日志數(shù)據(jù)發(fā)送給日志收集代理模塊,包括:
將所述日志數(shù)據(jù)放入到多個第一異步隊列并從中輪詢選出日志數(shù)據(jù)按照設(shè)定的通信方式發(fā)送給所述日志收集代理模塊。
進一步的,在所述日志收集服務(wù)器的數(shù)量為一個的情況下,所述通過日志收集代理模塊發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲,包括:
日志收集代理模塊將所述日志數(shù)據(jù)放入到多個第二異步隊列并從中輪詢選出日志數(shù)據(jù);再將每次選出的日志數(shù)據(jù)發(fā)送給所述日志收集服務(wù)器,以使所述日志收集服務(wù)器將接收到的日志數(shù)據(jù)進行兼容性處理后統(tǒng)一保存到數(shù)據(jù)庫中;
在所述日志收集服務(wù)器的數(shù)量為兩個以上的情況下:
所述通過日志收集代理模塊發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲,包括:
日志收集代理模塊一方面獲取日志收集服務(wù)器列表并從中輪詢選擇每次發(fā)送所對應(yīng)接收的日志收集服務(wù)器,另一方面將所述日志數(shù)據(jù)放入到多個第二異步隊列并從中輪詢選出日志數(shù)據(jù);再將每次選出的日志數(shù)據(jù)發(fā)送給對應(yīng)接收的日志收集服務(wù)器,以使各日志收集服務(wù)器將接收到的日志數(shù)據(jù)進行兼容性處理后統(tǒng)一保存到數(shù)據(jù)庫中。
進一步的,在客戶端的數(shù)量為兩個以上的情況下:
為中間件設(shè)置采集開關(guān);當(dāng)所述采集開關(guān)開啟時,允許通過中間件中預(yù)設(shè)的埋點執(zhí)行所述步驟1;和/或,
為日志收集代理模塊設(shè)置發(fā)送開關(guān);當(dāng)所述發(fā)送開關(guān)開啟時,允許通過日志收集代理模塊將所述日志數(shù)據(jù)發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲。
進一步的,所述與業(yè)務(wù)系統(tǒng)調(diào)用有關(guān)的數(shù)據(jù),包括:業(yè)務(wù)系統(tǒng)的名稱、類型、全局唯一標(biāo)識id、全局唯一順序id、當(dāng)前的系統(tǒng)時間、調(diào)用方業(yè)務(wù)系統(tǒng)的ip地址及端口、和被調(diào)用方業(yè)務(wù)系統(tǒng)的ip地址及端口;
所述中間件運行時間數(shù)據(jù),至少包括以下之一:中間件的全程運行時長、中間件的設(shè)定階段的運行時長。
本發(fā)明還提供一種分布式日志采集裝置,設(shè)置于客戶端側(cè),所述裝置包括:
中間件模塊,用于當(dāng)客戶端中有業(yè)務(wù)系統(tǒng)基于請求調(diào)用所述業(yè)務(wù)系統(tǒng)對應(yīng)的中間件時,通過中間件中預(yù)設(shè)的埋點采集與所述業(yè)務(wù)系統(tǒng)調(diào)用有關(guān)的數(shù)據(jù),并將采集到的所述數(shù)據(jù)連同中間件運行時間數(shù)據(jù)一并填充入日志數(shù)據(jù);將所述日志數(shù)據(jù)發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲。
進一步的,所述裝置,還包括:
請求篩選模塊,用于按照預(yù)先設(shè)定的采樣率從所述業(yè)務(wù)系統(tǒng)接收到的所有的所述請求中選擇相應(yīng)數(shù)量的請求,針對選擇出的請求調(diào)用中間件模塊。
進一步的,所述裝置,還包括:日志收集代理模塊;
所述中間件模塊,還用于按照設(shè)定的通信方式將所述日志數(shù)據(jù)發(fā)送給日志收集代理模塊;所述設(shè)定的通信方式,包括:套接字方式、共享內(nèi)存方式或者管道方式;
所述日志收集代理模塊,用于將所述日志數(shù)據(jù)發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲。
進一步的,所述中間件模塊,具體用于:
將所述日志數(shù)據(jù)放入到多個第一異步隊列并從中輪詢選出日志數(shù)據(jù)按照設(shè)定的通信方式發(fā)送給所述日志收集代理模塊。
進一步的,在所述日志收集服務(wù)器的數(shù)量為一個的情況下,所述日志收集代理模塊,具體用于:
日志收集代理模塊將所述日志數(shù)據(jù)放入到多個第二異步隊列并從中輪詢選出日志數(shù)據(jù);再將每次選出的日志數(shù)據(jù)發(fā)送給所述日志收集服務(wù)器,以使所述日志收集服務(wù)器將接收到的日志數(shù)據(jù)進行兼容性處理后統(tǒng)一保存到數(shù)據(jù)庫中;
在所述日志收集服務(wù)器的數(shù)量為兩個以上的情況下:
所述日志收集代理模塊,具體用于:一方面獲取日志收集服務(wù)器列表并從中輪詢選擇每次發(fā)送所對應(yīng)接收的日志收集服務(wù)器,另一方面將所述日志數(shù)據(jù)放入到多個第二異步隊列并從中輪詢選出日志數(shù)據(jù);再將每次選出的日志數(shù)據(jù)發(fā)送給對應(yīng)接收的日志收集服務(wù)器,以供各日志收集服務(wù)器將接收到的日志數(shù)據(jù)進行兼容性處理后統(tǒng)一保存到數(shù)據(jù)庫中。
進一步的,在客戶端的數(shù)量為兩個以上的情況下,所述中間件模塊,還用于:
為中間件設(shè)置采集開關(guān);當(dāng)所述采集開關(guān)開啟時,允許通過中間件中預(yù)設(shè)的埋點執(zhí)行所述采集和所述發(fā)送的操作;和/或,
為日志收集代理模塊設(shè)置發(fā)送開關(guān);當(dāng)所述發(fā)送開關(guān)開啟時,允許通過日志收集代理模塊將所述日志數(shù)據(jù)發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲。
進一步的,所述與業(yè)務(wù)系統(tǒng)調(diào)用有關(guān)的數(shù)據(jù),包括:業(yè)務(wù)系統(tǒng)的名稱、類 型、全局唯一標(biāo)識id、全局唯一順序id、當(dāng)前的系統(tǒng)時間、調(diào)用方業(yè)務(wù)系統(tǒng)的ip地址及端口、和被調(diào)用方業(yè)務(wù)系統(tǒng)的ip地址及端口;
所述中間件運行時間數(shù)據(jù),至少包括以下之一:中間件的全程運行時長、中間件的設(shè)定階段的運行時長。
采用上述技術(shù)方案,本發(fā)明至少具有下列優(yōu)點:
本發(fā)明所述分布式日志采集方法及裝置,通過采集并匯總前端請求訪問后端業(yè)務(wù)系統(tǒng)所留下的足跡,為業(yè)務(wù)開發(fā)人員排除故障、性能調(diào)優(yōu)、掌握業(yè)務(wù)執(zhí)行邏輯提供底層支撐。本發(fā)明可以在對業(yè)務(wù)系統(tǒng)不侵入的前提下,完成日志數(shù)據(jù)的采集工作,即對使用方無感,減少業(yè)務(wù)開發(fā)人員的工作量;在業(yè)務(wù)無感知的情況下實時采集到日志數(shù)據(jù),以便使用方可以盡快的定位與解決問題。在為中間件設(shè)置采集開關(guān)、為日志收集代理模塊設(shè)置發(fā)送開關(guān)的情況下,使用方可以根據(jù)需求,自定義收集日志數(shù)據(jù)的范圍和粒度。本發(fā)明多處使用異步隊列,保證了數(shù)據(jù)的實效性,同時,異步隊列也可以做短時間內(nèi)的數(shù)據(jù)緩存。
附圖說明
圖1為本發(fā)明第一實施例的分布式日志采集方法流程圖;
圖2為本發(fā)明第五實施例的分布式日志采集系統(tǒng)組成結(jié)構(gòu)示意圖;
圖3為本發(fā)明第五實施例分布式日志采集系統(tǒng)的采集流程示意圖。
具體實施方式
為更進一步闡述本發(fā)明為達成預(yù)定目的所采取的技術(shù)手段及功效,以下結(jié)合附圖及較佳實施例,對本發(fā)明進行詳細(xì)說明如后。
本發(fā)明第一實施例,一種分布式日志采集方法,如圖1所示,在客戶端側(cè)執(zhí)行的流程包括以下具體步驟:
步驟s101,當(dāng)客戶端中有業(yè)務(wù)系統(tǒng)基于請求調(diào)用所述業(yè)務(wù)系統(tǒng)對應(yīng)的中間 件時,通過中間件中預(yù)設(shè)的埋點采集與所述業(yè)務(wù)系統(tǒng)調(diào)用有關(guān)的數(shù)據(jù),并將采集到的所述數(shù)據(jù)連同中間件運行時間數(shù)據(jù)一并填充入日志數(shù)據(jù)。該預(yù)設(shè)的埋點為在中間件的執(zhí)行過程中的設(shè)定時間點執(zhí)行的一段程序。
具體的,所述與業(yè)務(wù)系統(tǒng)調(diào)用有關(guān)的數(shù)據(jù),包括:業(yè)務(wù)系統(tǒng)的名稱、類型、全局唯一標(biāo)識id、全局唯一順序id、當(dāng)前的系統(tǒng)時間、調(diào)用方業(yè)務(wù)系統(tǒng)的ip地址及端口、和被調(diào)用方業(yè)務(wù)系統(tǒng)的ip地址及端口。
所述中間件運行時間數(shù)據(jù),至少包括以下之一:中間件的全程運行時長、中間件的設(shè)定階段的運行時長。
步驟s102,將所述日志數(shù)據(jù)發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲。
具體的,步驟s102包括:
按照設(shè)定的通信方式將所述日志數(shù)據(jù)發(fā)送給日志收集代理模塊,再通過日志收集代理模塊發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲;
所述設(shè)定的通信方式,包括:套接字方式、共享內(nèi)存方式或者管道方式。
進一步的,在步驟s102中,所述按照設(shè)定的通信方式將所述日志數(shù)據(jù)發(fā)送給日志收集代理模塊,包括:
將所述日志數(shù)據(jù)放入到多個第一異步隊列并從中輪詢選出日志數(shù)據(jù)按照設(shè)定的通信方式發(fā)送給所述日志收集代理模塊;
在所述日志收集服務(wù)器的數(shù)量為一個的情況下,所述通過日志收集代理模塊發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲,包括:
日志收集代理模塊將所述日志數(shù)據(jù)放入到多個第二異步隊列并從中輪詢選出日志數(shù)據(jù);再將每次選出的日志數(shù)據(jù)發(fā)送給所述日志收集服務(wù)器,以使所述日志收集服務(wù)器將接收到的日志數(shù)據(jù)進行兼容性處理后統(tǒng)一保存到數(shù)據(jù)庫中;
在所述日志收集服務(wù)器的數(shù)量為兩個以上的情況下,所述通過日志收集代理模塊發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲,包括:
日志收集代理模塊一方面獲取日志收集服務(wù)器列表并從中輪詢選擇每次發(fā)送所對應(yīng)接收的日志收集服務(wù)器,另一方面將所述日志數(shù)據(jù)放入到多個第二異 步隊列并從中輪詢選出日志數(shù)據(jù);再將每次選出的日志數(shù)據(jù)發(fā)送給對應(yīng)接收的日志收集服務(wù)器,各日志收集服務(wù)器將接收到的日志數(shù)據(jù)進行兼容性處理后統(tǒng)一保存到數(shù)據(jù)庫中。
優(yōu)選的,在客戶端的數(shù)量為兩個以上的情況下:
為中間件設(shè)置采集開關(guān);當(dāng)所述采集開關(guān)開啟時,允許通過中間件中預(yù)設(shè)的埋點執(zhí)行所述步驟1;和/或,
為日志收集代理模塊設(shè)置發(fā)送開關(guān);當(dāng)所述發(fā)送開關(guān)開啟時,允許通過日志收集代理模塊將所述日志數(shù)據(jù)發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲。
在為中間件設(shè)置采集開關(guān)、為日志收集代理模塊設(shè)置發(fā)送開關(guān)的情況下,使用方可以根據(jù)需求,自定義收集日志數(shù)據(jù)的范圍,因為當(dāng)發(fā)送開關(guān)關(guān)閉時,相應(yīng)的日志收集代理模塊可以不發(fā)送日志數(shù)據(jù);當(dāng)采集開關(guān)關(guān)閉時,相應(yīng)的中間件則無需采集日志數(shù)據(jù)。
本發(fā)明第二實施例,一種分布式日志采集方法,本實施例所述方法與第一實施例大致相同,區(qū)別在于,本實施例的所述方法,在客戶端側(cè)執(zhí)行的流程還包括以下具體步驟:
在所述步驟s101之前,按照預(yù)先設(shè)定的采樣率從所述業(yè)務(wù)系統(tǒng)接收到的所有的所述請求中選擇相應(yīng)數(shù)量的請求,針對選擇出的請求執(zhí)行所述步驟s101。
具體的,在本發(fā)明實施例中,可以針對任一業(yè)務(wù)系統(tǒng),設(shè)定對該業(yè)務(wù)系統(tǒng)中的所述請求的采樣率,按照采樣率去選取相應(yīng)數(shù)量的請求進行日志數(shù)據(jù)的收集,而無需對該業(yè)務(wù)系統(tǒng)收到的全部的所述請求進行日志數(shù)據(jù)的收集。
本發(fā)明第三實施例,與第一實施例對應(yīng),本實施例介紹一種分布式日志采集裝置,設(shè)置于客戶端側(cè),所述裝置包括以下組成部分:
中間件模塊,用于當(dāng)客戶端中有業(yè)務(wù)系統(tǒng)基于請求調(diào)用所述業(yè)務(wù)系統(tǒng)對應(yīng)的中間件時,通過中間件中預(yù)設(shè)的埋點采集與所述業(yè)務(wù)系統(tǒng)調(diào)用有關(guān)的數(shù)據(jù), 并將采集到的所述數(shù)據(jù)連同中間件運行時間數(shù)據(jù)一并填充入日志數(shù)據(jù);將所述日志數(shù)據(jù)發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲。
具體的,所述與業(yè)務(wù)系統(tǒng)調(diào)用有關(guān)的數(shù)據(jù),包括:業(yè)務(wù)系統(tǒng)的名稱、類型、全局唯一標(biāo)識id、全局唯一順序id、當(dāng)前的系統(tǒng)時間、調(diào)用方業(yè)務(wù)系統(tǒng)的ip地址及端口、和被調(diào)用方業(yè)務(wù)系統(tǒng)的ip地址及端口。
所述中間件運行時間數(shù)據(jù),至少包括以下之一:中間件的全程運行時長、中間件的設(shè)定階段的運行時長。
優(yōu)選的,所述裝置,還包括:日志收集代理模塊;
所述中間件模塊,具體用于按照設(shè)定的通信方式將所述日志數(shù)據(jù)發(fā)送給日志收集代理模塊;所述設(shè)定的通信方式,包括:套接字方式、共享內(nèi)存方式或者管道方式;
所述日志收集代理模塊,用于將所述日志數(shù)據(jù)發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲。
進一步的,所述中間件模塊,用于:
將所述日志數(shù)據(jù)放入到多個第一異步隊列并從中輪詢選出日志數(shù)據(jù)按照設(shè)定的通信方式發(fā)送給所述日志收集代理模塊;
在所述日志收集服務(wù)器的數(shù)量為一個的情況下,所述日志收集代理模塊,具體用于:
日志收集代理模塊將所述日志數(shù)據(jù)放入到多個第二異步隊列并從中輪詢選出日志數(shù)據(jù);再將每次選出的日志數(shù)據(jù)發(fā)送給所述日志收集服務(wù)器,以使所述日志收集服務(wù)器將接收到的日志數(shù)據(jù)進行兼容性處理后統(tǒng)一保存到數(shù)據(jù)庫中;
在所述日志收集服務(wù)器的數(shù)量為兩個以上的情況下,所述日志收集代理模塊,具體用于:
一方面獲取日志收集服務(wù)器列表并從中輪詢選擇每次發(fā)送所對應(yīng)接收的日志收集服務(wù)器,另一方面將所述日志數(shù)據(jù)放入到多個第二異步隊列并從中輪詢選出日志數(shù)據(jù);再將每次選出的日志數(shù)據(jù)發(fā)送給對應(yīng)接收的日志收集服務(wù)器, 以供各日志收集服務(wù)器將接收到的日志數(shù)據(jù)進行兼容性處理后統(tǒng)一保存到數(shù)據(jù)庫中。
優(yōu)選的,在客戶端的數(shù)量為兩個以上的情況下,所述中間件模塊,還用于:
為中間件設(shè)置采集開關(guān);當(dāng)所述采集開關(guān)開啟時,允許通過中間件中預(yù)設(shè)的埋點執(zhí)行所述采集和所述發(fā)送的操作;和/或,
為日志收集代理模塊設(shè)置發(fā)送開關(guān);當(dāng)所述發(fā)送開關(guān)開啟時,允許通過日志收集代理模塊將所述日志數(shù)據(jù)發(fā)送給日志收集服務(wù)器進行統(tǒng)一存儲。
中間件模塊在為中間件設(shè)置采集開關(guān)、為日志收集代理模塊設(shè)置發(fā)送開關(guān)的情況下,使用方可以根據(jù)需求,自定義收集日志數(shù)據(jù)的范圍。
本發(fā)明第四實施例,一種分布式日志采集裝置,本實施例所述裝置與第一實施例大致相同,區(qū)別在于,本實施例的所述裝置,還包括:
請求篩選模塊,用于按照預(yù)先設(shè)定的采樣率從所述業(yè)務(wù)系統(tǒng)接收到的所有的所述請求中選擇相應(yīng)數(shù)量的請求,針對選擇出的請求調(diào)用中間件模塊。
本發(fā)明第五實施例,本實施例是在上述實施例的基礎(chǔ)上,結(jié)合附圖2~3介紹一個本發(fā)明的應(yīng)用實例。
互聯(lián)網(wǎng)公司提供的服務(wù)都是基于各類中間件來開發(fā)的,例如數(shù)據(jù)庫中間件、消息中間件、web中間件等,這為本發(fā)明實施例的設(shè)計與實現(xiàn)提供了便利條件。
本發(fā)明實施例的核心思想在于:對中間件進行埋點,即在中間件代碼中設(shè)置日志監(jiān)測代碼,以保證對業(yè)務(wù)系統(tǒng)的不侵入性與業(yè)務(wù)無感知。以異步隊列的方式進行日志數(shù)據(jù)的實時采集,同時不影響業(yè)務(wù)系統(tǒng)的性能與效率。通過增加開關(guān)與采樣率等手段確保日志數(shù)據(jù)的范圍與粒度,增加本發(fā)明實施例的靈活性。重新設(shè)計了日志數(shù)據(jù)的格式,保證不同業(yè)務(wù)系統(tǒng)采集到的數(shù)據(jù)格式統(tǒng)一,易于進行后續(xù)的匯總與分析。對日志數(shù)據(jù)收集采用集群的方式,避免了日志收集的單點故障,同時減低了每臺日志收集服務(wù)器的壓力,并且對于日志收集服務(wù)器 集群,服務(wù)器的增刪都是動態(tài)的。
本發(fā)明實施例的分布式日志采集系統(tǒng)的整體框架如圖2所示,包含以下組件:位于日志收集客戶端側(cè)的帶埋點的中間件和日志收集代理、以及位于日志收集服務(wù)器側(cè)的日志收集服務(wù)器集群和數(shù)據(jù)庫存儲集群。
帶埋點的中間件:業(yè)務(wù)系統(tǒng)日志實時采集并發(fā)送。可以設(shè)有采集開關(guān),開關(guān)關(guān)閉后則該中間件不會采集日志數(shù)據(jù)。
日志收集代理:接收多個業(yè)務(wù)系統(tǒng)的日志并發(fā)送到日志收集服務(wù)器集群,可以設(shè)有發(fā)送開關(guān),開關(guān)關(guān)閉后則該代理不會向日志收集服務(wù)器集群發(fā)送數(shù)據(jù)。
日志收集服務(wù)器集群:處理接收到的日志數(shù)據(jù)并保存到數(shù)據(jù)庫存儲集群中。
當(dāng)有請求訪問相應(yīng)的業(yè)務(wù)系統(tǒng)時,業(yè)務(wù)請求會觸發(fā)中間件調(diào)用,由于已經(jīng)對中間件進行埋點,所以中間件被調(diào)用時,就會觸發(fā)日志監(jiān)測代碼,從而生成指定格式的日志數(shù)據(jù)。日志監(jiān)測代碼執(zhí)行時,通過在初始化時就建立好的socket連接將日志數(shù)據(jù)發(fā)送給本地的日志收集代理。日志收集代理將接收到的日志數(shù)據(jù)實時的發(fā)送給日志收集服務(wù)器集群。日志收集服務(wù)器集群統(tǒng)一對日志進行格式化處理后,保存到數(shù)據(jù)庫存儲集群當(dāng)中。
如圖3所示,本發(fā)明實施例的分布式日志采集系統(tǒng)的采集流程如下:
步驟1,當(dāng)有請求調(diào)用到業(yè)務(wù)系統(tǒng)時,業(yè)務(wù)系統(tǒng)會執(zhí)行相應(yīng)中間件代碼;
步驟2,當(dāng)執(zhí)行到日志監(jiān)測代碼時,首先檢查采集開關(guān)是否打開,如果打開則跳轉(zhuǎn)到步驟3,否則跳轉(zhuǎn)到步驟6;
步驟3,按照預(yù)先設(shè)定的采樣率從業(yè)務(wù)系統(tǒng)所收到的請求中篩選出相應(yīng)數(shù)量的請求,針對篩選出的請求執(zhí)行步驟4;特別的,采樣率的含義是指可以指定每隔指定間隔個請求后才采集一次日志數(shù)據(jù);
步驟4,初始化環(huán)境上下文并根據(jù)定義好的數(shù)據(jù)結(jié)構(gòu)格式初始化日志結(jié)構(gòu)體;
步驟5,收集需要的系統(tǒng)信息填入日志結(jié)構(gòu)體,收集的數(shù)據(jù)包括:業(yè)務(wù)系統(tǒng)的名稱、業(yè)務(wù)系統(tǒng)的類型、業(yè)務(wù)系統(tǒng)的全局唯一標(biāo)識id、業(yè)務(wù)系統(tǒng)的全局唯一順序id、業(yè)務(wù)系統(tǒng)的當(dāng)前系統(tǒng)時間、調(diào)用方業(yè)務(wù)系統(tǒng)的ip地址及端口、以及被 調(diào)用方業(yè)務(wù)系統(tǒng)的ip地址及端口等;
步驟6,執(zhí)行中間件代碼;
步驟7,中間件代碼執(zhí)行完畢后,檢查采集開關(guān)是否打開,如果打開則跳轉(zhuǎn)到步驟8,否則中間件代碼執(zhí)行結(jié)束;
步驟8,二次采集系統(tǒng)信息并填入日志結(jié)構(gòu)體,收集的數(shù)據(jù)包括:中間件代碼調(diào)用執(zhí)行時間,即用步驟8的當(dāng)前系統(tǒng)時間減去步驟5中采集的系統(tǒng)時間;
步驟9,將包含有步驟5和步驟8中收集的系統(tǒng)信息的日志結(jié)構(gòu)體進行封裝得到日志數(shù)據(jù),將日志數(shù)據(jù)放入到異步隊列當(dāng)中;特別的,為了增加吞吐量,在初始化時創(chuàng)建了多個異步隊列,并且將日志數(shù)據(jù)放入異步隊列時,根據(jù)預(yù)定義的哈希算法選擇將日志數(shù)據(jù)放入的異步隊列,以保證多個異步隊列中數(shù)據(jù)的均衡性;
步驟10,帶埋點的中間件中運行著異步隊列消費者模塊,該模塊輪詢每個異步隊列,將其中的數(shù)據(jù)取出,并通過本地套接字socket的方式發(fā)送到日志收集代理;特別的,本地socket是在業(yè)務(wù)系統(tǒng)初始化時就創(chuàng)建完成的;
步驟11,日志收集代理監(jiān)聽本地socket端口,接入日志數(shù)據(jù);
步驟12,日志收集代理檢查發(fā)送開關(guān)是否打開,如打開則跳轉(zhuǎn)到步驟13,否則丟棄該條日志;特別的,在日志收集代理中加入發(fā)送開關(guān),是為了統(tǒng)一管理一臺日志收集客戶端主機上的多個業(yè)務(wù)系統(tǒng),當(dāng)某臺主機都不需要采集時,可以直接關(guān)閉該開關(guān);
步驟13,日志收集代理將日志數(shù)據(jù)放入到異步隊列當(dāng)中;特別的,為了增加吞吐量,系統(tǒng)在初始化時創(chuàng)建了多個異步隊列,并且日志數(shù)據(jù)放入異步隊列時,根據(jù)預(yù)定義的哈希算法選擇異步隊列,以保證多個異步隊列中數(shù)據(jù)的均衡性;
步驟14,日志收集代理的異步隊列消費者模塊輪詢每個異步隊列,將其中的數(shù)據(jù)取出發(fā)送給日志收集服務(wù)器集群;特別的,日志收集代理獲取日志收集服務(wù)器集群列表,從中選出合適的日志收集服務(wù)器;當(dāng)數(shù)據(jù)發(fā)送失敗時,異步 隊列消費者模塊會重新選擇日志收集服務(wù)器,盡可能的保證數(shù)據(jù)均勻的分布在多個日志收集服務(wù)器中;
步驟15,日志收集服務(wù)器集群中的日志收集服務(wù)器對日志數(shù)據(jù)進行監(jiān)聽,發(fā)現(xiàn)有日志數(shù)據(jù)到達時執(zhí)行步驟16;
步驟16,日志收集服務(wù)器對接收到的日志數(shù)據(jù)做版本兼容性檢查;由于帶埋點的中間件可能有多個版本,即不同版本之間的日志結(jié)構(gòu)體可能不同,所以在日志收集服務(wù)器端做兼容性處理;
步驟17,日志收集服務(wù)器根據(jù)版本號對日志數(shù)據(jù)做不同的格式化處理,統(tǒng)一成相同的格式;
步驟18,日志收集服務(wù)器將日志數(shù)據(jù)保存到數(shù)據(jù)庫存儲集群中的數(shù)據(jù)庫當(dāng)中。
本發(fā)明實施例所述分布式日志采集方法、裝置及系統(tǒng),通過采集并匯總前端請求訪問后端業(yè)務(wù)系統(tǒng)所留下的足跡,為業(yè)務(wù)開發(fā)人員排除故障、性能調(diào)優(yōu)、掌握業(yè)務(wù)執(zhí)行邏輯提供底層支撐。本發(fā)明可以在對業(yè)務(wù)系統(tǒng)不侵入的前提下,完成日志數(shù)據(jù)的采集工作,即對使用方無感,減少業(yè)務(wù)開發(fā)人員的工作量;在業(yè)務(wù)無感知的情況下實時采集到日志數(shù)據(jù),以便使用方可以盡快的定位與解決問題。在為中間件設(shè)置采集開關(guān)、為日志收集代理模塊設(shè)置發(fā)送開關(guān)的情況下,使用方可以根據(jù)需求,自定義收集日志數(shù)據(jù)的范圍和粒度。本發(fā)明多處使用異步隊列,保證了數(shù)據(jù)的實效性,同時,異步隊列也可以做短時間內(nèi)的數(shù)據(jù)緩存。
通過具體實施方式的說明,應(yīng)當(dāng)可對本發(fā)明為達成預(yù)定目的所采取的技術(shù)手段及功效得以更加深入且具體的了解,然而所附圖示僅是提供參考與說明之用,并非用來對本發(fā)明加以限制。