天天看點

Flume日志采集系統——初體驗(Logstash對比版)

這兩天看了一下Flume的開發文檔,并且體驗了下Flume的使用。

本文就從如下的幾個方面講述下我的使用心得:

初體驗——與Logstash的對比

安裝部署

啟動教程

參數與執行個體分析

Flume的配置是真繁瑣,source,channel,sink的關系在配置檔案裡面交織在一起,沒有Logstash那麼簡單明了。

Flume日志采集系統——初體驗(Logstash對比版)

Flume與Logstash相比,我個人的體會如下:

Logstash比較偏重于字段的預處理;而Flume偏重資料的傳輸;

Logstash有幾十個插件,配置靈活;FLume則是強調使用者的自定義開發(source和sink的種類也有一二十個吧,channel就比較少了)。

Logstash的input和filter還有output之間都存在buffer,進行緩沖;Flume直接使用channel做持久化(可以了解為沒有filter)

Logstash中:

input負責資料的輸入(産生或者說是搜集,以及解碼decode);

Filter負責對采集的日志進行分析,提取字段(一般都是提取關鍵的字段,存儲到elasticsearch中進行檢索分析);

output負責把資料輸出到指定的存儲位置(如果是采集agent,則一般是發送到消息隊列中,如kafka,redis,mq;如果是分析彙總端,則一般是發送到elasticsearch中)

Flume日志采集系統——初體驗(Logstash對比版)

在Logstash比較看重input,filter,output之間的協同工作,是以多個輸入會把資料彙總到input和filter之間的buffer中。filter則會從buffer中讀取資料,進行過濾解析,然後存儲在filter于output之間的Buffer中。當buffer滿足一定的條件時,會觸發output的重新整理。

在Flume中:

source 負責與Input同樣的角色,負責資料的産生或搜集(一般是對接一些RPC的程式或者是其他的flume節點的sink)

channel 負責資料的存儲持久化(一般都是memory或者file兩種)

sink 負責資料的轉發(用于轉發給下一個flume的source或者最終的存儲點——如HDFS)

Flume日志采集系統——初體驗(Logstash對比版)

Flume比較看重資料的傳輸,是以幾乎沒有資料的解析預處理。僅僅是資料的産生,封裝成event然後傳輸。傳輸的時候flume比logstash多考慮了一些可靠性。因為資料會持久化在channel中(一般有兩種可以選擇,memoryChannel就是存在記憶體中,另一個就是FileChannel存儲在檔案種),資料隻有存儲在下一個存儲位置(可能是最終的存儲位置,如HDFS;也可能是下一個Flume節點的channel),資料才會從目前的channel中删除。這個過程是通過事務來控制的,這樣就保證了資料的可靠性。

不過flume的持久化也是有容量限制的,比如記憶體如果超過一定的量,也一樣會爆掉。

預設flume是不支援windows的,沒有bat的啟動指令。不過有一個flume-ng.cmd,其實它也不是啟動檔案,隻是啟動了一個powershell而已,如果你本地有這個軟體,就可以在windows下運作了。

存放了啟動腳本

啟動所需的所有元件jar包

提供了幾個測試配置檔案

文檔

跟日志輸出有關的一個jar包(不知道有什麼不同)

然後在flume目錄下,輸入下面的指令:

然後就可以看到滿屏滾動的資訊了!

注意:上面啟動指令沒一個字母是廢話!

你可以輸入<code>flume-ng help</code> 獲得幫助提示:

這裡就挑重要的參數将了:

這個是很重要的參數,因為flume可以使用不同的角色啟動,比如agent以及client等等。暫時搞不清楚avro-client有什麼特殊的,先了解一下吧!平時啟動就使用agent就可以了。

--conf 或者 -c ,指定去conf目錄下加載配置檔案

--classpath 或者 -C,指定類加載的路徑(不知道為什麼我下載下傳flume版本啟動的時候找不到log4j配置,隻能加上 <code>-C .</code>才能啟動!)

-Dproperty=value 這個參數比較重要,比如logger就需要它來指定傳輸的級别等資訊。如果沒有這個參數,logger就不好使了。

其中最終要的就是 --name 或者 -n ,它指定了啟動agent的名稱,注意是啟動agent的名稱。

這個名稱必須與配置檔案中的一樣

重要的事情重複三遍!

如果寫錯了!一段小異常就跑來了~(比如我配置檔案中為agent,啟動指令中寫agent123)

另外,就是通過--conf-file 或者 -f 指定配置檔案。如果配置檔案放在conf,也等同于--conf。

參數就介紹到這裡了。