寫在前邊的話
在看filebeat之前我們先來看下Beats,Beats 平台是 Elastic.co 從 packetbeat 發展出來的資料收集器系統。beat 收集器可以直接寫入 Elasticsearch,也可以傳輸給 Logstash。其中抽象出來的 libbeat,提供了統一的資料發送方法,輸入配置解析,日志記錄架構等功能。也就是說,所有的 beat 工具,在配置上,除了 input 以外,在output、filter、shipper、logging、run-options 上的配置規則都是完全一緻的
而這裡的filebeat就是beats 的一員,目前beat可以發送資料給Elasticsearch,Logstash,File,Console四個目的位址。filebeat 是基于原先 logstash-forwarder 的源碼改造出來的。換句話說:filebeat 就是新版的 logstash-forwarder,也會是 ELK Stack 在 shipper 端的第一選擇。
Filebeat的架構設計

當我們安裝完filebeat之後,我們可以在filebeat的安裝目錄下看到兩個檔案
filebeat.template.json (輸出的檔案格式,在filebeat的template中指定,當服務啟動時,會被加載)
filebeat.yml(所有的配置都在該檔案下進行)
Filebeat由兩個主要組成部分組成:prospector和 harvesters。這些元件一起工作來讀取檔案并将事件資料發送到您指定的output。
什麼是harvesters?
harvesters負責讀取單個檔案的内容。harvesters逐行讀取每個檔案,并将内容發送到output中。每個檔案都将啟動一個harvesters。harvesters負責檔案的打開和關閉,這意味着harvesters運作時,檔案會保持打開狀态。如果在收集過程中,即使删除了這個檔案或者是對檔案進行重命名,Filebeat依然會繼續對這個檔案進行讀取,這時候将會一直占用着檔案所對應的磁盤空間,直到Harvester關閉。預設情況下,Filebeat會一直保持檔案的開啟狀态,直到超過配置的close_inactive參數,Filebeat才會把Harvester關閉。
關閉Harvesters會帶來的影響:
file Handler将會被關閉,如果在Harvester關閉之前,讀取的檔案已經被删除或者重命名,這時候會釋放之前被占用的磁盤資源。
當時間到達配置的scan_frequency參數,将會重新啟動為檔案内容的收集。
如果在Havester關閉以後,移動或者删除了檔案,Havester再次啟動時,将會無法收集檔案資料。
當需要關閉Harvester的時候,可以通過close_*配置項來控制。
什麼是Prospector?
Prospector負責管理Harvsters,并且找到所有需要進行讀取的資料源。如果input type配置的是log類型,Prospector将會去配置度路徑下查找所有能比對上的檔案,然後為每一個檔案建立一個Harvster。每個Prospector都運作在自己的Go routine裡。
Filebeat目前支援兩種Prospector類型:log和stdin。每個Prospector類型可以在配置檔案定義多個。log Prospector将會檢查每一個檔案是否需要啟動Harvster,啟動的Harvster是否還在運作,或者是該檔案是否被忽略(可以通過配置 ignore_order,進行檔案忽略)。如果是在Filebeat運作過程中新建立的檔案,隻要在Harvster關閉後,檔案大小發生了變化,新檔案才會被Prospector選擇到。
filebeat工作原理
Filebeat可以保持每個檔案的狀态,并且頻繁地把檔案狀态從系統資料庫裡更新到磁盤。這裡所說的檔案狀态是用來記錄上一次Harvster讀取檔案時讀取到的位置,以保證能把全部的日志資料都讀取出來,然後發送給output。如果在某一時刻,作為output的ElasticSearch或者Logstash變成了不可用,Filebeat将會把最後的檔案讀取位置儲存下來,直到output重新可用的時候,快速地恢複檔案資料的讀取。在Filebaet運作過程中,每個Prospector的狀态資訊都會儲存在記憶體裡。如果Filebeat出行了重新開機,完成重新開機之後,會從系統資料庫檔案裡恢複重新開機之前的狀态資訊,讓FIlebeat繼續從之前已知的位置開始進行資料讀取。
Prospector會為每一個找到的檔案保持狀态資訊。因為檔案可以進行重命名或者是更改路徑,是以檔案名和路徑不足以用來識别檔案。對于Filebeat來說,都是通過實作存儲的唯一辨別符來判斷檔案是否之前已經被采集過。
如果在你的使用場景中,每天會産生大量的新檔案,你将會發現Filebeat的系統資料庫檔案會變得非常大。這個時候,你可以參考(the section called “Registry file is too large?edit),來解決這個問題。