【问题标题】:How to parse xml with logstash and ignore global tag?如何使用logstash解析xml并忽略全局标签?
【发布时间】:2016-12-23 20:22:40
【问题描述】:

我正在使用 logstash 解析我的 s3 存储桶中的 xml 并将其发送到我的弹性搜索服务器。我所有的 xml 都在一个标签中

<ServiceSales xmlns="dmoes"> 
     <ServiceSalesDetailsClosed>...</ServiceSalesDetailsClosed> 
     <ServiceSalesDetailsClosed>...</ServiceSalesDetailsClosed>
</ServicesSales>

我想忽略第一个标签“ServiceSales”,我试过了:

在我的 xml 编解码器中使用“message.ServiceSales”作为源

xml {
   source => "message.ServiceSales"
   target => "ro_detail"
}

这样我通过 ServicesSalesDetailsClosed 获得了我的 xml divise,但事件未被解析

忽略并使用多行代码

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

除了第一个未解析的事件外,它可以工作。

你知道我该怎么做吗?

【问题讨论】:

    标签: xml elasticsearch logstash


    【解决方案1】:

    我有类似的情况。对于这个 xml:

    <ROOT number="34">
        <EVENT name="hey"/>
        <EVENT name="you"/>
    </ROOT>
    

    我使用这个logstash配置:

    input {
      file {
        path => "/path/prueba.xml"
        start_position => "beginning"
        sincedb_path => "/dev/null"
        codec => multiline {
          pattern => "<ROOT"
          negate => "true"
          what => "previous"
          auto_flush_interval => 1
        }
      }
    }
    filter {
      xml {
        source => "message"
        target => "xml_content"
      }
      split {
        field => "xml_content[EVENT]"
      }
      mutate {
        add_field => { "number" => "%{xml_content[number]}" }
        add_field => { "name" => "%{xml_content[EVENT][name]}" }
        remove_field => ['xml_content', 'message', 'path']
      }
    }
    output {
      stdout {
        codec => rubydebug
      }
    }
    

    我得到这个输出:

    {
            "number" => "34",
        "@timestamp" => 2016-12-23T12:20:35.587Z,
          "@version" => "1",
              "name" => "hey",
              "tags" => [
            [0] "multiline"
        ]
    }
    {
            "number" => "34",
        "@timestamp" => 2016-12-23T12:20:35.587Z,
          "@version" => "1",
              "name" => "you",
              "tags" => [
            [0] "multiline"
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多