分布式日志采集工具技術(shù)選型方案

大數(shù)據(jù)的數(shù)據(jù)采集是大數(shù)據(jù)技術(shù)中非常重要、基礎(chǔ)的部分绵估,數(shù)據(jù)不會平白無故地跑到我們的數(shù)據(jù)平臺中,我們得用什么東西把它從現(xiàn)有的設(shè)備(比如服務(wù)器卡骂,路由器国裳、交換機(jī)、防火墻偿警、數(shù)據(jù)庫等)中采集過來躏救,再傳輸?shù)綌?shù)據(jù)平臺中,后面才有更加復(fù)雜的高難度的處理技術(shù)螟蒸。

在采集過程中盒使,如何應(yīng)對數(shù)據(jù)多樣性、數(shù)據(jù)量大七嫌、變化快等特點少办,如何保證數(shù)據(jù)采集的可靠性、性能诵原,如何避免重復(fù)數(shù)據(jù)英妓,如何保證數(shù)據(jù)質(zhì)量,如何降低資源成本绍赛,這些都是大數(shù)據(jù)采集面臨的難點問題蔓纠,所以,選擇一款合適的采集工具至關(guān)重要吗蚌。

目前腿倚,F(xiàn)lume和Logstash是比較主流的數(shù)據(jù)采集工具(主要用于日志采集)星瘾,以下將對這兩款工具進(jìn)行詳細(xì)介紹以及對比選型西乖。

首先介紹數(shù)據(jù)采集的通用模型滞详,如圖:


其中澄惊,數(shù)據(jù)采集和存儲是必要的環(huán)節(jié),其他并不一定需要硬贯。但這只是一個粗略的通用模型焕襟,不同開源社區(qū)或者廠家開發(fā)時都會有自己的考慮和目的。Flume和Logstash原則上都屬于數(shù)據(jù)采集這個范疇饭豹,但是兩者在技術(shù)上或多或少都自帶了一些緩沖鸵赖、過濾等功能。

一墨状、歷史簡介

Logstash:

Logstash誕生于2009年8月卫漫,2013年被ElasticSearch公司收購。Logstash是一個分布式日志收集框架肾砂,開發(fā)語言是JRuby列赎,經(jīng)常與ElasticSearch,Kibana配合使用組成著名的ELK技術(shù)棧镐确,所謂ELK就是ElasticSearch包吝、

Logstash、Kibana這三個組件(ES負(fù)責(zé)數(shù)據(jù)的存儲和索引源葫,Logstash負(fù)責(zé)數(shù)據(jù)采集和過濾轉(zhuǎn)換诗越,Kibana則負(fù)責(zé)圖形界面處理),后來這三個組件又先后被Elastic.co公司收購息堂。

Logstash非常適合做日志數(shù)據(jù)的采集嚷狞,可以采用ELK組合使用,也可以作為日志收集軟件單獨出現(xiàn)荣堰,單獨出現(xiàn)時可將日志存儲到多種存儲系統(tǒng)或臨時中轉(zhuǎn)系統(tǒng)床未,如MySQL,redis振坚,kakfa薇搁,HDFS, lucene,solr等渡八,并不一定是ElasticSearch啃洋。

Flume:

Flume誕生于2010年,最早由Cloudrea開發(fā)屎鳍,是一個高可用宏娄,高可靠,的分布式海量日志采集系統(tǒng)逮壁,支持定制各類數(shù)據(jù)發(fā)送方绝编,一般和 kafka 訂閱消息系統(tǒng)搭配較多。其設(shè)計原理也是基于將數(shù)據(jù)流,如日志數(shù)據(jù)從各種網(wǎng)站服務(wù)器上匯集起來存儲到HDFS十饥,HBase等集中存儲系統(tǒng)中。Flume目前有兩個版本祖乳,OG和NG逗堵,區(qū)別很大,初始的發(fā)行版本叫做FlumeOG眷昆,后被apache收購蜒秤,改名為Apache Flume,收購重構(gòu)后的版本統(tǒng)稱為

Flume NG(next generation下一代的意思)亚斋;所以現(xiàn)在Flume已經(jīng)是ApacheETL工具集中的一員作媚。

結(jié)論:兩者最初的設(shè)計目的就不太一樣。Flume本身最初設(shè)計的目的是為了把數(shù)

據(jù)傳入HDFS中(并不是為了采集日志而設(shè)計帅刊,這和Logstash有根本的區(qū)別)纸泡,所以理所應(yīng)當(dāng)側(cè)重于數(shù)據(jù)的傳輸,程序員要非常清楚整個數(shù)據(jù)的路由赖瞒,并且比Logstash還多了一個可靠性策略女揭,上文中的channel就是用于持久化目的,數(shù)據(jù)除非確認(rèn)傳輸?shù)较乱晃恢昧死敢駝t不會刪除吧兔,這一步是通過事務(wù)來控制的,這樣的設(shè)計使得可靠性非常好袍嬉。相反境蔼,Logstash則明顯側(cè)重對數(shù)據(jù)的預(yù)處理,因為日志的字段需要大量的預(yù)處理伺通,為解析做鋪墊箍土。

