XML et logstash : index non rempli


#1

Bonjour à tous,
je débute sur ELK et j'ai déjà fait quelques progrès (plusieurs indexes et quelques dashboard sur Kibana). Jusqu'à présent j'utilisais des parsers "homemade" pour générer mes fichiers json pour l'indexation.
Là, je pars sur le parsing de XML avec logstash. Je suis sur une machine windows.

Après quelques essais, en parcourant la doc et les forums, j'ai maintenant un fichier de conf qui semble ok (testé avec --config.test_and_exit )
Mais j'ai dû louper un (ou plusieurs) truc car logstash ne fait rien du tout.
Il reste bloqué en mode

[2018-12-02T05:40:26,317][INFO ][filewatch.observingtail  ] START, creating Discoverer, Watch with file and sincedb collections
[2018-12-02T05:40:26,305][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2018-12-02T05:40:26,811][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

et rien ne se passe.

Mon fichier XML d'exemple est le suivant:

<?xml version="1.0" encoding="ISO-8859-1"?>
<JDBOR>
  <DisorderList count="2">
    <Disorder id="2">
      <OrphaNumber>58</OrphaNumber>
      <Name lang="en">Alexander disease</Name>
      <DisorderFlagList count="1">
        <DisorderFlag id="475">
          <Label>on-line</Label>
        </DisorderFlag>
      </DisorderFlagList>
      <SynonymList count="1">
        <Synonym lang="en">AxD</Synonym>
      </SynonymList>
      <DisorderType id="21394">
        <Name lang="en">Disease</Name>
      </DisorderType>
    </Disorder>
    <Disorder id="3">
      <OrphaNumber>61</OrphaNumber>
      <Name lang="en">Alpha-mannosidosis</Name>
      <DisorderFlagList count="1">
        <DisorderFlag id="475">
          <Label>on-line</Label>
        </DisorderFlag>
      </DisorderFlagList>
      <SynonymList count="1">
        <Synonym lang="en">Lysosomal alpha-D-mannosidase deficiency</Synonym>
      </SynonymList>
      <DisorderType id="21394">
        <Name lang="en">Disease</Name>
      </DisorderType>
    </Disorder>
  </DisorderList>
</JDBOR>

Et mon fichier de conf:

input {
  file {
    path => "C:\Elastic\logstash-6.4.2\bin\disample.xml"
    start_position => "beginning"
    sincedb_path => "NUL"
    codec => multiline {
    ##  pattern => "^<Disorder "
	  pattern => "^<Disorder .*>"
      negate => true
      what => "previous"
    }
  }
}
filter 
{
  xml {
      store_xml => "false"
      source => "disample.xml"
      xpath => [ 
        "/JDBOR/DisorderList/Disorder/Name/text()", "Disease_name",
		"/JDBOR/DisorderList/Disorder/OrphaNumber/text()", "Orpha",
		"/JDBOR/DisorderList/Disorder/SynonymList/Synonym/text()", "synonyms",
		"/JDBOR/DisorderList/Disorder/DisorderFlagList/DisorderFlag/Label/text()", "Flag",
		"/JDBOR/DisorderList/Disorder/DisorderType/Name/text()", "Type"
      ]
  }
}
output {
 stdout { codec => rubydebug }
 elasticsearch {
  index => "diseases-xml"
  hosts => ["localhost:9200"]
  document_id => "%{[id]}"
 }
} 

Et bref, ça bloque comme indiqué au début.
L'idée étant que je souhaiterais faire ce traitement via logstash et ne pas repartir sur un autre parser pour générer du json

ELK en 6.4.2


(David Pilato) #2

Je ne sais pas si @colinsurprenant aurait une idée.

Au cas où cela pourrait aider d'une autre manière, j'ai développé un support du XML dans FSCrawler. A tester peut-être selon ton besoin.