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)閉之前等待特定的時間。