二、系統(tǒng)架構(gòu)

Logstash:

Logstash的設(shè)計非常規(guī)范泵殴,有三個組件涮帘,分工如下:

1、Shipper:負(fù)責(zé)日志收集笑诅。職責(zé)是監(jiān)控本地日志文件的變化调缨,并輸出到

Redis 緩存起來;

2吆你、Broker 可以看作是日志集線器弦叶,可以連接多個 Shipper 和多個 Indexer;

3妇多、Indexer 負(fù)責(zé)日志存儲伤哺。在這個架構(gòu)中會從 Redis 接收日志,寫入到本地文

件。

因為架構(gòu)比較靈活立莉,所以如果不想用 Logstash 的存儲绢彤,也可以對接到Elasticsearch,這也就是前面所說的 ELK 的套路了蜓耻。


如果繼續(xù)細(xì)分茫舶,Logstash也可以這么解剖來看


所以Logstash就是這么簡約,全部將代碼集成刹淌,程序員不需要關(guān)心里面是如何運轉(zhuǎn)的饶氏。

Logstash最值得一提的是,在Filter plugin部分具有比較完備的功能有勾,比如grok疹启,能通過正則解析和結(jié)構(gòu)化任何文本,Grok 目前是Logstash最好的方式對非結(jié)構(gòu)化日志數(shù)據(jù)解析成結(jié)構(gòu)化和可查詢化蔼卡。此外喊崖,Logstash還可以重命名、刪除菲宴、替換和修改事件字段贷祈,當(dāng)然也包括完全丟棄事件,如debug事件喝峦。

還有很多的復(fù)雜功能供程序員自己選擇势誊,你會發(fā)現(xiàn)這些功能Flume是絕對沒有(以它的輕量級線程也是不可能做到的)。當(dāng)然谣蠢,在input和output兩個插件部分也具有非常多類似的可選擇性功能粟耻,程序員可以自由選擇,這一點跟Flume是比較相似的眉踱。

Flume:

下圖是Flume NG的架構(gòu)圖:


Flume 從原理上看很簡單挤忙,三段式的結(jié)構(gòu):源(Source輸入)—存儲(Channel管道)—出口(Sink目標(biāo)輸出)。但也因為涉及到這三個結(jié)構(gòu)谈喳,所以做配置就比較復(fù)雜册烈,這里舉個例子,看看Flume在一些場景下是如何搭建布置的婿禽,如下圖是Flume的集群部署:

Flume支持一個Agent中有多個不同類型的channel和sink赏僧,我們可以選擇把

Source的數(shù)據(jù)復(fù)制,分發(fā)給不同的目的端口扭倾,如下圖(Flume的多重復(fù)使用):


其次淀零,F(xiàn)lume還自帶了分區(qū)和攔截器功能,所以Flume也是有過濾功能的膛壹,只是Flume的過濾功能比較弱驾中。Flume在集群中最擅長的事情就是做路由了唉堪,因為每一個Flume Agent相連就構(gòu)成了一條鏈路,這也是眾多采集工具中Flume非常出色的亮點肩民。但是也正因為如此唠亚,如果有一個Flume Agent出了問題,那么整個鏈路也會出現(xiàn)問題此改,所以在集群中需要設(shè)計分層架構(gòu)等來實現(xiàn)冗余備份趾撵。但這么一來,配置又會變得很麻煩共啃。

結(jié)論:我們會驚人的發(fā)現(xiàn),兩者是多么的相似暂题!Logstash的Shipper移剪、

Broker、Indexer分別和Flume的Source薪者、Channel纵苛、Sink各自對應(yīng)!只不過是Logstash集成了言津,Broker可以不需要攻人,而Flume需要單獨配置,且缺一不可悬槽,但這再一次說明了計算機(jī)的設(shè)計思想都是通用的怀吻!只是實現(xiàn)方式會不同而已。

三初婆、開發(fā)配置

從程序員的角度來說蓬坡,F(xiàn)lume配置比較繁瑣,你需要分別作source磅叛、channel屑咳、sink的手工配置,而且涉及到復(fù)雜的數(shù)據(jù)采集環(huán)境弊琴,你可能還要做多個配置兆龙,而Logstash的配置就非常簡潔清晰,三個部分的屬性都定義好了敲董,程序員自己去選擇就行紫皇,就算沒有,也可以自行開發(fā)插件臣缀,非常方便坝橡。當(dāng)然了,F(xiàn)lume的插件也很多精置,但Channel就只有內(nèi)存和文件這兩種(其實現(xiàn)在不止了计寇,但常用的也就兩種)。讀者可以看得出來,兩者其實配置都是非常靈活的番宁,只不過看場景取舍罷了元莫。

四、性能蝶押、可靠性

因為Logstash內(nèi)部是沒有persist queue(打印隊列)的機(jī)制踱蠢,所以在異常情況下,可能出現(xiàn)數(shù)據(jù)丟失的問題棋电。所以選擇Logstash一般認(rèn)為這個日志可能不重要茎截。而Flume在高可用(可靠性)方面做得比較好,有自己的內(nèi)部機(jī)制確保這個問題赶盔,所以可以用于一些更重要的業(yè)務(wù)日志場景下企锌。

