logstash - Logstash:多行 XML 日志的自定义分隔符
问题描述
我有 XML 日志,其中日志以“=======”关闭,例如
<log>
<level>DEBUG</level>
<message>This is debug level</message>
</log>
=======
<log>
<level>ERROR</level>
<message>This is error level</message>
</log>
=======
每个日志可以跨越多行。
如何使用logstash解析这些日志?
解决方案
这可以使用多行编解码器来完成。分隔符“=======”可以在这样的模式中使用
input {
file {
type => "xml"
path => "/path/to/logs/*.log"
codec => multiline {
pattern => "^======="
negate => "true"
what => "previous"
}
}
}
filter {
mutate {
gsub => [ "message", "=======", ""]
}
xml {
force_array => false
source => "message"
target => "log"
}
mutate {
remove_field => [ "message" ]
}
}
output {
elasticsearch {
codec => json
hosts => ["http://localhost:9200"]
index => "logs-%{+YYYY.MM.dd}"
}
}
这里和的组合pattern
意味着negate => true
:如果一行不以“=======”开头,则它属于前一个事件(因此what => "previous"
)。当带有分隔符的行被击中时,我们开始一个新事件。在过滤器中,分隔符被简单地删除,gsub
并使用 xml 插件解析 XML。