如何在logstash中解析多行XML?

Ant*_* L. 3 xml elasticsearch logstash

我的s3存储桶中有多行XML文件(~800行),我想在Elasticsearch中对它们进行索引,但我无法在logstash中对它们进行解析.字段有时是空的,因此无法手动解析文件.

我的xml看起来像:

<ServiceSalesClosed>
   <ErrorLevel>0</ErrorLevel>
   <ErrorMessage/>
   <LaborSaleCustomerPay>50.00</LaborSaleCustomerPay>`
   ... 
Run Code Online (Sandbox Code Playgroud)

在我的输入中我有配置:

codec => multiline
{ 
pattern => "<ServiceSalesClosed.*"
what => next
}
Run Code Online (Sandbox Code Playgroud)

在我的过滤器中,以下配置:

multiline { 
pattern => ["\t\t"]
what => next
} 
Run Code Online (Sandbox Code Playgroud)

Sob*_*que 7

好吧,看起来问题是,您对多行编解码器和XML过滤器感到困惑.

我可以建议您设置多线:

codec => multiline {
     pattern => "<ServiceSalesClosed>" 
     negate => "true"
     what => "previous"
}
Run Code Online (Sandbox Code Playgroud)

这将采用任何包含此标记的行,并将其与前一行保持一致.这应该将您的XML节分组为可分析的块.你应该看到这个的结果_source.

然后在你的过滤器中:

filter {
  xml => {
    source => "message"
    target => "xml_content"
    xpath => [ "//ErrorLevel", "error_level" ] 
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,这应解析您的XML,在elasticsearch DB中为"xml_content"创建字段(包括您解析的XML),还要专门提取ErrorLevel到它自己的字段中.