2016-05-21 12 views
0

Ich bin anewbie auf den ELK-Stack und ich versuche, die unten stehende Beispiel-XML-Datei mit Logstash zu verarbeitenParsen von XML mit Logstash

<Book:Body> 
    <Book:Head> 
     <bookname>Book:Name</bookname> 
      <ns:Hello xmlns:ns="www.example.com"> 
       <ns:BookDetails> 
        <ns:ID>123456</ns:ID> 
        <ns:Name>ABC</ns:Name> 
       </ns:BookDetails> 
     </ns:Hello xmlns:ns="www.example.com"> 
    </Book:Head> 
</Book:Body> 

ich die unten conf bin mit dem Datum zu verarbeiten:

input{ 
     file{ 
       path =>"/opt/data/book3.xml" 
           codec => multiline { 
           pattern =>"<Book:Body>" 
           negate => "true" 
           what => "previous"} 
     } 
} 

filter { 

       xml { 
         store_xml => "false" 
         source => "message" 
         remove_namespaces => "true" 

         xpath => [ 
       "/Body/Head/Hello/BookDetails/ID/text()", "ID", 
       "/Body/Head/Hello/BookDetails/Name/text()", "Name" 
       ] 
        } 

       mutate { 
         add_field => ["IDIndexed", "%{ID}"] 
         add_field => ["NameIndexed", "%{Name}"] 
         } 
} 
output{ 
     elasticsearch {hosts=>"localhost"} 
       stdout { codec => rubydebug } 
     } 

ich habe ausführlichen Modus für Logstash aktiviert und es gibt keine Fehlermeldung angezeigt wird, aber der Ausgang hält an unter Punkt

Starting pipeline {:id=>"main", :pipeline_workers=>1, :batch_size=>125, :batch_delay=>5, :max_inflight=>125, :level=>:info} 
Pipeline main started 

Ich habe dafür gesorgt, dass die Datei nur einmal

auf dieser und XML

+0

Überprüfen Sie Ihren XPath. Es ist ohne Namespace –

Antwort

0

das mehrzeilige Filter verwenden gelesen wird jede Hilfe dankbar ist ein bisschen schwierig und nicht sehr stabil. Ich empfehle, es einfach zu halten, sicherzustellen, dass keine neuen Zeilen in der Datei vorhanden sind, und dann den XML-Filter zu verwenden.