是否可以使用Grok解析动态xml结构的日志内容?

时间:2014-07-04 07:44:02

标签: parsing dynamic logstash grok

使用Grok解析动态xml结构化日志内容是否可行,例如:

<tag_1> contents </tag_1> ... <tag_N> contents </tag_N>

其中“tag_ *”是字段名称和“内容” - 实际内容。 因此,解析的消息看起来像:

{
  "tag_1": [
    [
      "contents"
    ]
  ],

....

  "tag_N": [
    [
      "contents"
    ]
  ]
}

1 个答案:

答案 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)。