我的s3存储桶中有多行XML文件(约800行),我想在Elasticsearch中对其进行索引,但无法在logstash中对其进行解析。字段有时为空,因此无法手动分析文件。
我的xml看起来像:
<ServiceSalesClosed> <ErrorLevel>0</ErrorLevel> <ErrorMessage/> <LaborSaleCustomerPay>50.00</LaborSaleCustomerPay>` ...
在我的输入中,我有配置:
codec => multiline { pattern => "<ServiceSalesClosed.*" what => next }
在我的过滤器中,以下配置:
multiline { pattern => ["\t\t"] what => next }
好的,看起来好像是问题所在,您对多行编解码器和XML过滤器感到困惑。
我可以建议您设置多行:
codec => multiline { pattern => "<ServiceSalesClosed>" negate => "true" what => "previous" }
这将采用 不 包含此标记的任何行,并将其与以前的行保持一致。这应该将XML节分成可分析的块。您应该在中看到此结果_source。
_source
然后在您的 过滤器中 :
filter { xml => { source => "message" target => "xml_content" xpath => [ "//ErrorLevel", "error_level" ] } }
然后,这应该解析您的XML,在elasticsearch DB中为“ xml_content”创建字段(包括您解析的XML),而且还应专门提取ErrorLevel到它自己的字段中。
ErrorLevel