背景:
我有一个自定义生成的日志文件,其具有以下模式:
[2014-03-02 17:34:20] - 127.0.0.1|ERROR| E:\xampp\htdocs\test.php|123|subject|The error message goes here ; array (
'create' =>
array (
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
),
)
[2014-03-02 17:34:20] - 127.0.0.1|DEBUG| flush_multi_line
第二个条目 [2014-03-02 17:34:20] - 127.0.0.1|DEBUG| flush_multi_line
是一个虚拟行,只是为了让logstash知道多行事件已经结束,此行稍后会被删除。
我的配置文件如下:
input {
stdin{}
}
filter{
multiline{
pattern => "^\["
what => "previous"
negate=> true
}
grok{
match => ['message',"\[.+\] - %{IP:ip}\|%{LOGLEVEL:loglevel}"]
}
if [loglevel] == "DEBUG"{ # the event flush line
drop{}
}else if [loglevel] == "ERROR" { # the first line of multievent
grok{
match => ['message',".+\|.+\| %{PATH:file}\|%{NUMBER:line}\|%{WORD:tag}\|%{GREEDYDATA:content}"]
}
}else{ # its a new line (from the multi line event)
mutate{
replace => ["content", "%{content} %{message}"] # Supposing each new line will override the message field
}
}
}
output {
stdout{ debug=>true }
}
“content”字段的输出结果为:The error message goes here; array(
问题:
我的问题是我想把其余的多行存储到内容字段中:
The error message goes here ; array (
'create' =>
array (
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
),
)
所以我可以稍后删除消息字段。
@message 字段包含整个多行事件,因此我尝试使用 mutate 过滤器 并对其使用 replace 函数,但我无法使其工作 :(。
我不理解 Multiline 过滤器的工作方式,如果有人能为此提供一些帮助,将不胜感激。
谢谢,
Abdou。