一尘不染

如何在Logstash中解析多行XML?

elasticsearch

我的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
}

阅读 317

收藏
2020-06-22

共1个答案

一尘不染

好的,看起来好像是问题所在,您对多行编解码器和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到它自己的字段中。

2020-06-22