FileBeat原理

FileBeat的作用在于:
1)輕量級日志采集;
2)輸送至 Elasticsearch 或 Logstash,在 Kibana 中實現(xiàn)可視化

Filebeat由兩個主要組件組成:inputs 和 harvesters (直譯:收割機,采集器)。這些組件一起工作以跟蹤文件,并將事件數(shù)據(jù)發(fā)送到你指定的輸出。

1、harvester是什么

一個harvester負(fù)責(zé)讀取一個單個文件的內(nèi)容。

harvester逐行讀取每個文件(一行一行地讀取每個文件),并把這些內(nèi)容發(fā)送到輸出。

每個文件啟動一個harvester。

harvester負(fù)責(zé)打開和關(guān)閉這個文件,這就意味著在harvester運行時文件描述符保持打開狀態(tài)。

在harvester正在讀取文件內(nèi)容的時候,文件被刪除或者重命名了,那么Filebeat會續(xù)讀這個文件。這就有一個問題了,就是只要負(fù)責(zé)這個文件的harvester沒用關(guān)閉,那么磁盤空間就不會釋放。默認(rèn)情況下,F(xiàn)ilebeat保存文件打開直到close_inactive到達(dá)。

2、input是什么

一個input負(fù)責(zé)管理harvesters,并找到所有要讀取的源。

如果input類型是log,則input查找驅(qū)動器上與已定義的glob路徑匹配的所有文件,并為每個文件啟動一個harvester。

每個input都在自己的Go例程中運行。

下面的例子配置Filebeat從所有匹配指定的glob模式的文件中讀取行:

filebeat.inputs:
- type: log
  paths:
    - /var/log/*.log
    - /var/path2/*.log

3、Filebeat如何保持文件狀態(tài)

Filebeat保存每個文件的狀態(tài),并經(jīng)常刷新狀態(tài)到磁盤上的注冊文件(registry)。狀態(tài)用于記住harvester讀取的最后一個偏移量,并確保所有日志行被發(fā)送(到輸出)。如果輸出,比如Elasticsearch 或者 Logstash等,無法訪問,那么Filebeat會跟蹤已經(jīng)發(fā)送的最后一行,并只要輸出再次變得可用時繼續(xù)讀取文件。當(dāng)Filebeat運行時,會將每個文件的狀態(tài)新保存在內(nèi)存中。當(dāng)Filebeat重新啟動時,將使用注冊文件中的數(shù)據(jù)重新構(gòu)建狀態(tài),F(xiàn)ilebeat將在最后一個已知位置繼續(xù)每個harvester。

對于每個輸入,F(xiàn)ilebeat保存它找到的每個文件的狀態(tài)。因為文件可以重命名或移動,所以文件名和路徑不足以標(biāo)識文件。對于每個文件,F(xiàn)ilebeat存儲惟一標(biāo)識符,以檢測文件是否以前讀取過。

如果你的情況涉及每天創(chuàng)建大量的新文件,你可能會發(fā)現(xiàn)注冊表文件變得太大了。

(畫外音:Filebeat保存每個文件的狀態(tài),并將狀態(tài)保存到registry_file中的磁盤。當(dāng)重新啟動Filebeat時,文件狀態(tài)用于在以前的位置繼續(xù)讀取文件。如果每天生成大量新文件,注冊表文件可能會變得太大。為了減小注冊表文件的大小,有兩個配置選項可用:clean_remove和clean_inactive。對于你不再訪問且被忽略的舊文件,建議您使用clean_inactive。如果想從磁盤上刪除舊文件,那么使用clean_remove選項。)

4、Filebeat如何確保至少投遞一次(at-least-once)?

Filebeat保證事件將被投遞到配置的輸出中至少一次,并且不會丟失數(shù)據(jù)。Filebeat能夠?qū)崿F(xiàn)這種行為,因為它將每個事件的投遞狀態(tài)存儲在注冊表文件中。

在定義的輸出被阻塞且沒有確認(rèn)所有事件的情況下,F(xiàn)ilebeat將繼續(xù)嘗試發(fā)送事件,直到輸出確認(rèn)收到事件為止。

如果Filebeat在發(fā)送事件的過程中關(guān)閉了,則在關(guān)閉之前它不會等待輸出確認(rèn)所有事件。當(dāng)Filebeat重新啟動時,發(fā)送到輸出(但在Filebeat關(guān)閉前未確認(rèn))的任何事件將再次發(fā)送。這確保每個事件至少被發(fā)送一次,但是你最終可能會將重復(fù)的事件發(fā)送到輸出。你可以通過設(shè)置shutdown_timeout選項,將Filebeat配置為在關(guān)閉之前等待特定的時間。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容