2015-09-22 63 views
0

我与形式Logstash多的XML筛选

<ae cat="fixed" ts="2015-09-11T05:57:27.500-07:00"> 
<s u="admin"></s> 
</ae> 

的事件日志文件,我想使用XML logstash过滤器对这个文件进行解析,并得到@猫=固定

filter { 
    multiline { 
     pattern => '^<ae' 
     negate => true 
     what => "next" 
     } 
     xml { 
      store_xml => "false" 
      source => "message" 
      xpath => [ "/ae/@cat", "cat" ] 
     } 
    } 

这只会得到事件的第一行。我尝试了否定'假'或'以前'的东西,但似乎没有任何工作。

任何帮助将不胜感激。

回答

0

“如果该行不是以< ae开头,请保留下一行?”

似乎倒退了。

尝试:

multiline { 
    pattern => '^<ae' 
    negate => true 
    what => "previous" 
} 

注意,也不会释放的第一条消息,直到下一个开始,所以,对于测试,总是至少两个消息贴上它。

输出我得到:

{ 
     "message" => "<ae cat=\"fixed\" ts=\"2015-09-11T05:57:27.500-07:00\">\n <s u=\"admin\"></s>\n</ae>\n", 
     "@version" => "1", 
    "@timestamp" => "2015-09-22T19:39:12.371Z", 
      "host" => "0.0.0.0", 
      "tags" => [ 
     [0] "multiline" 
    ] 
} 
+0

这不工作,要么,我还是只获取XML的第一行。 – PANTS

+0

由输出添加。也许你的配置中还有其他的东西。 –

+0

只是为了澄清,上述工作,问题是我使用VIM将日志添加到测试输入文件,我想这样搞砸logstash的方式记住我的文件的状态,作为副作用只有第一行文件被读取。谢谢 – PANTS