1

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

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

其中“tag_*”是字段名称,“contents”是实际内容。因此,解析后的消息如下所示:

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

....

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

1 回答 1

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

于 2014-07-08T13:12:53.277 回答