Filebeat工做過程(二)

Filebeat簡

Filebeat是一個輕量級的收集日誌和傳輸日誌的工具(一直覺得Filebeat是存儲數據,並非的它只是作一個收集傳輸功能);Filebeat安裝在每個你想要收集日誌的服務器上,至關於客戶端。Filebeat監控你指定的日誌文件或者路徑,收集日誌事件向Elasticsearch或者Logstach進行索引。
 

簡單理解Filebeat是如何工做的

當你啓動Filebeat,它開始監視你指定的一個或多個文件或路徑。Filebeat定位的每一個日誌,Filebeat開始啓動一個harvester。每一個harvester讀取到一個日誌的新內容就發送到libbeat,聚合起來而後把聚合的數據發送到你設置輸出的地方,如elasticsearch,logstach等。如圖:
 
 
Beats design
 
 
 

Filebeat是如何工做的

兩個組件: inputs harvesters  這兩個組件一塊兒工做跟蹤文件並將事件發送到指定的輸出。
 

harvesters(收割機,谷歌翻譯的,哈哈,也能夠這麼理解,由於是去收集文件並傳輸確認也像收割機)

職責:harvesters負責收取單個文件的內容。harvesters讀取文件,一行一行的讀取文件,並將內容發送到Output。
每一個文件啓動一個harvester,harvester負責打開或關閉一個文件,這意味着當harvest運行時文件描述符處於打開狀態。若是文件在獲取過程當中被移走了或者被重名了,Filebeat會繼續讀取文件,這樣作的反作用是磁盤上的空間被一直佔用着直到harvester被關閉。默認狀況下,Filebeat會保持打開狀態直到close_inactive信號到達。
 

input

職責找到全部的讀取來源和管理harvesters
假如文件來源是log,那麼input會找到全部定義下匹配的文件而且給每一個文件開啓一個harvester,如:
 
filebeat.inputs: - type: log paths: - /var/log/*.log - /var/path2/*.log

 

Filebeat目前支持的輸入類型

Log、 Stdin、 Redis、 UDP、 Docker、 TCP、 Syslog、 NetFlow,每一個輸入類型能夠定義屢次,log輸入會檢查每一個文件是否須要啓動harvester,是否已經啓動或者能夠忽略這個文件,當harvester關閉後只有文件大小被改變新的行纔會拾取新的行。
 

Filebeat如何保持文件的狀態

一、Filebeat保持每一個文件的狀態,並常常將該狀態刷新到磁盤上的註冊表文件;這個狀態用於記住harvester的最後偏移量,並確保發送全部日誌行。若是對於Output像Elasticsearch或者Logstach,送達不到,那麼Filebeat繼續跟蹤最後的發送行,一旦Output再次可用,它將繼續讀取文件。
二、Filebeat運行時,狀態信息也會保存在每一個input的內存中;當Filebeat重啓後,註冊表文件中的狀態用於重建數據,Filebeat在最後已知的位置使harvester繼續收集日誌。
三、 對於每個輸入,Filebeat保存每一個找到的文件的狀態。由於文件可能會被重命名或者移動,文件名和路徑不足以標識文件。對於每個文件,Filebeat會存儲惟一標識符以檢測文件是否在以前獲取。
 

Filebeat是如何確保至少一次交付的

一、Filebeat保證事件將至少一次傳輸到配置的輸出而且不會有數據丟失,Filebeat可以實現這種行爲是由於他將每一個事件的傳遞狀態存儲存儲在註冊表文件中。
二、在定義的Output被阻塞且未確認全部的事件的狀況下,Filebeat將會繼續嘗試發送事件直到輸出確認接收到事件爲止。
三、 若是Filebeat在發送事件的過程當中關閉,他不會在關閉以前等待Output確認全部事件。發送到Output的任何事件,在Filebeat關閉以前沒有獲得確認,當Filebeat從新啓動時會再次發送。這就確保任何事件至少被髮送了一次,但有可能你會發送重複的事件到Output。能夠經過設置shutdown_timeout選項讓Filebeat在關閉以前等待必定的時間。
四、Filebeat的至少一次交互有一個限制當涉及到日誌輪訓和刪除舊文件時,若是日誌文件被寫入磁盤輪詢的速度快於Filebeat的處理的速度,或者當output不能使用的時候刪除了文件,數據可能會丟失。在Linux上,Filebeat也有可能會由於inode的重用跳過一些行。
 

本身想的的幾個問題(暫時未去驗證)

一、Input正常,Output不正常,當Output正常後,是怎麼發送收集到的數據的,是從Output不正常時最後確認收到的文件事件後,從沒有確認的那一個開始傳送,仍是從不正常以後,到正常這段時間的數據都不會再有?
二、Input不正常,Output正常,當Input正常後,數據是怎麼發送的
 
 
官方文檔:https://www.elastic.co/guide/en/beats/filebeat/current/how-filebeat-works.html#harvester
相關文章
相關標籤/搜索