scribe 架構及其store

2021-05-27 01:40:41 字數 4440 閱讀 2223

1、概述

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

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

2、 架構

如上圖所示,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。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

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資料比較少,網上討論也不是十分活躍,不少人轉用其它一些日誌系統,比如:rsyslog 和 chukwa。

5、  參考資料

(1)       scribe主頁:

(2)       scribe介紹 :

(3)       hdfs小檔案問題:

(4)       scribe所有資料的彙總:

搭建vueX目錄架構 store

index.js store入口 import vue from vue import vuex from vuex import setting from modules setting import user from modules user import getters from gette...

Vuex的引入及其倉庫store的配置

以下是vuex全域性狀態管理,資料共享具體操作 官網 以下是src store index.js頁面的配置 import vue from vue 呼叫 vue 這裡可以分號,也可以不新增分號 import vuex from vuex 呼叫 vuex 外掛程式 這裡可以分號,也可以不新增分號 vu...

常見RNN及其架構

以上內容取自於large pose invariant face recognition usingfeature based recurrent neural network這篇 的內容 這裡是萌萌噠 對於lstm來說,輸入與輸出之間的關係可以有 多對 一 多對多。這裡是萌萌噠 gru gated...