logstash 多行合並
環境:內網UAT環境ELK(elasticsearch、logstash、kibana)
日誌類型:Java ERROR Log
格式:[級別] [時間] [class類] | message
grok:\[%{LOGLEVEL}\] \[%{TIMESTAMP_ISO8601}\] \[%{JAVAFILE:class}\] \| (?<info>([\s\S]*))
問題:
在使用ELK 檢索日誌時發現本應屬於一條內容的日誌分到了多條日誌顯示,查看原日誌文件發現在應用打日誌時就換行了。
日誌行開頭為“[” 檢查logstash 客戶端配置在file{}段已經有
codec => multiline {
pattern => "^\["
negate => true
what => "previous"
但並沒有解決換行的問題,查資料發現需要在filter{}段寫multiline相關配置。
方案實施:
編寫logstash 配置文件,在filter{}字段增加multiline 相關配置
multiline { pattern => "^\[" negate => true what => "previous" }
重啟logstash……結果logstash 報錯了……
看了下錯誤日誌,顯示的大概內容為沒有multiline 插件……
安裝logstash-filter-multiline
因為是離線環境,又到rubygems網站下載了對應的filter-multiline-gem文件做離線安裝,將下載回來的文件放到logstash/vendor/cache
目錄下
執行如下命令執行安裝
bin/logstash-plugin install --local vendor/logstash/vendor/cache/logstash-filter-multiline-3.0.4.gem
看到如下輸出即表示安裝成功
Validating /root/logstash-filter-multiline-3.0.4.gem Installing logstash-filter-multiline
有類似上面信息輸出,即可忽略連接錯誤,如下
Error Bundler::HTTPError, retrying 1/10
Could not fetch specs from https://rubygems.org/
可以查看Gemfile 文件最後一行,有類似如下信息即安裝成功
gem "logstash-filter-multiline", "3.0.4", :path => "vendor/local_gems/ffa5f9f7/logstash-filter-multiline-3.0.4"
驗證
啟動logstash,這次沒有報錯信息了,再看kibana 上的日誌已經合並為一行
後續
某一條錯誤日誌打印了有1.3k行,日誌又分為了多條顯示,比對後發現前兩條正好都是501行,懷疑是有默認行數限制,查閱資料驗證了這點懷疑,修改默認行數值解決
默認行數限制
默認行數是在codec 字段,修改如下
codec => multiline {
max_bytes => "20MiB" #修改最大值
max_lines => 2000 #修改合並行數
pattern => "^\["
negate => true
what => "previous"
}
完整配置
input{
file {
path => ["/logs/error-*.log"]
type => "error"
codec => multiline {
max_bytes => "20MiB"
max_lines => 2000
pattern => "^\["
negate => true
what => "previous"
}
start_position => "beginning"
}
}
filter {
if [type] == "error" {
multiline {
pattern => "^\["
negate => true
what => "previous"
}
grok {
match => {
"message" => "\[%{LOGLEVEL:loglevel}\] \[%{TIMESTAMP_ISO8601:time}\] \[%{JAVAFILE:class}\] \| (?<info>([\s\S]*))"
}
overwrite => ["message"]
}
}
}
output {
if [type] == "error" {
elasticsearch {
hosts => ["localhost:9200"]
index => "error-%{+YYYY-MM}"
}
}
}
參考資料
Grok 表達式語法:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
正則:http://manual.macromates.com/en/regular_expressions
行數限制:https://blog.csdn.net/jiao_fuyou/article/details/50350497
Grok Debugger :http://grokdebug.herokuapp.com 需梯子
:http://grok.qiexun.net/ 無需梯子
logstash 多行合並