filebeat採集資料的幾個痛點的解決方案
阿新 • • 發佈:2019-02-04
1.行轉列
filebeat採集多行日誌的時候會把日誌分開來採集,這樣傳遞到logstash的時候就無法正確解析了,所以用把多行日誌統一採集。
這時候可以使用:multiline配置選項。
multiline:適用於日誌中每一條日誌佔據多行的情況,比如各種語言的報錯資訊呼叫棧。這個配置的下面包含如下配置:
pattern:多行日誌開始的那一行匹配的pattern
negate:是否需要對pattern條件轉置使用,不翻轉設為true,反轉設定為false
match:匹配pattern後,與前面(before)還是後面(after)的內容合併為一條日誌
max_lines:合併的最多行數(包含匹配pattern的那一行)
timeout:到了timeout之後,即使沒有匹配一個新的pattern(發生一個新的事件),也把已經匹配的日誌事件傳送出去
譬如採集tomcat日誌的時候可以這麼配
multiline:
pattern: ‘^\[‘
negate: true
match: after
這樣就能採集每一次輸入的多行日誌了,不過對已經存在的日誌會一窩蜂的採集。
2.帶上自定義引數
基本上filebeat資料通過logstash解析後傳到es的資料都會進行分類。採集的時候就必須帶上採集資料所屬的類別,以便於之後的分析。filebeat可以在採集的資料上增加fields自定義引數,便於解析。
- fields:向輸出的每一條日誌新增額外的資訊,比如“level:debug”,方便後續對日誌進行分組統計。預設情況下,會在輸出資訊的fields子目錄下以指定的新增fields建立子目錄,例如fields.level。
fields: level: debug
不過這樣採集的資料還是無法進行分析,因為資料到達es後,es預設會將資料進行分詞,錄入的資料會被分詞器分析稱各個term,無法進行分類。必須使用動態模板對映logstash傳輸到es的資料。
3.多目錄採集
很多時候會採集多目錄下的日誌資料,並且每個日誌資料都會有自己的自定義引數,這時候可以定義多個input_type來解決這個問題,寫法如下
filebeat.prospectors:
- input_type: log
paths:
- /data1/server/tomcat/tomcat12004/logs/*
fields:
logIndex: tomcat
docType: tomcat-log
system: m.openapi
multiline:
pattern: ‘^\[‘
negate: true
match: after
- input_type: log
paths:
- /data1/server/tomcat/tomcat12001/logs/catalina.out
fields:
logIndex: tomcat
docType: tomcat-log
system: csb
multiline:
pattern: ‘^\[‘
negate: true
match: after