我有以下JSON消息:
{
"type":"exception",
"content":"2014-11-25T20:11:55+00:00 ERR (3):\nexception 'Exception' with message 'some error' in \/private\/var\/www\/index.php:88\nStack trace:\n#0 {main}\n2014-11-25T20:11:56+00:00 ERR (3):\nexception 'Exception' with message 'some error' in \/private\/var\/www\/index.php:88\nStack trace:\n#0 {main}"
}
如您所见,我想解析content
字段,即多行(异常日志)。序列化为JSON时已插入\n
。这是我的logstash配置文件,直到现在:
input {
tcp {
port => 1337
}
}
filter {
json {
source => "message"
}
if [type] == "exception" {
mutate {
replace => ["message", "%{content}"]
split => ["message", "\\n"]
}
multiline {
pattern => "%{TIMESTAMP_ISO8601}"
negate => true
what => previous
}
}
output {
if [type] == "exception" {
elasticsearch { host => localhost }
stdout {
codec => rubydebug
}
}
}
这里的问题是多线不起作用。我认为它将作用于message
字段,因此我用内容字段替换了该消息。然后我还添加了拆分,以便再次将字符串拆分为行。但这也不起作用。我在这里做错了什么?
最重要的问题:如何访问split
的输出?是否可以根据正则表达式进行拆分?