天天看點

filebeat安裝部署

簡單概述

  最近在了解elk做日志采集相關的内容,這篇文章主要講解通過filebeat來實作日志的收集。日志采集的工具有很多種,如fluentd, flume, logstash,betas等等。首先要知道為什麼要使用filebeat呢?因為logstash是jvm跑的,資源消耗比較大,啟動一個logstash就需要消耗500m左右的記憶體,而filebeat隻需要10來m記憶體資源。常用的elk日志采集方案中,大部分的做法就是将所有節點的日志内容通過filebeat送到kafka消息隊列,然後使用logstash叢集讀取消息隊列内容,根據配置檔案進行過濾。然後将過濾之後的檔案輸送到elasticsearch中,通過kibana去展示。

filebeat介紹

  filebeat由兩個主要組成部分組成:prospector和 harvesters。這些元件一起工作來讀取檔案并将事件資料發送到您指定的output。

什麼是harvesters?

  harvesters負責讀取單個檔案的内容。harvesters逐行讀取每個檔案,并将内容發送到output中。每個檔案都将啟動一個harvesters。harvesters負責檔案的打開和關閉,這意味着harvesters運作時,檔案會保持打開狀态。如果在收集過程中,即使删除了這個檔案或者是對檔案進行重命名,filebeat依然會繼續對這個檔案進行讀取,這時候将會一直占用着檔案所對應的磁盤空間,直到harvester關閉。預設情況下,filebeat會一直保持檔案的開啟狀态,直到超過配置的close_inactive參數,filebeat才會把harvester關閉。

關閉harvesters會帶來的影響:

  file handler将會被關閉,如果在harvester關閉之前,讀取的檔案已經被删除或者重命名,這時候會釋放之前被占用的磁盤資源。

  當時間到達配置的scan_frequency參數,将會重新啟動為檔案内容的收集。

  如果在havester關閉以後,移動或者删除了檔案,havester再次啟動時,将會無法收集檔案資料。

  當需要關閉harvester的時候,可以通過close_*配置項來控制。

什麼是prospector?

  prospector負責管理harvsters,并且找到所有需要進行讀取的資料源。如果input type配置的是log類型,prospector将會去配置度路徑下查找所有能比對上的檔案,然後為每一個檔案建立一個harvster。每個prospector都運作在自己的go routine裡。

  filebeat目前支援兩種prospector類型:log和stdin。每個prospector類型可以在配置檔案定義多個。log prospector将會檢查每一個檔案是否需要啟動harvster,啟動的harvster是否還在運作,或者是該檔案是否被忽略(可以通過配置 ignore_order,進行檔案忽略)。如果是在filebeat運作過程中新建立的檔案,隻要在harvster關閉後,檔案大小發生了變化,新檔案才會被prospector選擇到。

filebeat工作原理

  filebeat可以保持每個檔案的狀态,并且頻繁地把檔案狀态從系統資料庫裡更新到磁盤。這裡所說的檔案狀态是用來記錄上一次harvster讀取檔案時讀取到的位置,以保證能把全部的日志資料都讀取出來,然後發送給output。如果在某一時刻,作為output的elasticsearch或者logstash變成了不可用,filebeat将會把最後的檔案讀取位置儲存下來,直到output重新可用的時候,快速地恢複檔案資料的讀取。在filebaet運作過程中,每個prospector的狀态資訊都會儲存在記憶體裡。如果filebeat出行了重新開機,完成重新開機之後,會從系統資料庫檔案裡恢複重新開機之前的狀态資訊,讓filebeat繼續從之前已知的位置開始進行資料讀取。

prospector會為每一個找到的檔案保持狀态資訊。因為檔案可以進行重命名或者是更改路徑,是以檔案名和路徑不足以用來識别檔案。對于filebeat來說,都是通過實作存儲的唯一辨別符來判斷檔案是否之前已經被采集過。

  如果在你的使用場景中,每天會産生大量的新檔案,你将會發現filebeat的系統資料庫檔案會變得非常大。這個時候,你可以參考(the section called “registry file is too large?edit),來解決這個問題。

安裝filebeat服務

下載下傳和安裝key檔案

建立yum源檔案

filebeat安裝部署
filebeat安裝部署

開始安裝

啟動服務

收集日志

這裡我們先以收集docker日志為例,簡單來介紹一下filebeat的配置檔案該如何編寫。具體内容如下:

filebeat安裝部署
filebeat安裝部署

和我們看的一樣,其實并沒有太多的内容。我們采集/var/lib/docker/containers/*/*.log,即filebeat所在節點的所有容器的日志。輸出的位置是我們elasticsearch的服務位址,這裡我們直接将log輸送給es,而不通過logstash中轉。

再啟動之前,我們還需要向es送出一個filebeat index template,以便讓elasticsearch知道filebeat輸出的日志資料都包含哪些屬性和字段。filebeat.template.json這個檔案安裝完之後就有,無需自己編寫,找不到的同學可以通過find查找。加載模闆到elasticsearch中:

重新開機服務

提示:如果你啟動的是一個filebeat容器,需要将/var/lib/docker/containers目錄挂載到該容器中;

kibana配置

如果上面配置都沒有問題,就可以通路kibana,不過這裡需要添加一個新的index pattern。按照manual中的要求,對于filebeat輸送的日志,我們的index name or pattern應該填寫為:"filebeat-*"。

繼續閱讀