性能上Logstash要高于Flume,因為Flume運用了一套安全機(jī)制,犧牲了部分性能于未。

五撕攒、插件

Logstash插件豐富,有幾十個插件烘浦,而且配置靈活抖坪,所以在擴(kuò)展功能上比較全面。Flume沒有豐富的插件闷叉,主要靠二次開發(fā)(其實source和sink的種類也有一二十個擦俐,channel就比較少了);

六片习、市場占有率級使用平臺

logstash是用的最多的捌肴,github上有4000+ stars,因為它好在有一套完整的日志收集(logstash)藕咏、日志存儲(elasticsearch)状知、日志展示分析(kibana)套件,搭建起來非常方便孽查。

Logstash用戶:

Flume用戶:美團(tuán)

七饥悴、總結(jié)

Logstash:

1、內(nèi)部沒有一個persist queue(打印隊列)盲再,異常情況可能會丟失部分?jǐn)?shù)據(jù)西设;

2、由ruby編寫答朋,需要ruby環(huán)境贷揽,插件很多;

3梦碗、偏重數(shù)據(jù)的預(yù)處理禽绪,為數(shù)據(jù)解析做鋪墊蓖救;

4、插件豐富印屁,Logstash有幾十個插件循捺,配置靈活;

5雄人、Logstash的input和Fillter還有output之間都存在buffer从橘,進(jìn)行緩沖;

6础钠、有ELK套件恰力,技術(shù)成熟,使用場景廣泛旗吁,但比較重量級

Flume:

1.分布式高可靠高可用的數(shù)據(jù)采集系統(tǒng)牺勾,高效的從不同數(shù)據(jù)源收集、聚合阵漏、遷移數(shù)據(jù)到一個集中的數(shù)據(jù)存儲;

2翻具、側(cè)重數(shù)據(jù)傳輸履怯,使用基于事務(wù)的數(shù)據(jù)傳遞方式保證事件傳遞的可靠性,確保不會丟數(shù)據(jù)裆泳,用于重要日志場景叹洲;

3、由java開發(fā)工禾,沒有豐富的插件运提,主要靠二次開發(fā)(source和sink的種類也有一二十個,channel就比較少了)闻葵;

4民泵、輕量級線程,輕量級框架槽畔,以配置文件為中心栈妆,提供了JavaAPI;

5厢钧、安裝部署比較復(fù)雜鳞尔,配置繁瑣,source早直,channel寥假,sink三大組件都需要配置;

6.三層架構(gòu):source霞扬、channel糕韧、sink枫振,是一個完整的基于插件的架構(gòu),有獨立開發(fā)的第三方插件兔沃;

7蒋得、Flume直接使用channel做持久化(可以理解為沒有filter)最后,flume是apache的乒疏,可以使用hadoop的hdfs额衙,后端分析用MapReduce,選擇靈活多樣怕吴,而Logstash其實更有點像通用的模型窍侧,讓一切都變的簡單,所以對新人來說理解起來更簡單转绷;Logstash就像是買來的臺式機(jī)伟件,主板、電源议经、硬盤斧账,機(jī)箱(Logstash)把里面的東西全部裝好了,你可以直接用煞肾,當(dāng)然也可以自己組裝修改咧织;Flume就像提供給你一套完整的主板,電源籍救、硬盤习绢,F(xiàn)lume沒有打包,只是像說明書一樣指導(dǎo)你如何組裝蝙昙,才能運行的起來闪萄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市奇颠,隨后出現(xiàn)的幾起案子败去,更是在濱河造成了極大的恐慌,老刑警劉巖大刊,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件为迈,死亡現(xiàn)場離奇詭異,居然都是意外死亡缺菌,警方通過查閱死者的電腦和手機(jī)葫辐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伴郁,“玉大人耿战,你說我怎么就攤上這事『父担” “怎么了剂陡?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵狈涮,是天一觀的道長。 經(jīng)常有香客問我鸭栖,道長歌馍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任晕鹊,我火速辦了婚禮松却,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溅话。我一直安慰自己晓锻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布飞几。 她就那樣靜靜地躺著砚哆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屑墨。 梳的紋絲不亂的頭發(fā)上躁锁,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音卵史,去河邊找鬼灿里。 笑死,一個胖子當(dāng)著我的面吹牛程腹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播儒拂,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼寸潦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了社痛?” 一聲冷哼從身側(cè)響起见转,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒜哀,沒想到半個月后斩箫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡撵儿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年乘客,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淀歇。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡易核,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浪默,到底是詐尸還是另有隱情牡直,我是刑警寧澤缀匕,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站碰逸,受9級特大地震影響乡小,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饵史,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一满钟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧约急,春花似錦零远、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奴饮,卻和暖如春纬向,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背戴卜。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工逾条, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人投剥。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓师脂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親江锨。 傳聞我的和親對象是個殘疾皇子吃警,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容