Filebeat是本地文件的日志數(shù)據(jù)采集器叮喳。 作為服務器上的代理安裝,F(xiàn)ilebeat監(jiān)視日志目錄或特定日志文件缰贝,tail file馍悟,并將它們轉發(fā)給Elasticsearch或Logstash進行索引、kafka 等剩晴。
工作原理:
Filebeat由兩個主要組件組成:prospector 和harvester锣咒。這些組件一起工作來讀取文件(tail file)并將事件數(shù)據(jù)發(fā)送到您指定的輸出
啟動Filebeat時,它會啟動一個或多個查找器赞弥,查看您為日志文件指定的本地路徑毅整。 對于prospector 所在的每個日志文件,prospector 啟動harvester绽左。 每個harvester都會為新內(nèi)容讀取單個日志文件悼嫉,并將新日志數(shù)據(jù)發(fā)送到libbeat,后者將聚合事件并將聚合數(shù)據(jù)發(fā)送到您為Filebeat配置的輸出拼窥。
harvester
harvester :負責讀取單個文件的內(nèi)容戏蔑。讀取每個文件,并將內(nèi)容發(fā)送到 the output
每個文件啟動一個harvester, harvester 負責打開和關閉文件鲁纠,這意味著在運行時文件描述符保持打開狀態(tài)
如果文件在讀取時被刪除或重命名总棵,F(xiàn)ilebeat將繼續(xù)讀取文件。
這有副作用改含,即在harvester關閉之前情龄,磁盤上的空間被保留。默認情況下,F(xiàn)ilebeat將文件保持打開狀態(tài)刃唤,直到達到close_inactive狀態(tài)
關閉harvester會產(chǎn)生以下結果:
1)如果在harvester仍在讀取文件時文件被刪除隔心,則關閉文件句柄,釋放底層資源尚胞。
2)文件的采集只會在scan_frequency過后重新開始硬霍。
3)如果在harvester關閉的情況下移動或移除文件,則不會繼續(xù)處理文件笼裳。
要控制收割機何時關閉唯卖,請使用close_ *配置選項
prospector
prospector 負責管理harvester并找到所有要讀取的文件來源。
如果輸入類型為日志躬柬,則查找器將查找路徑匹配的所有文件拜轨,并為每個文件啟動一個harvester。
每個prospector都在自己的Go協(xié)程中運行允青。
以下示例將Filebeat配置為從與指定的匹配的所有日志文件中收集行:
filebeat.prospectors:
- type: log
paths:
- /var/log/*.log
- /var/path2/*.log
Filebeat目前支持兩種prospector類型:log和stdin喜德。
每個prospector類型可以定義多次矾踱。
日志prospector檢查每個文件以查看harvester是否需要啟動,是否已經(jīng)運行,
或者該文件是否可以被忽略(請參閱ignore_older)朴艰。
只有在harvester關閉后文件的大小發(fā)生了變化仲闽,才會讀取到新行腋腮。
注:Filebeat prospector只能讀取本地文件窍侧, 沒有功能可以連接到遠程主機來讀取存儲的文件或日志。
Filebeat如何保持文件的狀態(tài)瓷蛙?
Filebeat 保存每個文件的狀態(tài)并經(jīng)常將狀態(tài)刷新到磁盤上的注冊文件中悼瓮。
該狀態(tài)用于記住harvester正在讀取的最后偏移量,并確保發(fā)送所有日志行艰猬。
如果輸出(例如Elasticsearch或Logstash)無法訪問横堡,F(xiàn)ilebeat會跟蹤最后發(fā)送的行,并在輸出再次可用時繼續(xù)讀取文件姥宝。
在Filebeat運行時翅萤,每個prospector內(nèi)存中也會保存的文件狀態(tài)信息,
當重新啟動Filebeat時腊满,將使用注冊文件的數(shù)據(jù)來重建文件狀態(tài)套么,F(xiàn)ilebeat將每個harvester在從保存的最后偏移量繼續(xù)讀取。
每個prospector為它找到的每個文件保留一個狀態(tài)碳蛋。
由于文件可以被重命名或移動胚泌,因此文件名和路徑不足以識別文件。
對于每個文件肃弟,F(xiàn)ilebeat存儲唯一標識符以檢測文件是否先前已采集過玷室。
如果您的使用案例涉及每天創(chuàng)建大量新文件零蓉,您可能會發(fā)現(xiàn)注冊文件增長過大。請參閱注冊表文件太大穷缤?編輯有關您可以設置以解決此問題的配置選項的詳細信息敌蜂。
Filebeat如何確保至少一次交付
Filebeat保證事件至少會被傳送到配置的輸出一次,并且不會丟失數(shù)據(jù)津肛。 Filebeat能夠實現(xiàn)此行為章喉,因為它將每個事件的傳遞狀態(tài)存儲在注冊文件中。
在輸出阻塞或未確認所有事件的情況下身坐,F(xiàn)ilebeat將繼續(xù)嘗試發(fā)送事件秸脱,直到接收端確認已收到。
如果Filebeat在發(fā)送事件的過程中關閉部蛇,它不會等待輸出確認所有收到事件摊唇。
發(fā)送到輸出但在Filebeat關閉前未確認的任何事件在重新啟動Filebeat時會再次發(fā)送。
這可以確保每個事件至少發(fā)送一次涯鲁,但最終會將重復事件發(fā)送到輸出巷查。
也可以通過設置shutdown_timeout選項來配置Filebeat以在關閉之前等待特定時間。
注意:
Filebeat的至少一次交付保證包括日志輪換和刪除舊文件的限制撮竿。如果將日志文件寫入磁盤并且寫入速度超過Filebeat可以處理的速度吮便,或者在輸出不可用時刪除了文件笔呀,則可能會丟失數(shù)據(jù)幢踏。
在Linux上,F(xiàn)ilebeat也可能因inode重用而跳過行许师。有關inode重用問題的更多詳細信息房蝉,請參閱filebeat常見問題解答。