大資料應用日誌採集之Scribe演示例項完全解析

2021-09-23 21:15:01 字數 3824 閱讀 2192

引子:

scribe是facebook開源的日誌收集系統,在facebook內部已經得到大量的應用。它能夠從各種日誌源上收集日誌,儲存到乙個**儲存系統(可以是nfs,分布式檔案系統等)上,以便於進行集中統計分析處理。它為日誌的「分布式收集,統一處理」提供了乙個可擴充套件的,高容錯的方案。當**儲存系統的網路或者機器出現故障時,scribe會將日誌轉存到本地或者另乙個位置,當**儲存系統恢復後,scribe會將轉存的日誌重新傳輸給**儲存系統。其通常與hadoop結合使用,scribe用於向hdfs中push日誌,而hadoop通過mapreduce作業進行定期處理。

scribe從各種資料來源上收集資料,放到乙個共享佇列上,然後push到後端的**儲存系統上。當**儲存系統出現故障時,scribe可以暫時把日誌寫到本地檔案中,待**儲存系統恢復效能後,scribe把本地日誌續傳到**儲存系統上。需要注意的是,各個資料來源須通過thrift(由於採用了thrift,客戶端可以採用各種語言編寫向scribe傳輸資料(每條資料記錄包含乙個category和乙個message)。可以在scribe配置用於監聽埠的thrift執行緒數(預設為3)。在後端,scribe可以將不同category的資料存放到不同目錄中,以便於進行分別處理。後端的日誌儲存方 式可以是各種各樣的store,包括file(檔案),buffer(雙層儲存,乙個主儲存,乙個副儲存),network(另乙個scribe服務 器),bucket(包含多個store,通過hash的將資料存到不同store中),null(忽略資料),thriftfile(寫到乙個 thrift tfiletransport檔案中)和multi(把資料同時存放到不同store中)。

本文通過3個例項程式,分別演示scribe後端儲存為file、network和buffer時的操作方法和流程,演示示例程式位於scribe/examples目錄,目錄結構如下所示:[hadoop@hadoop1 examples]$ ls

example1.conf         example2client.conf  hdfs_example.conf  scribe_cat

example2central.conf  hdfs_example2.conf   readme             scribe_ctrl

一、example1:file

#step_01:建立訊息檔案存放目錄

mkdir /tmp/scribetest

#step_02:啟動scribe

src/scribed examples/example1.conf

#step_03:傳送訊息到scribe

echo "hello world" | ./scribe_cat test

#step_04:  驗證訊息記錄

cat /tmp/scribetest/test/test_current

#step_05:  檢查scribe狀態

./scribe_ctrl status

#step_06:  檢視scribe計數

./scribe_ctrl counters

#step_07:  停止scribe執行

./scribe_ctrl stop

二、example2:network

#step_01:建立工作目錄

mkdir /tmp/scribetest2

#step_02:啟動中心scribe程式,服務埠1463,記錄方式為file

src/scribed examples/example2central.conf

#step_03:啟動中心client程式,服務埠1464,儲存模式為network,寫入訊息到中心scribe

src/scribed examples/example2client.conf

#step_04:傳送訊息到client scribe

echo "test message" | ./scribe_cat -h localhost:1464 test2

echo "this message will be ignored" | ./scribe_cat -h localhost:1464 ignore_me

echo "123:this message will be bucketed" | ./scribe_cat -h localhost:1464 bucket_me

#step_05:驗證訊息被中心scribe接收和記錄到檔案

cat /tmp/scribetest/test2/test2_current

#step_06:驗證訊息分組,不同category的資料存放到不同目錄中

cat /tmp/scribetest/bucket*/bucket_me_current

#step_07:狀態檢查訊息計數檢查,如果管理命令不加引數預設為1643

./scribe_ctrl status 1463

./scribe_ctrl status 1464

./scribe_ctrl counters 1463

./scribe_ctrl counters 1464  

#step_08:關閉服務程序

./scribe_ctrl stop 1463

./scribe_ctrl stop 1464

三、example3:buffer

#step_01:啟動中心scribe,服務埠1463

src/scribed examples/example2central.conf

#step_02:啟動客戶端scribe,服務埠1464

src/scribed examples/example2client.conf

#step_03:傳送訊息到客戶端scribe

echo "test message 1" | ./scribe_cat -h localhost:1464 test3

#step_04:驗證訊息是否接受,在中心scribe訊息儲存目錄查詢

cat /tmp/scribetest/test3/test3_current

#step_05:停止中心scribe服務,我們期待看到結果是快取

./scribe_ctrl stop 1463

#step_06:驗證中心scribe執行狀態

./scribe_ctrl status 1463

#step_07:傳送訊息到客戶端-此時訊息期待結果是快取

echo "test message 2" | ./scribe_cat -h localhost:1464 test3

#step_08:超時客戶端scribe會有報警資訊

./scribe_ctrl status 1464

#step_09:重啟中心scribe

src/scribed examples/example2central.conf

#step_10:驗證scribe狀態

./scribe_ctrl status 1463

./scribe_ctrl status 1464

#step_10:驗證中心scribe是否接收到快取的訊息

cat /tmp/scribetest/test3/test3_current

#step_11:關閉服務程序

./scribe_ctrl stop 1463

./scribe_ctrl stop 1464

四、工作流程

通過以上例項,我們可以看到scribe核心的工作原理和處理流程,具體流程如下圖所示:

初始大資料 02 日誌採集大資料和爬蟲採集大資料

此圖借鑑 關鍵字 從整體上描述 agent 中 sources sinks channels 所涉及的元件 詳細指定agent中每個sources,sinks 和channels的具體實現 通過 channel 將 source 與 sink 連線起來。啟動 agent 的 shell 操作 網路爬...

大資料 資料採集平台之Scribe

apache flume 詳情請看文章 大資料 資料採集平台之apache flume fluentd 詳情請看文章 大資料 資料採集平台之fluentd logstash 詳情請看文章 大資料 資料採集平台之logstash apache chukwa 詳情請看文章 大資料 資料採集平台之apac...

大資料之資料採集引擎flum

flume的安裝非常簡單,只需要解壓的tar.gz的包後,就可以啟動 大資料之資料採集引擎flum flum是用來採集檔案的比如.log檔案,也可以指定乙個目錄 flum由三個元件組成,分別是 source channel sink source元件是用來採集日誌 channel元件是用來緩衝日誌的...