基于Flume+Log4j+Kafka的日志采集架構(gòu)方案

本文將會介紹如何使用 Flume乃沙、log4j展辞、Kafka進行規(guī)范的日志采集铅鲤。

Flume 基本概念

Flume是一個完善划提、強大的日志采集工具,關(guān)于它的配置邢享,在網(wǎng)上有很多現(xiàn)成的例子和資料鹏往,這里僅做簡單說明不再詳細贅述。

Flume包含Source骇塘、Channel伊履、Sink三個最基本的概念:


Source——日志來源,其中包括:Avro Source款违、Thrift Source唐瀑、Exec Source、JMS Source插爹、Spooling Directory Source哄辣、Kafka Source、NetCat Source赠尾、Sequence Generator Source力穗、Syslog Source、HTTP Source气嫁、Stress Source当窗、Legacy Source、Custom Source寸宵、Scribe Source以及Twitter 1% firehose Source崖面。

Channel——日志管道,所有從Source過來的日志數(shù)據(jù)都會以隊列的形式存放在里面梯影,它包括:Memory Channel巫员、JDBC Channel、Kafka Channel甲棍、File Channel疏遏、Spillable Memory Channel、Pseudo Transaction Channel、Custom Channel财异。

Sink——日志出口,日志將通過Sink向外發(fā)射唱遭,它包括:HDFS Sink戳寸、Hive Sink、Logger Sink拷泽、Avro Sink疫鹊、Thrift Sink、IRC Sink司致、File Roll Sink拆吆、Null Sink、HBase Sink脂矫、Async HBase Sink枣耀、Morphline Solr Sink、Elastic Search Sink庭再、Kite Dataset Sink捞奕、Kafka Sink、Custom Sink拄轻。

基于Flume的日志采集是靈活的颅围,我們可以看到既有Avro Sink也有Avro Source,既有Thrift Sink也有Thrift Source恨搓,這意味著我們可以將多個管道處理串聯(lián)起來院促,如下圖所示:


串聯(lián)的意義在于,我們可以將多個管道合并到一個管道中最終輸出到同一個Sink中去斧抱,如下圖:


上面講述了Source和Sink的作用常拓,而Channel的作用在于處理不同的Sink,假設(shè)我們一個Source要對應(yīng)多個Sink夺姑,則只需要為一個Source建立多個Channel即可墩邀,如下所示:


rce如果想要輸出到多個Sink中去,就需要建立多個Channel進行介入并最終輸出盏浙,通過上面這幾張圖眉睹,我們可以很好的理解Flume的運行機制,我們在這里也就點到為止废膘,詳細的配置可以在官網(wǎng)或者在網(wǎng)上搜索到竹海、查看到。

一般情況下丐黄,我們使用 Exec Source對log文件進行監(jiān)控斋配,這樣做確實是比較簡單,但是并不方便,我們需要在每一臺要監(jiān)控的服務(wù)器上部署Flume艰争,對運維來講萬一目標日志文件發(fā)生IO異常(例如格式改變坏瞄、文件名改變、文件被鎖)甩卓,也是很痛苦的鸠匀,因此我們最好能讓日志直接通過Socket發(fā)送出去,而不是存放在本地逾柿,這樣一來缀棍,不僅降低了目標服務(wù)器的磁盤占用,還能夠有效的防止文件IO異常机错,而Kafka就是一個比較好的解決方案爬范,具體的架構(gòu)如下圖所示:


由上圖可以看到,日志最終流向了兩個地方:HBase Persistence和Realtime Processor弱匪,而至于為什么不用Kafka直接與Storm進行通信的原因是為了將Sotrm邏輯和日志源通過Flume進行隔離青瀑,在Storm中對日志進行簡單的分析后,將結(jié)果扔進 Rabbit MQ 中供 WEB APP消費痢法。

HBase Persistence就是將原始的日志記錄在HBase中以便回檔查詢狱窘,而Realtime Processor則包含了實時的日志統(tǒng)計以及錯誤異常郵件提醒等功能。

為了能夠準確的捕獲到異常數(shù)據(jù)财搁,我們還需要對程序進行一些規(guī)范化的改造蘸炸,例如提供統(tǒng)一的異常處理句柄等等。

日志輸出格式

{"timeMillis" : 1462712870612,"thread" : "main","level" : "FATAL","loggerName" : "com.banksteel.log.demo.log4j2.Demo","message" : "發(fā)生了一個可能會影響程序繼續(xù)運行下去的異常尖奔!","thrown": {"commonElementCount" : 0,"localizedMessage" : "錯誤消息啊","message" : "錯誤消息啊","name" : "java.lang.Exception","extendedStackTrace": [ {"class" : "com.banksteel.log.demo.log4j2.Demo","method" : "main","file" : "Demo.java","line" : 20,"exact" :true,"location" : "classes/","version" : "?"}, {"class" : "sun.reflect.NativeMethodAccessorImpl","method" : "invoke0","file" : "NativeMethodAccessorImpl.java","line" : -2,"exact" :false,"location" : "?","version" : "1.7.0_80"}, {"class" : "sun.reflect.NativeMethodAccessorImpl","method" : "invoke","file" : "NativeMethodAccessorImpl.java","line" : 57,"exact" :false,"location" : "?","version" : "1.7.0_80"}, {"class" : "sun.reflect.DelegatingMethodAccessorImpl","method" : "invoke","file" : "DelegatingMethodAccessorImpl.java","line" : 43,"exact" :false,"location" : "?","version" : "1.7.0_80"}, {"class" : "java.lang.reflect.Method","method" : "invoke","file" : "Method.java","line" : 606,"exact" :false,"location" : "?","version" : "1.7.0_80"}, {"class" : "com.intellij.rt.execution.application.AppMain","method" : "main","file" : "AppMain.java","line" : 144,"exact" :true,"location" : "idea_rt.jar","version" : "?"} ]

},"endOfBatch" :false,"loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger","source": {"class" : "com.banksteel.log.demo.log4j2.Demo","method" : "main","file" : "Demo.java","line" : 23}

}

我們看到搭儒,這種格式,無論用什么語言都能輕松解析了提茁。

日志框架的Kafka集成

我們這里只用log4j 1.x 和 log4j 2.x 進行示例淹禾。

http://www.linuxidc.com/Linux/2016-05/131402.htm

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茴扁,隨后出現(xiàn)的幾起案子铃岔,更是在濱河造成了極大的恐慌,老刑警劉巖峭火,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毁习,死亡現(xiàn)場離奇詭異,居然都是意外死亡卖丸,警方通過查閱死者的電腦和手機纺且,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稍浆,“玉大人载碌,你說我怎么就攤上這事猜嘱。” “怎么了嫁艇?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵朗伶,是天一觀的道長。 經(jīng)常有香客問我步咪,道長腕让,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任歧斟,我火速辦了婚禮,結(jié)果婚禮上偏形,老公的妹妹穿的比我還像新娘静袖。我一直安慰自己,他們只是感情好俊扭,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布队橙。 她就那樣靜靜地躺著,像睡著了一般萨惑。 火紅的嫁衣襯著肌膚如雪捐康。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天庸蔼,我揣著相機與錄音解总,去河邊找鬼。 笑死姐仅,一個胖子當(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
  • 我被黑心中介騙來泰國打工厌均, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饺鹃。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓莫秆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親悔详。 傳聞我的和親對象是個殘疾皇子镊屎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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