Filebeat工作原理
Filebeat由兩個主要組件組成:prospectors 和 harvesters。這兩個組件協同工作將文件變動發送到指定的輸出中。
Harvester(收割機):負責讀取單個文件內容。每個文件會啟動一個Harvester,每個Harvester會逐行讀取各個文件,並將文件內容發送到制定輸出中。Harvester負責打開和關閉文件,意味在Harvester運行的時候,文件描述符處於打開狀態,如果文件在收集中被重命名或者被刪除,Filebeat會繼續讀取此文件。所以在Harvester關閉之前,磁盤不會被釋放。默認情況filebeat會保持文件打開的狀態,直到達到close_inactive
(如果此選項開啟,filebeat會在指定時間內將不再更新的文件句柄關閉,時間從harvester讀取最后一行的時間開始計時。若文件句柄被關閉后,文件發生變化,則會啟動一個新的harvester。關閉文件句柄的時間不取決於文件的修改時間,若此參數配置不當,則可能發生日志不實時的情況,由scan_frequency參數決定,默認10s。Harvester使用內部時間戳來記錄文件最后被收集的時間。例如:設置5m,則在Harvester讀取文件的最后一行之后,開始倒計時5分鍾,若5分鍾內文件無變化,則關閉文件句柄。默認5m)。
Prospector(勘測者):負責管理Harvester並找到所有讀取源。
1
2
3
4
|
filebeat.prospectors:
- input_type: log
paths:
- /apps/logs/*/info.log
|
Prospector會找到/apps/logs/*目錄下的所有info.log文件,並為每個文件啟動一個Harvester。Prospector會檢查每個文件,看Harvester是否已經啟動,是否需要啟動,或者文件是否可以忽略。若Harvester關閉,只有在文件大小發生變化的時候Prospector才會執行檢查。只能檢測本地的文件。
Filebeat如何記錄文件狀態:
將文件狀態記錄在文件中(默認在/var/lib/filebeat/registry)。此狀態可以記住Harvester收集文件的偏移量。若連接不上輸出設備,如ES等,filebeat會記錄發送前的最后一行,並再可以連接的時候繼續發送。Filebeat在運行的時候,Prospector狀態會被記錄在內存中。Filebeat重啟的時候,利用registry記錄的狀態來進行重建,用來還原到重啟之前的狀態。每個Prospector會為每個找到的文件記錄一個狀態,對於每個文件,Filebeat存儲唯一標識符以檢測文件是否先前被收集。
Filebeat如何保證事件至少被輸出一次:
Filebeat之所以能保證事件至少被傳遞到配置的輸出一次,沒有數據丟失,是因為filebeat將每個事件的傳遞狀態保存在文件中。在未得到輸出方確認時,filebeat會嘗試一直發送,直到得到回應。若filebeat在傳輸過程中被關閉,則不會再關閉之前確認所有時事件。任何在filebeat關閉之前為確認的時間,都會在filebeat重啟之后重新發送。這可確保至少發送一次,但有可能會重復。可通過設置shutdown_timeout
參數來設置關閉之前的等待事件回應的時間(默認禁用)。
Filebeat安裝配置
rpm安裝的默認路徑:
home: /usr/share/filebeat
bin: /usr/share/filebeat/bin
config: /etc/filebeat
data: /var/lib/filebeat
logs: /var/log/filebeat
一、安裝Filebeat:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.2-x86_64.rpm
rpm -i filebeat-6.4.2-x86_64.rpm
二、配置:
1.定義日志文件的路徑:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
此中的輸入收集路徑中的所有文件/var/log/*.log,也可以使用可以使用以下模式:/var/log/*/*.log。這.log將從子文件夾中獲取所有文件/var/log。
它不從/var/log文件夾本身獲取日志文件。目前,無法以遞歸方式獲取目錄的所有子目錄中的所有文件。
2.配置輸出。Filebeat支持各種輸出,但通常可以將事件直接發送到Elasticsearch,也可以發送到Logstash以進行其他處理(我這里將輸出發送到elasticsearch)。
1)將輸出發送到elasticsearch,配置如下:
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
hosts: ["127.0.0.1:9200"]
根據不同的host可以指定相應的IP和端口
2)要將輸出發送到Logstash,配置如下:
#----------------------------- Logstash output --------------------------------
output.logstash:
hosts:[“127.0.0.1:5044”]
根據不同的host可以指定相應的IP和端口
3.配置使用Kibana儀表盤
使用隨Filebeat提供的示例Kibana儀表板:
setup.kibana:
host: "localhost:5601"
host是運行kibana的地址和端口,
如果在端口后指定路徑,可以是http://localhost:5601/path
4.在elasticsearch中加載索引模板:
默認情況下,如果啟用了Elasticsearch輸出,Filebeat會自動加載推薦的模板文件fields.yml,可以將filebeat.yml配置文件中的默認值更改為:
setup.template.name: "your_template_name"
setup.template.fields: "path/to/fields.yml"
覆蓋現有模板:
setup.template.overwrite: true
禁用自動模板加載:(如果禁用自動模板加載,則需要手動加載模板)
setup.template.enabled: false
要手動加載模板,請運行setup命令。需要連接到Elasticsearch。如果啟用了Logstash輸出,則需要臨時禁用Logstash輸出並使用-E選項啟用Elasticsearch。此處的示例假定已啟用Logstash輸出。如果已啟用Elasticsearch輸出,則可以省略-E標志。
filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
5.設置kibana儀表盤:
1) Filebeat附帶了示例Kibana儀表板,可視化和搜索,以便在Kibana中可視化Filebeat數據。在使用儀表板之前,
您需要創建索引模式filebeat-*,並將儀表板加載到Kibana中。為此,您可以運行setup命令(如此處所述)或在配置文件中配置儀表板加載filebeat.yml。(我這里暫時選用此種方式)
filebeat setup --dashboards
2) 設置logstash輸出儀表盤:
在儀表板加載期間,Filebeat連接到Elasticsearch以檢查版本信息。要在啟用Logstash輸出時加載儀表板,您需要臨時禁用Logstash輸出並啟用Elasticsearch。要連接到安全的Elasticsearch集群,還需要傳遞Elasticsearch憑據。
filebeat setup -e \
-E output.logstash.enabled=false \
-E output.elasticsearch.hosts=['localhost:9200'] \
-E output.elasticsearch.username=filebeat_internal \
-E output.elasticsearch.password=YOUR_PASSWORD \
-E setup.kibana.host=localhost:5601
三、啟動
systemctl start filebeat
查看示例儀表盤:
進入kibana的web界面,在discover,確保filebeat-*選擇預定義的索引模式查看filebeat數據。
dashboard頁面可以選擇要打開的儀表板。