使用自定义时间戳值更新 logstash 中的 @timetamp 字段
Update @timetamp field in logstash with custom timestamp value
我有以下用于解析异常堆栈跟踪的 logstash 配置文件。
堆栈跟踪
2015-03-02 09:01:51,040 [com.test.MyClass] ERROR - execution resulted in Exception
com.test.core.MyException
<exception line1>
<exception line2>
2015-03-02 09:01:51,040 [com.test.MyClass] ERROR - Encountered Exception, terminating execution
配置文件:
input {
stdin {}
}
filter {
multiline {
pattern => "(^%{TIMESTAMP_ISO8601}) | (^.+Exception+) | (^.+Error+)"
negate => true
what => "previous"
}
}
output {
stdout { codec => rubydebug }
}
我能够将堆栈跟踪解析为单个 logstash 字段名称 消息。但是我想用第一个异常行的时间戳更新 @timestamp 即 2015-03-02 09:01:51,040
目前它一直采用默认时间戳 @timestamp
如有任何帮助,我们将不胜感激。
您需要使用GROK
过滤器提取时间值,然后使用DATE
过滤器将值解析为@timestamp
例如:
input {
stdin {
codec => multiline {
pattern => "(^%{TIMESTAMP_ISO8601}) | (^.+Exception+) | (^.+Error+)"
negate => true
what => "previous"
}
}
}
filter {
grok {
match => ["message" , "%{TIMESTAMP_ISO8601:logtime} %{GREEDYDATA:msg}"]
}
date {
match => ["logtime", "YYYY-MM-dd HH:mm:ss,SSS"]
}
}
output {
stdout { codec => rubydebug }
}
此外,在输入中使用多行而不是过滤器,过滤器中的多行会将消息折叠成消息数组,而不是单个消息字符串。所以,它会导致 grok 和日期过滤器失败。
我有以下用于解析异常堆栈跟踪的 logstash 配置文件。
堆栈跟踪
2015-03-02 09:01:51,040 [com.test.MyClass] ERROR - execution resulted in Exception
com.test.core.MyException
<exception line1>
<exception line2>
2015-03-02 09:01:51,040 [com.test.MyClass] ERROR - Encountered Exception, terminating execution
配置文件:
input {
stdin {}
}
filter {
multiline {
pattern => "(^%{TIMESTAMP_ISO8601}) | (^.+Exception+) | (^.+Error+)"
negate => true
what => "previous"
}
}
output {
stdout { codec => rubydebug }
}
我能够将堆栈跟踪解析为单个 logstash 字段名称 消息。但是我想用第一个异常行的时间戳更新 @timestamp 即 2015-03-02 09:01:51,040
目前它一直采用默认时间戳 @timestamp
如有任何帮助,我们将不胜感激。
您需要使用GROK
过滤器提取时间值,然后使用DATE
过滤器将值解析为@timestamp
例如:
input {
stdin {
codec => multiline {
pattern => "(^%{TIMESTAMP_ISO8601}) | (^.+Exception+) | (^.+Error+)"
negate => true
what => "previous"
}
}
}
filter {
grok {
match => ["message" , "%{TIMESTAMP_ISO8601:logtime} %{GREEDYDATA:msg}"]
}
date {
match => ["logtime", "YYYY-MM-dd HH:mm:ss,SSS"]
}
}
output {
stdout { codec => rubydebug }
}
此外,在输入中使用多行而不是过滤器,过滤器中的多行会将消息折叠成消息数组,而不是单个消息字符串。所以,它会导致 grok 和日期过滤器失败。