Filebeat工做原理

本文翻譯自:Filebeat Reference [6.5] » How Filebeat works,我的水平有限,涉及到專有名詞的翻譯時可能不是很準確,歡迎指正。html

在本章節,你將會學到Filebeat的關鍵組成部分以及它們是如何組織工做的。理解這些概念將有助於你對本身的Filebeat用例進行更優的配置。node

Filebeat主要由2部分構成:輸入嗅探(inputs)和收集器(harvester)。這些組件組合在一塊兒,追蹤數據文件而且將至發送到你指定的目的地。微信

原文中inputs這裏譯爲輸入嗅探,harvester譯爲收集器僅是我的理解,可能不太準確。ide

什麼是收集器?

收集器負責讀取數據文件的內容。收集器會逐行的讀取文件並將讀到的數據發送到輸出。每一個文件都會啓動一個收集器。文件的打開和關閉由收集器完成,這意味着在收集器運行期間,對應的文件描述符將會保持在打開狀態。若是正在被採集的文件被移動或者重命名,Filebeat會繼續讀取文件。這會產生必定的反作用,會一直佔用磁盤空間直到收集器關閉。默認狀況下,Filebeat保持文件打開狀態直到close_inactive狀態到達。ui

關閉收集器後會產生以下結果:spa

  • 關閉文件句柄,若是收集器正在讀取文件時文件被刪除,則釋放佔用的資源。
  • 直到scan_frequency狀態到達,收集器纔會再次讀取文件。
  • 若是在收集器關閉後移動或者刪除文件,則不會繼續讀取文件。

對何時關閉收集器,可對close_*配置項進行配置。翻譯

什麼是輸入嗅探?

輸入嗅探管理全部的收集器並查找全部的數據源。若是輸入類型是log,輸入嗅探會查找磁盤上全部與指定路徑通配符匹配的文件並對探測到的每一個文件啓動一個收集器。每一個輸入嗅探運行在本身的Go routine中。日誌

下面的Filebeat配置示例指定了收集全部匹配指定通配符的全部日誌文件數據:code

filebeat.inputs:
- type: log
 paths:
 - /var/log/*.log
 - /var/path2/*.log
複製代碼

Filebeat當前支持多種輸入類型。每種輸入類型均可以被屢次設置。對log型輸入,輸入嗅探會決定是否啓動收集器,收集器是否正在運行,或者文件是否應該被忽略(查看ignore_older)。當收集器再次啓動文件大小發生變化時只會收集自上次關閉後新增的數據行。cdn

Filebeat如何保持文件狀態?

Filebeat會持續保留每一個文件的狀態而且按期將狀態刷新到磁盤上的註冊表文件中。這個文件狀態用於記錄收集器讀取文件數據的最新偏移量並保證全部的日誌行都被讀取發送出去。若是輸出目的端(例如:Elasticsearch或者Logstash)不可達,Filebeat會跟蹤最後發送的數據行,一旦輸出可用會繼續從最後停留的數據行開始讀取文件。Filebeat正在運行時,每一個輸入嗅探的文件狀態信息也會被保存在內存中。當Filebeat重啓時,會從註冊表文件中重建狀態信息,收集器會根據重建的狀態信息繼續從最後已知的位置開始讀取數據。

對每一個輸入嗅探,Filebeat會記錄它探測到的每一個文件的狀態。由於文件有可能被移動或者重命名,僅靠文件名或者路徑就不足以標識一個文件。對此,Filebeat爲每一個輸入嗅探到的文件保存一個惟一的標識符以檢測文件以前是否被收集過。

補充:在Linux上,這個惟一標識符是inode,可參考理解Linux文件系統之inode

若是你的用例中天天會建立大量新的文件,你會發現註冊表文件將會增加的很快。可查看註冊表文件太大?獲取可解決此文件的配置選項的詳細信息。

Filebeat如何確保至少一次交付?

Filebeat可以確保日誌事件至少一次交付到指定配置輸出而且沒有數據丟失。Filebeat之因此可以確保不丟失是由於它在註冊表文件中存儲了每一個日誌事件投遞的狀態。

在輸出中斷沒法確認全部事件被收到的狀況下,Filebeat將會持續發送事件直到輸出確認收到事件。

若是Filebeat在發送事件時時被關閉,它不會在關閉前等待輸出確認全部事件到達,即它會當即關閉。當Filebeat重啓時,在關閉退出前已發送到輸出端可是尚未被確認的事件將會被再次發送。這確保了每一個事件至少會被交付一次,可是這會形成一部分事件的重複發送。你能夠經過配置shutdown_timeout項設置Filebeat在關閉退出前等待一段時間。

在涉及日誌滾動和刪除舊文件時,Filebeat的至少一次交付有一個限制。若是日誌文件寫入磁盤過快並在Filebeat處理前發生了日誌滾動,或文件在輸出不可用時被刪除,日誌數據可能會丟失。在Linux上,Filebeat也可能因inode重用而跳過行。 有關inode重用問題的更多詳細信息,請參閱常見問題解答


關注微信公衆號,開啓技術人生!

相關文章
相關標籤/搜索