使用Grok解析动态xml结构化日志内容是否可行,例如:
<tag_1> contents </tag_1> ... <tag_N> contents </tag_N>
其中“tag_ *”是字段名称和“内容” - 实际内容。 因此,解析的消息看起来像:
{
"tag_1": [
[
"contents"
]
],
....
"tag_N": [
[
"contents"
]
]
}
答案 0 :(得分:1)
不在grok
。您将需要使用ruby代码来解析XML并将其抛入event
结构。
如果你的XML是超常规的(即有一个根元素,只有一个级别),你可以使用这样的代码:
filter {
ruby {
code => "
msg = event['message'].split('><');
for part in msg
endpos = part.index('</')
startpos = part.index('>')
if !endpos.nil? && !startpos.nil? then
tag = part[0,startpos];
text = part[startpos+1,endpos-startpos-1];
event[tag]=text
end
end
"
}
}
如果您的xml更复杂,那么您将不得不求助于一个真正的XML解析器并找出如何将其与logstash一起使用(我从未将外部库带入logstash)。