elasticsearch,logstash,Xml,elasticsearch,Logstash" /> elasticsearch,logstash,Xml,elasticsearch,Logstash" />

如何在logstash中解析多行XML?

如何在logstash中解析多行XML?,xml,elasticsearch,logstash,Xml,elasticsearch,Logstash,我的s3存储桶中有多行XML文件(~800行),我想在Elasticsearch中为它们编制索引,但无法在logstash中解析它们。字段有时为空,因此无法手动解析文件 我的xml看起来像: <ServiceSalesClosed> <ErrorLevel>0</ErrorLevel> <ErrorMessage/> <LaborSaleCustomerPay>50.00</LaborSaleCustomerPa

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

我的xml看起来像:

<ServiceSalesClosed>
   <ErrorLevel>0</ErrorLevel>
   <ErrorMessage/>
   <LaborSaleCustomerPay>50.00</LaborSaleCustomerPay>`
   ... 

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

我可以建议您设置多行吗:

codec => multiline {
     pattern => "<ServiceSalesClosed>" 
     negate => "true"
     what => "previous"
}

然后应该解析您的XML,在elasticsearch数据库中为“XML_内容”(包括解析的XML)创建字段,但也要将
ErrorLevel
提取到它自己的字段中

你没有提到是什么导致了你的问题。一般来说,使用多行编解码器或过滤器生成单个事件,然后将其传递给xml{}过滤器?您的文件中没有选项卡的迹象。但请检查elasticsearch中的
\u source
字段-这是否包含完整的XML?(如果没有,你能发布一个它包含的内容的示例吗?)我希望行与单个事件匹配,我希望每行都是Json字段,还有什么不符合你的要求?我所有的xml都在一个标记中“[…我的事件…]”我想忽略这个标记,我尝试删除标记,但没有成功。你知道我怎么做吗@Sobrique这将是一个单独的问题,我建议您这样问。我需要添加
auto\u flush\u interval=>1
来处理最后一个事件。
multiline { 
pattern => ["\t\t"]
what => next
} 
codec => multiline {
     pattern => "<ServiceSalesClosed>" 
     negate => "true"
     what => "previous"
}
filter {
  xml => {
    source => "message"
    target => "xml_content"
    xpath => [ "//ErrorLevel", "error_level" ] 
  }
}