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如何保持文件的狀態

1、Filebeat保持每個文件的狀態,並經常將該狀態刷新到磁盤上的注冊表文件;這個狀態用於記住harvester的最后偏移量,並確保發送所有日志行。如果對於Output像Elasticsearch或者Logstach,送達不到,那么Filebeat繼續跟蹤最后的發送行,一旦Output再次可用,它將繼續讀取文件。
2、Filebeat運行時,狀態信息也會保存在每個input的內存中;當Filebeat重啟后,注冊表文件中的狀態用於重建數據,Filebeat在最后已知的位置使harvester繼續收集日志。
3、 對於每一個輸入,Filebeat保存每個找到的文件的狀態。因為文件可能會被重命名或者移動,文件名和路徑不足以標識文件。對於每一個文件,Filebeat會存儲唯一標識符以檢測文件是否在之前獲取。
 

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

1、Filebeat保證事件將至少一次傳輸到配置的輸出並且不會有數據丟失,Filebeat能夠實現這種行為是因為他將每個事件的傳遞狀態存儲存儲在注冊表文件中。
2、在定義的Output被阻塞且未確認所有的事件的情況下,Filebeat將會繼續嘗試發送事件直到輸出確認接收到事件為止。
3、 如果Filebeat在發送事件的過程中關閉,他不會在關閉之前等待Output確認所有事件。發送到Output的任何事件,在Filebeat關閉之前沒有得到確認,當Filebeat重新啟動時會再次發送。這就確保任何事件至少被發送了一次,但有可能你會發送重復的事件到Output。可以通過設置shutdown_timeout選項讓Filebeat在關閉之前等待一定的時間。
4、Filebeat的至少一次交互有一個限制當涉及到日志輪訓和刪除舊文件時,如果日志文件被寫入磁盤輪詢的速度快於Filebeat的處理的速度,或者當output不能使用的時候刪除了文件,數據可能會丟失。在Linux上,Filebeat也有可能會因為inode的重用跳過一些行。
 

自己想的的幾個問題(暫時未去驗證)

1、Input正常,Output不正常,當Output正常后,是怎么發送收集到的數據的,是從Output不正常時最后確認收到的文件事件后,從沒有確認的那一個開始傳送,還是從不正常之后,到正常這段時間的數據都不會再有?
2、Input不正常,Output正常,當Input正常后,數據是怎么發送的
 
 
官方文檔:https://www.elastic.co/guide/en/beats/filebeat/current/how-filebeat-works.html#harvester


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM