Scribe日志收集系統介紹

jopen 12年前發布 | 27K 次閱讀 分布式/云計算/大數據 scribe

1、  概述

Scribe是非死book開源的日志收集系統,在非死book內部已經得到大量的應用。它能夠從各種日志源上收集日志,存儲到一個中央存 儲系統(可以是NFS,分布式文件系統等)上,以便于進行集中統計分析處理。它為日志的“分布式收集,統一處理”提供了一個可擴展的,高容錯的方案。當中 央存儲系統的網絡或者機器出現故障時,scribe會將日志轉存到本地或者另一個位置,當中央存儲系統恢復后,scribe會將轉存的日志重新傳輸給中央 存儲系統。

scribe的相關資料比較少,主要限于它的主頁(見參考資料1)。此外,它的安裝比較復雜,可參見我的另一篇博文:scribe日志收集系統安裝方法介紹

2、 架構

Scribe日志收集系統介紹

如上圖所示,Scribe從各種數據源上收集數據,放到一個共享隊列上,然后push到后端的中央存儲系統上。當中央存儲系統出現故障時,scribe可以暫時把日志寫到本地文件中,待中央存儲系統恢復性能后,scribe把本地日志續傳到中央存儲系統上。

需要注意的是,各個數據源須通過thrift(由于采用了thrift,客戶端可以采用各種語言編寫,關于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中各種store介紹

(1)file

將日志寫到文件或者NFS中。目前支持兩種文件格式,即std和hdfs,分別表示普通文本文件和HDFS。可配置的選項有:

max_size:文件大小上限,即當文件大小達到max_size時,創建新的文件繼續存儲數據。

rotate_period:文件創建周期,可以是hourly,daily,never和number[sufix]。sufix可以是s(second),m(minute),h(hour),d(day),w(week)。

sub_directory:子目錄名字

base_filename:文件前綴,如news,則會依次將數據存儲到文件news_20110403_00000,news_20110403_00001,……

(2) buffer

這是最常用的一種store。該store中包含兩個子store,其中一個是primary store,另一個是secondary store。日志會優先寫到primary store中,如果primary store出現故障,則scribe會將日志暫存到secondary store中,待primary store恢復性能后,再將secondary store中的數據拷貝到primary store中。其中,secondary store僅支持兩種store,一個是file,另一個是hdfs。

port=1464

max_msg_per_second=2000000

check_interval=1

max_queue_size=100000000

num_thrift_server_threads=2

# DEFAULT - write all messages to hadoop hdfs

category=default

type=buffer

target_write_size=20480

max_write_interval=1

buffer_send_rate=1

retry_interval=30

retry_interval_range=10

type=file

fs_type=hdfs

file_path=hdfs://localhost:9000/scribedata

create_symlink=no

use_hostname_sub_directory=yes

base_filename=thisisoverwritten

max_size=1000000000

rotate_period=daily

rotate_hour=0

rotate_minute=5

add_newlines=1

type=file

fs_type=std

file_path=/tmp/scribe-central-hdfs

base_filename=thisisoverwritten

max_size=3000000

(3) null

這也是一種常用的store。用戶可以在配置文件中配置一種叫default的category,如果數據所屬的category沒有在配置文件中設置相應的存儲方式,則該數據會被當做default。如果用戶想忽略這樣的數據,可以將它放入null store中。

其它store的介紹,可參見參考資料1。

需要注意的是,Scribe會將數據首先緩存到buffer中,待buffer滿后再flush到HDFS上。當數據量非常少時,由于緩存的原因, 部分數據可能未寫到HDFS中,這時用戶可以調整scribe的相關配置參數或者關閉scribe(如減小max_size),使數據全部寫到HDFS 中。如果用戶采用減小max_size的方案,此時需要注意,HDFS不能很好的保存小文件(可能會丟失數據,見參考資料3)。

4、  總結

總起來說,scribe為日志收集提供了一種容錯且可擴展的方案。scribe可以從不同數據源,不同機器上收集日志,然后將它們存入一個中央存儲 系統,以便于進一步處理。當采用HDFS作為中央系統時,可以進一步利用Hadoop進行處理數據,于是scribe+HDFS+MapReduce方案 便誕生了。具體如下圖(摘自參考資料2)所示:

Scribe日志收集系統介紹

由于scribe資料比較少,網上討論也不是十分活躍,不少人轉用其它一些日志系統,比如:rsyslog 和 Chukwa。

5、  參考資料

(1)       scribe主頁:https://github.com/非死book/scribe

(2)       scribe介紹 :http://blog.octo.com/en/scribe-a-way-to-aggregate-data-and-why-not-to-directly-fill-the-hdfs/

(3)       HDFS小文件問題:http://www.cloudera.com/blog/2009/02/the-small-files-problem/

(4)       Scribe所有資料的匯總:http://sameerparwani.com/posts/非死book-scribe-server-documentation-and-tutorials

原創文章,轉載請注明: 轉載自董的博客

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!