分布式日志收集系統: 非死book Scribe之配置文件

上一篇文章介紹了一些關于scribe的基礎知識,也是自己在公司內部分享的一些內容,當時公司很多同事也積極與我溝通,沒想到網上也有這么多人關注,下面幾篇文章繼續分享一些自己研究scribe的一些成果和心得吧!

    其實我們研究一個開源的系統,第一步通常是先把它用起來,因為一個開源的系統能夠出現在大家的面前肯定是比較出名和流行的,所有功能是比較出色的。所以我們必須很清楚的這些功能,而scribe最大的特點就是配置文件,它強大的功能全部通過配置文件來配置實現的,今天就簡單介紹scribe的配置文件。

scribe配置文件詳解

1.全局配置項

(1)port:指示scribe服務器在哪一個端口上監聽,默認是0,通過命令行參數選項-P可以指定端口,也能夠通過配置文件指定。在源代碼中就賦值給變量port。

(2)max_msg_per_second:默認值是0,如果這個參數值是0將被忽略。隨著最近的改變這個參數很少被關聯使用到,max_queue_size參數將被應用到限制每秒最大的消息數。在scribeHandler::throttleDeny被使用。

(3)max_queue_size(按字節):接收消息的隊列的最大字節,默認是5,000,000字節。在scribeHandler::Log使用。

(4)check_interval(秒):用于控制多長時間檢查一次存儲,默認值是5.

(5)new_thread_per_category(是/否):如果為是,將為每一個分類場景創建一個新的線程,否則將創一個單線程為每一個在配置文件中定義的存儲。對于前綴存儲或默認存儲,如果這個參數設置成“否”將導致所有匹配這個分類的消息都由一個單獨的存儲來處理。否則將為每一個唯一的分類名創建一個新的存儲。默認為“是”。

(6)num_thrift_server_threads:為接收消息的監聽線程數量,默認是3.

(7)max_conn:最大的鏈接數。

2.存儲配置

         Scribe服務器決定怎樣將日志消息寫入是基于在配置中定義的存儲類型和相關參數設置,每一個存儲都必須指定一個消息分類來處理三種異常。

(1)默認存儲:默認分類處理任何不能被其他存儲處理的分類,這兒僅僅能夠有一個默認存儲。

(2)前綴存儲:如果指定分類以一個*結尾,這個存儲將處理所有以指定前綴開頭的分類。

(3)多個類別:在一個存儲定義中能夠使用‘categories=’創建多個類別。

在上面三種情況下,在文件存儲中將為每一個唯一的分類創建一個子目錄(除非new_thread_per_category被設置為false)。

3.存儲配置變量

(1)category:決定哪些消息被這個存儲處理。

(2)type:存儲類型,有file、buffer、network、bucket、thriftfile、null、mutil。

(3)target_write_size:默認是16,384字節,決定在這些消息處理之前在給定分類的消息隊列可以增長到多大。

(4)max_batch_size: 默認1,024,000字節(可能沒有被開源),決定在內存存儲隊列中一次能夠被處理的數據的總數,這個(加上緩沖文件旋轉的大小)控制多大的一個thrift調用可行。

(5)max_write_interval:默認是10秒,決定在這些消息處理之前在給定分類的消息隊列可以用多長時間。

(6)must_succeed(yes/no):是否必須成功,如果一個存儲處理消息失敗是否重新進入消息隊列排隊,如果設置成 ‘no’,且一個存儲不能處理這些消息,消息將被丟棄。默認是yes。強烈建議使用緩存來指一個定二級存儲來處理失敗的日志。

4.file存儲配置

         File存儲寫入消息到一個文件。

(1)file_path:文件路徑,默認是“/tmp”。

(2)base_filename:基本文件名稱,默認是分類名稱。

(3)use_hostname_sub_directory(yes/no):使用服務器的主機名創建一個子目錄,默認是no。

(4)sub_directory:使用指定的名稱創建一個子目錄。

(5)rotate_period:文件創建周期,取值可以是 “hourly”, “daily”, “never”,或者是name[后綴], “never”是默認值,決定多長時間創建一個新文件,特別的后綴“s”, “m”, “h”, “d”, “w”分別代表second(默認)、minutes、hours、days和weeks。

(6)rotate_hour:取值0-23,默認是1,如果rotate_period取值是daily,這個就決定每天的什么時候創建新文件。

(7)rotate_minute:取值0-59,默認是15,如果rotate_period設置為daily或hourly,這個就決定以一個小時過后多久創建一個新文件。

(8)max_size:文件上限大小,默認1,000,000,000多字節,決定在輪流創建一個新文件以前一個文件能夠增長到多大。

(9)write_meta:取值yes或其他任何,false為默認值,如果文件被旋轉,最后一行將包含“scribe_meta”,跟著就是下一個文件名。

(10)fs_type:文件類型,支持“std”和“hdfs”兩種格式,“std”為默認值。

(11)chunk_size:默認值是0,如果一個塊大小被指定,在文件內沒有消息能夠跨越塊的邊界,除非有消息的大小超過塊的大小。

(12)add_newlines:取值0或1,默認是0,如果設置為1,以后的每一個消息都寫入一個新行。

(13)create_symlink:yes或其他任何,默認是yes。如果為yes,將保持一個符號鏈接指向最近一個被寫入的文件。

(14)write_stats:yes/no,默認是yes。是否創建一個scribe_stats文件為每一個存儲來保持文件寫入的軌跡。

