Filebeat採集日誌講解(一)

2021-09-30 16:48:42 字數 3412 閱讀 4112

總結在elkf中,filebeat作為日誌採集端,採集日誌併發送到kafka。input就是以檔案形式儲存的log檔案,output就是kafka集群。

在採集日誌中一般情況有以下幾點需要注意的:

輸出內容確定,一般包括時間戳,主機名,日誌型別,日誌內容,其他的根據業務的實際需求,無用資訊可以直接過濾掉;

輸出格式,一般使用json,需要自己拼成json格式;

多路徑採集日誌配置,同時採集多個服務的日誌;

對不同種類的日誌分類,後續在logstash解析的時候可以實現不同的邏輯;

針對報錯的日誌進行多行合併;

日誌偏移記錄以及斷點續傳等細節上的配置

本節課我們將介紹filebeat的一些基本配置使用,課程中介紹的filebeat基於6.3.0版本,配置上與早期版本會有些出入。

filebeat.inputs:

- type: log

enabled: true

encoding: utf-8

paths:

- /var/log/test.log

說明:

這樣,乙個簡單的採集檔案的配置我們就完成了。那麼我們可以啟動filebeat來簡單測試一下是否成功。

配置控制台輸出

output.console:

pretty: true

啟動

/usr/share/filebeat/bin/filebeat  -path.config /etc/filebeat
寫入資料

echo hello >> /var/log/a.log
如果配置正確,控制台會列印如下資訊:

,

"host": ,

"source": "/home/ubuntu/test.log",

"offset": 58,

"message": "hello",

"input": ,

"prospector": ,

"beat":

}

從上面簡單配置控制台列印的資訊中,我們可以發現,控制台列印了很多的相關資訊,這裡面有些資訊並不是我們想要的,所以我們可以選擇自定義輸出其中部分資訊。

自定義輸出內容:

codec.format:

string: '% % % %'

再次啟動filebeat,我們會看到控制台列印輸出的資訊是我們自定義後的資訊:

hello log hostname
上面提到我們可以自定義選擇輸出的內容,那我們能不能也自定義選擇輸出格式呢?答案是肯定的,並且這是非常有必要的,特定的格式會對後面logstash的解析非常友好。這裡建議大家使用json格式輸出。

自定義輸出格式:

codec.format:

string: ',\"hostname\":%,\"message\":%}'

再次啟動filebeat,我們會看到控制台列印輸出的資訊是我們自定義後的資訊:

生產環境我們一般每台伺服器上都要部署乙個filebeat服務,用來採集這台機器上所有需要採集的日誌,包括應用日誌、服務日誌、系統日誌等等。這些日誌所在的路徑肯定是不同的,所以我們需要配置多個paths來採集。

配置多路徑:

filebeat.inputs:

- type: log

paths:

- /var/log/system.log

- /var/log/wifi.log

我們在實現多路徑採集後會發現,每個路徑下的日誌種類並不相同,有的是應用日誌,有的是系統日誌,不同日誌的格式也不相同,這樣後面logstash解析起來會非常麻煩,所以我們要根據不同種類的日誌進行分類,這樣logstash才能根據不同種類的日誌執行不同的解析邏輯。

我們有多種方式給日誌進行分類,這裡可以通過tags的方式標記種類:

tags: ["system"]
不過建議使用另一種方式來給日誌分類,下面會介紹另一種方式。

上面介紹了自定義輸出內容格式,但這都是在原有的資料基礎之上進行改變,我們能不能自己新增自定義欄位呢?同樣是可以的。

拿日誌分類舉例:

fields:

log_type: system

我們修改自定義輸出:

codec.format:

string: ',\"hostname\":%,\"log_type\":%,\"message\":%}'

啟動filebeat,控制台顯示:

很多場景都有合併多行日誌的需求,最典型的就是針對報錯日誌。報錯日誌列印是一行一行的,但我們往往並不希望將報錯的日誌分開,乙個是為了檢索檢視方便,另乙個主要原因就是報錯日誌的是有先後順序的。因為錯誤日誌通常都是在乙個時間點列印出來的,日誌上的記錄時間往往相同,所以檢索的時候錯誤日誌順序往往會亂掉。當然我們可以使用時間戳,但是結合第一點考慮,我們一般都會選擇合併錯誤日誌到一行中。

合併日誌配置:

multiline.pattern: '^\['

multiline.negate: true

multiline.match: after

說明:

multiline.negate

multiline.match

效果false

after

如果匹配,被追加前一行的後面

false

before

如果匹配,被追加下一行的前面

true

after

如果不匹配,被追加前一行的後面

true

before

如果不匹配,被追加下一行的前面

其他配置:

multiline.flush_pattern

指定正規表示式,如果匹配則從記憶體中重新整理當前行。

multiline.max_lines

最大合併行數,如果超過,超過部分將丟棄,預設500。

multiline.timeout

合併行超時時間,預設5秒。這個會導致日誌最後一行的延遲。

本節課我們介紹了filebeat採集log型別資料的基本使用。本節課的內容基本滿足了我們日誌採集大多數的使用場景,下一節課我們繼續介紹filebeat如何配置輸出。

Filebeat採集日誌講解(二)

filebeat輸出到logstash filebeat輸出到elasticsearch 上節課我們講述了關於filebeat採集日誌資料的一些基本使用,我們可以自定義輸出一些我們想要的資訊和格式。本節課我們將繼續 filebeat如何配置輸出。filebeat的輸出主要支援一下幾個元件 conso...

filebeat 資料採集流程

filebeat啟動流程 講解了filebeat的啟動流程,filebeat在構建完crawler物件,開始採集流程。crawler的start方法內,會啟動inputs func c crawler start pipeline beat.pipeline,r registrar.registra...

filebeat與rsyslog日誌獲取簡單對比

日誌 需要部署在客戶的機子上,所以不能太大,也不能消耗太多效能,根據需求找了以下幾個開源的方案 名稱開發語言 rpm安裝包大小 filebeat golang 22.8m rsyslog c717kb 這是網上的比較,比較全面 1,filebeat支援的日誌獲取方式 1 通過模組獲取物件 apach...