首先請大家記住,,常見的日志數(shù)據(jù)采集組件包括Flume、Logstash,、FileBeat,。一,、Flume組件Flume是Cloudera提供的一個高可用的,高可靠的,,分布式的海量日志采集,、聚合和傳輸?shù)南到y(tǒng),是Apache下的一個孵化項目,。Flume具有完善的可靠性機制,、故障轉(zhuǎn)移和恢復(fù)機制,具有強大的容錯能力,。Flume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,,用于收集數(shù)據(jù);同時,,F(xiàn)lume提供對數(shù)據(jù)進行簡單處理,,并寫到各種數(shù)據(jù)接受方(可定制)的能力。Flume的設(shè)計宗旨是向Hadoop集群批量導(dǎo)入基于事件的海量數(shù)據(jù),。系統(tǒng)中最核心的角色是agent,,F(xiàn)lume采集系統(tǒng)就是由一個個agent所連接起來形成。每一個agent相當(dāng)于一個數(shù)據(jù)傳遞員,,內(nèi)部有三個組件:(1)source: 采集源,,用于跟數(shù)據(jù)源對接獲取數(shù)據(jù).(2)sink:傳送數(shù)據(jù)的目的地,用于往下一級agent或者最終存儲系統(tǒng)傳遞數(shù)據(jù),。(3)channel:agent內(nèi)部的數(shù)據(jù)傳輸通道,,用于從source傳輸數(shù)據(jù)到sink。二,、Logstash組件Logstash 是開源的服務(wù)器端數(shù)據(jù)處理管道,,能夠同時從多個來源采集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù),,然后將數(shù)據(jù)發(fā)送到存儲庫中,。數(shù)據(jù)從源傳輸?shù)酱鎯斓倪^程中,Logstash 過濾器能夠解析各個事件,,識別已命名的字段以構(gòu)建結(jié)構(gòu),,并將它們轉(zhuǎn)換成通用格式,以便更輕松,、更快速地分析和實現(xiàn)商業(yè)價值,。Logstash 現(xiàn)在是 ElasticSearch 家族成員之一。logstash具有200多個插件,,可以接受各種各樣的數(shù)據(jù)(如日志,、網(wǎng)絡(luò)請求、關(guān)系型數(shù)據(jù)庫,、傳感器或物聯(lián)網(wǎng)等等),。三,、Filebeat組件Filebeat是一個輕量級的日志采集工具,用于轉(zhuǎn)發(fā)和集中日志數(shù)據(jù). Filebeat作為代理安裝在服務(wù)器上,監(jiān)控指定的日志文件或目錄,收集日志事件,并將它們轉(zhuǎn)發(fā)到Elasticsearch或Logstash進行索引。當(dāng)開啟Filebeat程序的時候,,它會啟動一個或多個探測器(prospectors)去檢測你指定的日志目錄或文件,,對于探測器找出的每一個日志文件,F(xiàn)ilebeat啟動收割進程(harvester),,每一個收割進程讀取一個日志文件的新內(nèi)容,并發(fā)送這些新的日志數(shù)據(jù)到處理程序(spooler),,處理程序會集合這些事件,,最后filebeat會發(fā)送集合的數(shù)據(jù)到你指定的地點。Filebeat由兩個主要組成部分組成:prospector和 harvesters,。這些組件一起工作來讀取文件并將事件數(shù)據(jù)發(fā)送到指定的output。Harvesters:負(fù)責(zé)讀取單個文件的內(nèi)容,。harvesters逐行讀取每個文件,,并將內(nèi)容發(fā)送到output中,。每個文件都將啟動一個harvesters,。harvesters負(fù)責(zé)文件的打開和關(guān)閉,這意味著harvesters運行時,文件會保持打開狀態(tài),。如果在收集過程中,,即使刪除了這個文件或者是對文件進行重命名,F(xiàn)ilebeat依然會繼續(xù)對這個文件進行讀取,,這時候?qū)恢闭加弥募鶎?yīng)的磁盤空間,,直到Harvester關(guān)閉。默認(rèn)情況下,,F(xiàn)ilebeat會一直保持文件的開啟狀態(tài),直到超過配置的close_inactive參數(shù),,F(xiàn)ilebeat才會把Harvester關(guān)閉,。Prospector:負(fù)責(zé)管理Harvsters,,并且找到所有需要進行讀取的數(shù)據(jù)源,。如果input type配置的是log類型,Prospector將會去配置路徑下查找所有能匹配上的文件,,然后為每一個文件創(chuàng)建一個Harvster,。每個Prospector都運行在自己的Go routine里,。Filebeat目前支持兩種Prospector類型:log和stdin,。每個Prospector類型可以在配置文件定義多個,。log Prospector將會檢查每一個文件是否需要啟動Harvster,,啟動的Harvster是否還在運行,,或者是該文件是否被忽略(可以通過配置ignore_order,進行文件忽略),。如果是在Filebeat運行過程中新創(chuàng)建的文件,,只要在Harvster關(guān)閉后,,文件大小發(fā)生了變化,新文件才會被Prospector選擇到,。四,、Flume、Logstash,、Filebeat組件對比 | | | | | | | | | | | | | 從多種源端采集數(shù)據(jù)并可以輸出到多種數(shù)據(jù)源 | 從多種源端采集數(shù)據(jù)并可以實時解析和轉(zhuǎn)換并輸出到多種數(shù)據(jù)源 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 一臺服務(wù)器只允許起一個進程,,掛了手工拉起 | | | | | | | | | | | | | |
五,、日志采集組件總結(jié)- 1. Flume更注重于數(shù)據(jù)的傳輸,,對于數(shù)據(jù)的預(yù)處理不如Logstash。在傳輸上Flume比Logstash更可靠一些,因為數(shù)據(jù)會持久化在channel中,。數(shù)據(jù)只有存儲在sink端中,,才會從channel中刪除,,這個過程是通過事物來控制的,,保證了數(shù)據(jù)的可靠性。
- 2. Logstash是ELK組件中的一個,,一般都是同ELK其它組件一起使用,更注重于數(shù)據(jù)的預(yù)處理,,Logstash有比Flume豐富的插件可選,,所以在擴展功能上比Flume全面。但Logstash內(nèi)部沒有persist queue,,所以在異常情況下會出現(xiàn)數(shù)據(jù)丟失的問題,。
- 3. Filebeat是一個輕量型日志采集工具,因為Filebeat是Elastic Stack的一部分,,因此能夠于ELK組件無縫協(xié)作,。Filebeat占用的內(nèi)存要比Logstash小很多。性能比較穩(wěn)健,,很少出現(xiàn)宕機,。
|