Filebeat工作原理

2021-09-30 17:15:59 字數 2747 閱讀 6689

filebeat儲存檔案狀態

filebeat檢測事件策略

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

filebeat如何避免資料重複?

filebeat什麼情況會丟資料?

總結前面幾節課我們講述了關於filebeat的一些基本應用和高階配置。本節課我們講深入**filebeat的原理,了解filebeat是怎麼工作的。了解的原理之後便於我們更好的去使用它,我們不妨提出一些疑問:

我們將一一**。

filebeat採集功能主要有兩個元件組成,分別是inputs和harvesters。兩個元件協同合作來完成採集工作。

harvester負責讀取檔案上的內容,當發現所以監控的檔案大小發生變化,就會按行的形式,將內容讀取出來。每乙個檔案都會對應乙個harvester,檔案的開啟和關閉都是harvester在操作,所以一旦harvester開啟乙個檔案,在沒有關閉這個檔案之前,檔案描述符會一直跟著harvester,因為檔案處理程式不依賴於檔名,即使這個檔案被重新命名或者刪除。所以何時關閉harvester就非常重要。如果不關閉harvester,磁碟空間就無法被釋放,即使你刪除了檔案。

那麼如何優雅的關閉harvester呢?

我們可以通過幾個配置去決定何時關閉harvester:

設定關閉

close_inactive
如果我們想在檔案重新命名或刪除之後,關閉harvester:

close_renamed
close_removed

close_timeout
clean_removed
如果我們想在檔案讀取結束後就關閉harvester:

close_eof
*還有乙個我們最常用的場景,就是rotation(日誌輪轉),我們會定時將舊的日誌檔案重新命名或者打成壓

縮包,並且立即會有新的同名檔案生成繼續寫,這一過程我們該如何配置呢?

clean_inactive
clean_removed
input負責管理harvester,input分為幾種型別:log,stdin,redis,udp,docker,tcp,syslog。如果配置的是log型別,input會根據配置的path去尋找檔案,並且每乙個檔案建立乙個harvester。如果harvester關閉後,檔案再次更新,harvester會被再次開啟。

也可以同時建立多個input:

filebeat.inputs:

- type: log

paths:

- /var/log/system.log

- /var/log/wifi.log

- type: log

paths:

- "/var/log/apache2/*"

fields:

apache: true

fields_under_root: true

filebeat會記錄監控目錄下每個檔案的檔案狀態,並且儲存到登錄檔檔案中。檔案狀態用於記錄harvester正在讀取的最後乙個偏移量並確保傳送成功。如果無法訪問輸出(如kafka或logstash),filebeat會跟蹤傳送的最後一行,並在輸出再次可用時繼續讀取檔案。在filebeat執行時,檔案狀態資訊也會儲存在記憶體中以用於每個input。重新啟動filebeat時,會從登錄檔檔案中讀取檔案z黃台,這樣filebeat會在最後乙個已知位置繼續讀取日誌。

對於每個input,filebeat會記錄它找到的每乙個檔案的檔案狀態。但是由於重新命名或者刪除檔案的可能存在,所以檔名和路徑不足以標識檔案。對於每個檔案,filebeat會儲存唯一識別符號,以檢測先前是否收穫了檔案。

如果業務每天會建立大量的新的日誌檔案,那麼意味著登錄檔檔案會很大,所以需要配置clean_removed和clean_inactive來重新整理。

filebeat使用換行符來檢測事件的結束。如果是按行逐步寫入到正在收集的檔案中,則在最後一行之後需要換行符,否則filebeat將不會讀取該檔案的最後一行。

filebeat可以保證事件可以被至少一次提交,就是可以保證資料不丟失。因為filebeat會把每個事件的傳遞狀態全部記錄到登錄檔中檔案中。

在已經被定義了輸出,但是沒有成功確認輸出的事件,filebeat會嘗試進行重試,直到確認成功。

如果在輸出事件的過程中filebeat關閉,它是不會等待輸出確認返回的,重新啟動之後會再次重新傳送沒有確認的事件,這樣可以保證每乙個事件都會被輸出,不會丟失,但是會造成事件的重複輸出。

因為資料重複多發於filebeat重啟的過程,原因就是filebeat關閉時並不會等已經傳送但沒來得及返回的事件。這部分如果輸出成功,filebeat也不知道,在filebeat重啟之後,將會重新傳送這部分資料。那麼我們能不能讓filebeat在關閉的時候等待所以返回結果呢?答案是可以的。

filebeat.shutdown_timeout: 5s
本節課我們詳細講解了filebeat的工作原理以及一些注意事項,了解了這些之後,我們可以根據自己實際的業務場景,合理的選擇配置,保證資料的完整性。

filebeat工作原理

filebeat是本地檔案的日誌資料採集器。作為伺服器上的 安裝,filebeat監視日誌目錄或特定日誌檔案,tail file,並將它們 給elasticsearch或logstash進行索引 kafka 等。filebeat由兩個主要元件組成 prospector 和harvester。這些元件...

Filebeat的工作原理

在這篇文章中,您可以了解filebeat的關鍵構建模組以及它們如何一起工作。了解這些概念將有助於您針對特定用例對filebeat進行配置做出明智的決定。filebeat由兩個主要元件組成 prospectors 和 harvesters。這些元件一起工作來尾隨檔案並將事件資料傳送到您指定的輸出。ha...

ELK日誌處理之Filebeat工作原理

beats是elastic stack技術棧中輕量級的日誌採集器,beats家族包括以下五個成員 elk架構中使用logstash收集 解析日誌,但是logstash對記憶體 cpu io等資源消耗比較高。相比 logstash,beats所佔系統的cpu和記憶體幾乎可以忽略不計。elasticse...