天天看點

搞懂日志采集利器 Filebeat 并不難!

之前也介紹過:超強幹貨!通過filebeat、logstash、rsyslog 幾種方式采集 nginx 日志。本文使用的Filebeat是7.7.0的版本,文章将從如下幾個方面說明:

搞懂日志采集利器 Filebeat 并不難!

首先Filebeat是Beats中的一員。

Beats在是一個輕量級日志采集器,其實Beats家族有6個成員,早期的ELK架構中使用Logstash收集、解析日志,但是Logstash對記憶體、CPU、io等資源消耗比較高。相比Logstash,Beats所占系統的CPU和記憶體幾乎可以忽略不計。

目前Beats包含六種工具:

Packetbeat:網絡資料(收集網絡流量資料)

Metricbeat:名額(收集系統、程序和檔案系統級别的CPU和記憶體使用情況等資料)

Filebeat:日志檔案(收集檔案資料)

Winlogbeat:Windows事件日志(收集Windows事件日志資料)

Auditbeat:審計資料(收集審計日志)

Heartbeat:運作時間監控(收集系統運作時的資料)

Filebeat是用于轉發和集中日志資料的輕量級傳送工具。Filebeat監視您指定的日志檔案或位置,收集日志事件,并将它們轉發到Elasticsearch或 Logstash進行索引。

Filebeat的工作方式如下:啟動Filebeat時,它将啟動一個或多個輸入,這些輸入将在為日志資料指定的位置中查找。對于Filebeat所找到的每個日志,Filebeat都會啟動收集器。每個收集器都讀取單個日志以擷取新内容,并将新日志資料發送到libbeat,libbeat将聚集事件,并将聚集的資料發送到為Filebeat配置的輸出。

因為Logstash是JVM跑的,資源消耗比較大,是以後來作者又用Golang寫了一個功能較少但是資源消耗也小的輕量級的logstash-forwarder。不過作者隻是一個人,加入http://elastic.co公司以後,因為ES公司本身還收購了另一個開源項目Packetbeat,而這個項目專門就是用Golang的,有整個團隊,是以ES公司幹脆把logstash-forwarder的開發工作也合并到同一個Golang團隊來搞,于是新的項目就叫Filebeat了。

Filebeat結構:由兩個元件構成,分别是inputs(輸入)和harvesters(收集器),這些元件一起工作來跟蹤檔案并将事件資料發送到您指定的輸出,harvester負責讀取單個檔案的内容。harvester逐行讀取每個檔案,并将内容發送到輸出。為每個檔案啟動一個harvester。harvester負責打開和關閉檔案,這意味着檔案描述符在harvester運作時保持打開狀态。如果在收集檔案時删除或重命名檔案,Filebeat将繼續讀取該檔案。這樣做的副作用是,磁盤上的空間一直保留到harvester關閉。預設情況下,Filebeat保持檔案打開,直到達到close_inactive。

關閉harvester可以會産生的結果:

檔案處理程式關閉,如果harvester仍在讀取檔案時被删除,則釋放底層資源。

隻有在scan_frequency結束之後,才會再次啟動檔案的收集。

如果該檔案在harvester關閉時被移動或删除,該檔案的收集将不會繼續。

一個input負責管理harvesters和尋找所有來源讀取。如果input類型是log,則input将查找驅動器上與定義的路徑比對的所有檔案,并為每個檔案啟動一個harvester。每個input在它自己的Go程序中運作,Filebeat目前支援多種輸入類型。每個輸入類型可以定義多次。日志輸入檢查每個檔案,以檢視是否需要啟動harvester、是否已經在運作harvester或是否可以忽略該檔案。

Filebeat保留每個檔案的狀态,并經常将狀态重新整理到磁盤中的系統資料庫檔案中。該狀态用于記住harvester讀取的最後一個偏移量,并確定發送所有日志行。如果無法通路輸出(如Elasticsearch或Logstash),Filebeat将跟蹤最後發送的行,并在輸出再次可用時繼續讀取檔案。當Filebeat運作時,每個輸入的狀态資訊也儲存在記憶體中。當Filebeat重新啟動時,來自系統資料庫檔案的資料用于重建狀态,Filebeat在最後一個已知位置繼續每個harvester。對于每個輸入,Filebeat都會保留它找到的每個檔案的狀态。由于檔案可以重命名或移動,檔案名和路徑不足以辨別檔案。對于每個檔案,Filebeat存儲唯一的辨別符,以檢測檔案是否以前被捕獲。

Filebeat保證事件将至少傳遞到配置的輸出一次,并且不會丢失資料。是因為它将每個事件的傳遞狀态存儲在系統資料庫檔案中。在已定義的輸出被阻止且未确認所有事件的情況下,Filebeat将繼續嘗試發送事件,直到輸出确認已接收到事件為止。如果Filebeat在發送事件的過程中關閉,它不會等待輸出确認所有事件後再關閉。當Filebeat重新啟動時,将再次将Filebeat關閉前未确認的所有事件發送到輸出。這樣可以確定每個事件至少發送一次,但最終可能會有重複的事件發送到輸出。通過設定shutdown_timeout選項,可以将Filebeat配置為在關機前等待特定時間。

本文采用壓縮包的方式安裝,Linux版本,filebeat-7.7.0-linux-x86_64.tar.gz。

配置示例檔案:filebeat.reference.yml(包含所有未過時的配置項)

配置檔案:filebeat.yml

詳情見官網:https://www.elastic.co/guide/...

支援的輸入元件:

支援的輸出元件:

keystore主要是防止敏感資訊被洩露,比如密碼等,像ES的密碼,這裡可以生成一個key為ES_PWD,值為ES的password的一個對應關系,在使用ES的密碼的時候就可以使用${ES_PWD}使用。

例如:後期就可以通過${ES_PWD}使用其值,例如:

filebeat.yml配置:

Logstash的配置

filebeat.yml的配置:

檢視Elasticsearch叢集,有一個預設的索引名字filebeat-%{[beat.version]}-%{+yyyy.MM.dd}

搞懂日志采集利器 Filebeat 并不難!

官網:https://www.elastic.co/guide/...

這裡我使用Elasticsearch模式來解析ES的慢日志查詢,操作步驟如下,其他的子產品操作也一樣:

前提:安裝好Elasticsearch和Kibana兩個軟體,然後使用Filebeat。

具體的操作官網有:https://www.elastic.co/guide/...

搞懂日志采集利器 Filebeat 并不難!
搞懂日志采集利器 Filebeat 并不難!
搞懂日志采集利器 Filebeat 并不難!

檢視Elasticsearch叢集,如下圖所示,把慢日志查詢的日志都自動解析出來了:

搞懂日志采集利器 Filebeat 并不難!

到這裡,Elasticsearch這個module就實驗成功了。

搞懂日志采集利器 Filebeat 并不難!

繼續閱讀