[英]Logstash multiline filter configuration and java exceptions
我們最近開始收集所有帶有logstash的Java服務器日志。
默認的log4j配置可以正常工作,但是對於異常和sql查詢,我們使用:
http://logstash.net/docs/1.2.2/filters/multiline
filter {
multiline {
type => "somefiletype"
pattern => "^\s"
what => "previous"
}
}
但這不能100%精確地工作,某些Exceptions / SQL沒有所需的格式。
可以通過以下方式配置多行插件:
如果行的開頭沒有時間戳,則為多行日志消息?
改用多行編解碼器,文檔甚至提供了針對此確切問題的示例http://logstash.net/docs/1.2.2/codecs/multiline
我終於成功地從日志文件中解析了多行日志消息。 請注意,您的日志消息可能會略有不同,需要更改grok模式。 主要解決方法是將多行過濾器放在grok過濾器之前,並在它和grok過濾器之間進行drop {}。 重要:使用Grok調試器調試grok過濾器。
input {
stdin {
type => "log4j"
}
}
filter {
if [type] == "log4j" {
multiline {
pattern => "^[\d]{4}\-[\d]{2}\-[\d]{2} "
negate => true
what => previous
}
if "_grokparsefailure" in [tags] {
drop { }
}
grok {
match => {
"message" => "(?<logdate>[\d]{4}\-[\d]{2}\-[\d]{2} [\d]{2}:[\d]{2}:[\d]{2},[\d]{3})%{SPACE}%{NUMBER:unknown1}%{SPACE}%{LOGLEVEL:severity}%{SPACE}\[(?<logger>[^\]]+)\]%{SPACE}\((?<thread>[^\)]+)\)%{SPACE}%{GREEDYDATA:message}"
}
overwrite => [ "message" ]
}
if !("_grokparsefailure" in [tags]) {
date {
match => [ "logdate", "YYYY-MM-dd HH:mm:ss,SSS"]
}
}
}
}
output {
# Print each event to stdout.
stdout {
codec => json
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.