總結在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...