ELK-003-Beats-Filebeat的工作原理

1. 引言

本系列上一篇文章《 ELK-002-Beats-Filebeat的HelloWorld》中我們降到了Filebeat的應用場景,同時搭建Filebeat完成了HelloWorld示例,今天我們來探討下Filebeat的工作原理。

Filebeat主要是靠兩個組件共同工作完成日誌採集的:harvester(收割者)prospector(勘探者),這兩個組件共同工作去獲取最新的日誌事件然後推送到輸出組件中。

2. harvester(收割者)

收割者一詞本源自收割莊稼的人,在這兒的詞義可理解爲採集日誌的組件,harvester的主要工作就是讀取文件的每一行然後輸出到輸出組件中,harvester負責打開和關閉文件,只要harvester在運行,文件描述符就一直處於開啓狀態,如果正好文件被刪除或者被重命名,harvester仍然會繼續讀取該文件,副作用是會造成磁盤空間的額外增加。

3. prospector(勘探者)

勘探者主要用於查找出所有的數據源,同時管理所有的harvester,比如,上一篇文章中我們在Filebeat的配置文件中作了如下配置:

filebeat.prospectors:
- input_type: log
  paths:
    - /var/log/*.log

我們看到該配置文件中,input_type是log,這表示勘探者的類型爲log,該勘探者會從我們定義爲路徑中查找所有的日誌文件,這兒是/var/log下所有.log後綴的文件,這兒只是簡單的定義了我們要採集的路徑和文件類型。

在Filebeat中,目前支持兩種勘探者:log和stdin,每個勘探者在配置文件中都可以被定義多次,log勘探者管理着哪些harvester應該啓動,哪些正在運行,哪些文件在採集時候要排除在外等。文件大小改變時候,勘探者就會開啓harvester去收割新的行。目前僅支持對本地文件的採集,不支持對遠程文件的讀取。

4. Filebeat 如何保持文件的狀態

我們在對路徑下多個文件進行日誌採集時候,必須要做的一個事情就是狀態記錄,哪些文件被採集了,哪些文件沒有,被採集的文件的偏移(多少行)都是非常重要的信息,如果不記錄這些信息,我們重啓Filebeat或者Filebeat宕機後,Filebeat之前採集的數據狀態就不在了,那麼採集工作又得重頭再來,這就使得兩次採集的數據發生了重複,對於信息採集系統,特別重要的準則就是:不重複、不遺漏,Filebeat通過./data/下的registry文件來記錄文件狀態,來保證採集的數據不重複不遺漏,如果感興趣,可以直接使用

cat ./data/registry 

查看當前採集的每個文件的狀態。當然,官方也提到了很多極端情況:輸出組件發生阻塞了,Filebeat宕機了,但是數據還沒發送完怎麼處理的。在Filebeat的配置中都有比較完善的解決策略,能夠最大努力保證數據的不重複不遺漏。

發佈了44 篇原創文章 · 獲贊 28 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章