于秦
【摘要】 在信息化及大數(shù)據(jù)時代下,各種應(yīng)用程序的分散及生成的日志信息成爆炸式增長,怎么有效的收集這些日志,并對它進行在線和離線分析,已經(jīng)成為這領(lǐng)域的熱點。我們在現(xiàn)有的Apache Flume、Hadoop等框架下,設(shè)計實現(xiàn)了一種大數(shù)據(jù)日志收集系統(tǒng)。
【關(guān)鍵詞】 Apache Flume 日志收集 Hadoop
大數(shù)據(jù)及互聯(lián)網(wǎng)時代下,為了更有效的管理各種應(yīng)用和系統(tǒng)程序的運行,通過收集它們的日志信息,進行離線和在線分析,來了解它們的運行和安全情況。在信息化及大數(shù)據(jù)下,分布式系統(tǒng)用的越來越多,日志的存儲路徑及分布情況越來越多。為了能更好的聚集存儲分析這些分布式日志,本文基于開源的Apache Flume 、Hadoop 框架下,設(shè)計實現(xiàn)了一種大數(shù)據(jù)分布式的日志收集系統(tǒng),并將收集的日志用于監(jiān)控分析。
一、 Flume
Flume 是一種開源的分布式日志管理架構(gòu),它可以將日志聚集,有可用性高、性能高、事務(wù)管理、失敗重啟等功能。將各個分布式系統(tǒng)上的日志源聚集到一個存儲上,方便日志的統(tǒng)一的分析和處理。數(shù)據(jù)處理速度快,完全可以用于生產(chǎn)環(huán)境[4]。 Flume的核心是agent :(1)agent是一個java進程,運行在日志收集端,通過agent接收日志,然后暫存起來,再發(fā)送到目的地;(2)agent里面包含3個核心組件:source、channel、sink。source 組件是專用于收集日志的,可以處理各種類型各種格式的日志數(shù)據(jù),source組件把數(shù)據(jù)收集來以后,臨時存放在channel中。channel 組件是在agent中專用于臨時存儲數(shù)據(jù)的,channel中的數(shù)據(jù)只有在sink發(fā)送成功之后才會被刪除。sink 組件是用于把數(shù)據(jù)發(fā)送到目的地的組件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定義。在整個數(shù)據(jù)傳輸過程中,流動的是event。事務(wù)保證是在event級別。flume可以支持多級flume的agent,支持扇入(fan-in)、扇出(fan-out)。
二、Morphline
Morphline是由flume的母公司Cloudera開源的一個ETL框架。它用于構(gòu)建、改變基于Hadoop進行 ETL的流式處理程序,流程圖如圖2。Morphline用簡單的配置步驟代替了Java編程。
三、日志收集系統(tǒng)的實現(xiàn)
1、Linux系統(tǒng)及應(yīng)用日志的收集處理。首先我們配置Linux系統(tǒng)下的rsyslog文件實現(xiàn)日志的外發(fā),通過udp或tcp等協(xié)議將日志信息通過設(shè)定的端口發(fā)到所指定IP地址的機器上。然后在安裝有flume的機器上,修改配置文件,設(shè)定source 類型為syslogudp或syslogtcp、端口與外發(fā)端口對應(yīng)。設(shè)置channel的類型,這里常用的主要有filechannel和memorychannel兩種類型,memorychannel具有高的吞吐量,持久化卻比較低,而filechannel提供了這種持久化,保證了數(shù)據(jù)處理的可靠性,但是讀寫速度較慢,我們這里選取memorychannel。最后通過sink 將日志存儲到目的地。這里我們分為兩種存儲外發(fā)方式,一種用于離線分析存儲到Hadoop下的分布式文件系統(tǒng)(HDFS),它具有容錯性高、可擴展、吞吐量高等特征;另一種用于實時數(shù)據(jù)分析處理,將它發(fā)送到Kafka上,通過Storm收集及處理分析數(shù)據(jù)。在這里為了處理的方便,我們利用morphline對日志進行了格式化處理,message域中采用正則表達(dá)式進行格式化處理。
2、Windows系統(tǒng)日志的收集收集處理。由于Windows自身系統(tǒng)沒有轉(zhuǎn)發(fā)功能,我們需要安裝一個agent。我們利用agent把Windows的各類日志轉(zhuǎn)變成syslog日志,最后通過相應(yīng)的協(xié)議轉(zhuǎn)發(fā)到服務(wù)器端。Evtsys用C語言開發(fā)的,它可以將Windows相應(yīng)的日志發(fā)送到syslog服務(wù)器。由于它的高效、快速、輕量等特點,常常被一些高負(fù)載的服務(wù)器所設(shè)計利用。并可以作為Windows服務(wù)存在。我們通過安裝Evtsys工具來實現(xiàn)window系統(tǒng)下日志的外發(fā),通過在命令行中開啟命令就可以在接收端通過flume接收日志進行存儲,設(shè)置如(1)。
3、其他軟件平臺日志的收集收集處理。其他軟件平臺的日志通過安裝相應(yīng)的agent,設(shè)置agent的外發(fā)配置實現(xiàn)flume端的接收收集存儲。
結(jié)論:基于現(xiàn)有日志收集方案下,通過開源軟件Flume設(shè)計實現(xiàn)一種分布式多平臺多系統(tǒng)收集多種日志的系統(tǒng)。本系統(tǒng)具有高吞吐量、可擴展性強、高聚合等特征,還通過morphine將message域進行分割便于提取有關(guān)信息,實現(xiàn)日志的集中存儲,方便數(shù)據(jù)的分析,同時為實時和離線數(shù)據(jù)分析提供數(shù)據(jù)。
參 考 文 獻(xiàn)
[1] 詹玲,馬駿,陳伯江,陳維梁,呂睿.分布式I/O日志收集系統(tǒng)的設(shè)計與實現(xiàn)[J]. 計算機工程與應(yīng)用. 2010(36)
[2] 宋愛青.基于Hadoop的日志分析系統(tǒng)的設(shè)計與實現(xiàn)[D]. 中國地質(zhì)大學(xué)(北京) 2012
[3] 孫寅林.基于分布式計算平臺的海量日志分析系統(tǒng)的設(shè)計與實現(xiàn)[D]. 西安電子科技大學(xué) 2012
[4] Apache Flume. http://flume.apache.org/ .
[5]Morphline.http://kitesdk.org/