我的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
}
答案 0 :(得分:7)
好的,看起来问题是,您对多行编解码器和XML过滤器感到困惑。
我可以建议您设置多线:
codec => multiline {
pattern => "<ServiceSalesClosed>"
negate => "true"
what => "previous"
}
这将占用不包含此标记的任何行,并将其与前一行保持一致。这应该将您的XML节分组为可分析的块。您应该在_source
中看到此结果。
然后在过滤器中:
filter {
xml => {
source => "message"
target => "xml_content"
xpath => [ "//ErrorLevel", "error_level" ]
}
}
然后,这应解析您的XML,在elasticsearch DB中为“xml_content”创建字段(包括您解析的XML),还要专门将ErrorLevel
提取到它自己的字段中。