

摘 要:隨著互聯網技術的快速發展和Web2.0技術的逐漸成熟,各種應用程序在運行過程中所產生的日志的數量呈爆炸式增長。如何高效的收集海量的日志數據,成為了一個亟需解決的難題。本研究基于FlumeNG、Hadoop等開源框架設計并實現了一套完善的海量日志數據的實時收集系統。
關鍵詞:FlumeNG;Hadoop;日志收集
中圖分類號:TP311 文獻標識碼:A 文章編號:1674-7712 (2013) 14-0000-01
日志的收集是了解和分析應用程序運行情況的必要前提[1]。通過使用FlumeNG等技術,可以實時的、可靠的收集網絡應用程序所產生的海量日志數據。
一、FlumeNG
FlumeNG是分布式的、可靠的、高可用的、高性能的開源日志收集系統[2]。它能夠從各種日志源上收集日志,存儲到一個中央存儲系統(可以是NFS,HDFS等)上[3],以便于進行集中統計分析處理。
二、日志收集系統的架構
Event是FlumeNG中所傳輸的基本單元。客戶端應用程序需要將產生的日志數據封裝成FlumeNG所能識別的Event對象。FlumeNG就是以Event的方式將數據從日志源頭傳送到最終的存儲目的地。Agent是FlumeNG配置管理的基本運行組件。一個Agent是包括Sources,Channels,Sinks和其他組件的單獨JVM運行實體。其中,Sources負責接送客戶端應用程序所產生的Event,并將這些Events以事務的方式來批量的添加到一個或者多個Channels中。系統內置的的Sources包括:Syslog、Avro、Exec等。Channel位于Source和Sink之間,用于緩存由Source進來的Events,提高系統的可靠性和吞吐量。MemoryChannel和FileChannel是使用最多的兩種Channel。其中MemoryChannel的吞吐量要高于FileChannel,但是不提高Event的持久化保證即在斷電等故障發生時會造成Event的丟失,而FileChannel提供了Event的持久化機制,從而保證了Event處理的可靠性。Sink負責從Channel中批量的讀取Event,然后傳輸到下一個Agent或者最終的存儲目的地。當Sink操作成功之后,Events會被從Channel中刪除掉。FlumeNG的數據流模型如下:
三、日志收集系統的實現
為了保證整個系統的可靠性和容錯性,FlumeNG采用FailOver的架構形式來進行搭建。每個應用程序所在的服務器上都運行著一個flumeMainClientAgent程序,同時在另外一臺備份機上運行著相同配置的flumeBackupClientAgent程序。當flumeMainClientAgent程序發生故障時,客戶端的數據流可以自動透明的切換到flumeBackupClientAgent端。flumeMainClient或者flumeBackupClient收集到的數據會進一步發送到遠程flumeMainCollectorAgent。和flumeMainClientAgent一樣,flumeMainCollectorAgent也有一個相同配置的flumeBackupCollectorAgent運行在另外一臺備份機上。當flumeMainCollector程序出現異常時,flumeMainClient或者flumeBackupClient的數據流同樣會自動的透明的切換到flumeBackupCollectorAgent端。flumeMainClient和flumeMainCollector之間是通過Avro的方式進行相連。此外,所有的Agent中的Channel都采用FileChannel來實現,從而保證了當Agent程序出現異常時也不會發生消息丟失的情況。FlumeNG在本研究中的具體架構實現如圖2所示:
四、結論
本研究在對現有的數據收集解決方案進行分析的基礎之上,使用FlumeNG設計并實現了針對網絡應用程序的海量日志數據的收集系統。該系統具有高性能、高吞吐量以及高可擴展性的特點,通過增加服務器結點的數量即可應對更大的數據量。此外,該系統還支持對收集到的日志數據進行實時處理和離線處理。
參考文獻:
[1]錢秀檳,劉國偉,李錦川.Web應用日志分析系統分析與設計[J].計算機安全,2011(06).
[2]https://cwiki.apache.org/FLUME/flume-ng.html.
[3]ApacheHadoop[EB/OL].http://hadoop.apache.org,2010,03,25.
[作者簡介]李志剛(1966-)男,教授,研究方向:計算機應用技術;張鑫(1988-),男,碩士研究生,研究方向:計算機應用技術;趙青娟(1989-),女,碩士研究生,研究方向:計算機應用技術;紀占林(1974-)男,副教授,研究方向:計算機應用技術。