(15)max_write_size:默認是1000000字節。File存儲將嘗試按max_write_size字節的塊大小刷新數據到文件系統。max_write_size的大小不能超過max_size。由于 target_write_size一定數量的消息被緩存。那么文件存儲被調用來保持這些消息。File_store以一次性至少 max_write_size大小字節的塊來保存這些消息。File存儲的最后一次寫入比max_write_size小;

(16)write_category:寫入一個分類下面;

(17)rotate_on_reopen:循環重新打開。

5.network存儲配置

         Network存儲向其他scribe服務器發送消息。Scribe保持持久的鏈接打開以至于它能夠發送消息。(為了錯誤信息或者如果下游機器過載,它將重新打開一個鏈接)。在正常運行的情況下,scribe會基于當前緩存中存在多少條消息等待發送而分批次的發送。(如果scribe備份和緩存消息到本地磁盤,scribe會基于緩存文件大小按塊發送消息)

(1)remote_host:發送消息的遠程主機的名稱或IP地址。

(2)remote_port:在遠程主機上的端口。

(3)timeout:socket超時,MS為單位,默認是DEFAULT_SOCKET_TIMEOUT_MS, 在store.h中被設置為5000。

(4)use_conn_pool:yes或者任何其他,默認是false。是否使用連接池代替為每一個遠程主機打開的鏈接。

(5)smc_service:

(6)service_options:

(7)service_cache_timeout:

(8)ignore_network_error:

(9)dynamic_config_type:

6.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,另一個是null。

(1)max_queue_length:默認2,000,000條消息。如果在隊列中的消息數量超過了這個值,buffer存儲將切換寫入secondary store。

(2)buffer_send_rate:默認值是1。決定每一次check_interval內,多少次從secondary store讀出一組消息并且發送到primary store中。

(3)retry_interval:默認是300秒。在寫primary store失敗以后等待多長時間重新發送到primary store。

(4)retry_interval_range:默認是60秒。將在指定retry_interval區間內隨機的選擇一個重新發送時間區間。

(5)replay_buffer:取值yes/no,默認是yes。如果設置為 ‘no’,buffer存儲不能從secondary store移除消息并且發送到primary store中去。

7.bucket存儲配置

         Bucket存儲使用每個帶前綴的消息作為key寫入到多個文件中去。能夠定義一個隱藏的或明確的bucket。定義隱藏的bucket必須要有一個名稱是 “bucket” 子bucket,這個子bucket可以是file存儲、network存儲或者thriftfile存儲。

(1)num_buckets:hash進入的bucket個數,默認是1。不能被hash進入任何bucket的消息將被放入一個特別的0號bucket。

(2)bucket_type: 取值是“key_hash”, “key_modulo”, 或者 “random”。

(3)delimiter:必須是1-255之間的ascii代碼,否則默認是 ‘:’。第一次出現在消息前綴中的delimiter在‘hash/modulo’中將被用作key。Random不使用這個delimiter。

(4)remove_key:取值yes/no,默認是是no。是否從消息中移除key前綴。

(5)bucket_subdir:如果使用的是一個單獨定義的bucket,每一個子目錄的名稱根據bucket的數量編號生成。

8.null存儲配置

         忽略被給分類的所有消息。沒有參數。

9.mutil存儲配置

         一個mutil存儲是將所有消息轉發到子存儲中去的一個存儲。一個mutil存儲可能有多個名叫“store0”, “store1”, “store2”等等的子存儲。

         (1)report_success:取值 “all” or “any”, 默認是 “all”。是否所有substores或任何substores必須成功地記錄消息,以報告為成功的消息記錄在日志消息

10.thriftfile存儲配置

         Thriftfile存儲類似于file存儲,出了thriftfile存儲是用Thrift TFileTransport file存儲消息。

(1)file_path:文件路徑,默認是“/tmp”。

(2)base_filename:基本文件名稱,默認是分類名稱。

(3)rotate_period:文件創建周期,取值可以是 “hourly”, “daily”, “never”,或者是name[后綴], “never”是默認值,決定多長時間創建一個新文件,特別的后綴“s”, “m”, “h”, “d”, “w”分別代表second(默認)、minutes、hours、days和weeks。

(4)rotate_hour:取值0-23,默認是1,如果rotate_period取值是daily,這個就決定每天的什么時候創建新文件。

(5)rotate_minute:取值0-59,默認是15,如果rotate_period設置為daily或hourly,這個就決定以一個小時過后多久創建一個新文件。

(6)max_size:文件上限大小,默認1,000,000,000多字節,決定在輪流創建一個新文件以前一個文件能夠增長到多大。

(7)fs_type:文件類型,當前只支持“std”,“std”為默認值。

(8)chunk_size:默認值是0,如果一個塊大小被指定,在文件內沒有消息能夠跨越塊的邊界,除非有消息的大小超過塊的大小。

(9)create_symlink:yes或其他任何,默認是yes。如果為yes,將保持一個符號鏈接指向最近一個被寫入的文件。

(10)flush_frequency_ms:毫秒單位,如果沒有指定就使用默認300的 TFileTransport。決定一步到thrift file磁盤時間的頻率。

(11)msg_buffer_size:以字節為單位,如果沒有指定將使用默認為0的TFileTransport。如果非零,將拒絕寫入比這個值大的。

11.總結:今天把基本上所有配置文件選項的意義簡單介紹一下,要深入理解這些參數的意義還必須要深入到源代碼去,還在scribe的源代碼比較簡單,很快就可以全面的深入的分析了,下一篇就自己分析的一些簡單流程介紹一下,需要深入到還是直接源代碼最好。源碼之前,了無密碼!

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