大數據應用日誌採集之Scribe演示實例徹底解析

引子:後端

  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分佈式

1、Example1:fileoop

  #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性能

2、Example2:Network
this

  #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 1464blog

3、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

4、工做流程

  經過以上實例,咱們能夠看到scribe核心的工做原理和處理流程,具體流程以下圖所示:

相關文章
相關標籤/搜索