XML hiérarchique avec logstash

Bonjour

Je cherche à analyser via logstash un fichier xml organisé hiérarchiquement comme l'exemple suivant :

<xml>
   <listniv1>
        <id_listniv1>id1_1</id_listniv1>
	    <listniv2>
	        <id_listniv2>id2_1</id_listniv2>
			<msg>
			    <id_msg>idmsg1<id_msg>
				...
		    </msg>
			<msg>
			    <id_msg>idmsg2<id_msg>
				...
		    </msg>
		</listniv2>	  
	    <listniv2>
	        <id_listniv2>id2_2</id_listniv2>
			<msg>
			    <id_msg>idmsg3<id_msg>
				...
		    </msg>
			<msg>
			    <id_msg>idmsg4<id_msg>
				...
		    </msg>
		</listniv2>	   
    </listniv1>
</xml>

Les événements à traiter sont identifiés par les tags <msg>.
Si j'utilise le codec "multiline" pour découper les messages au niveau du tag <msg> je perds les infos de plus haut niveau dans la hiérarchie xml.
Hors j'ai besoin dans le message final de retrouver l'id de la liste de niveau 1 et 2 (</id_listniv1> et </id_listniv2>) dans chaque message comme l'exemple de sortie ci-dessous :

Résultat attendu

{
  id_listniv1 : id1_1
  id_listniv2 : id2_1
  id_msg : idmsg1
  ...
}
{
  id_listniv1 : id1_1
  id_listniv2 : id2_1
  id_msg : idmsg2
  ...
}
{
  id_listniv1 : id1_1
  id_listniv2 : id2_2
  id_msg : idmsg3
  ...
}
{
  id_listniv1 : id1_1
  id_listniv2 : id2_2
  id_msg : idmsg4
  ...
}

Sauriez-vous comment procéder avec logstash et le plugin xmlfilter ?

Pas d'idée de mon côté. Peut-être que @fbaligand en a une ? :hugs:

J’aurais tendance à tenter ça :

  • récupérer la source complète xml dans un seul événement
  • utiliser xml filter pour le parser et avoir une structure arborescente dans l’événement Logstash
  • utiliser le filtre “split” sur le champ [xml][listniv1][listniv2][msg] pour avoir un événement par balise msg, tout en conservant les infos racine

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.