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