# Problemas con el análisis de archivo xml con logstash

**URL:** <https://discuss.elastic.co/t/problemas-con-el-analisis-de-archivo-xml-con-logstash/50824>\
**Category:** Elastic en Español\
**Created:** [May 24, 2016, 10:24am UTC](https://discuss.elastic.co/t/problemas-con-el-analisis-de-archivo-xml-con-logstash/50824 "2016-05-24T10:24:12Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Lop](https://avatars.discourse-cdn.com/v4/letter/l/ecb155/32.png) [@Lop](https://discuss.elastic.co/u/Lop)\
**Post date:** [May 24, 2016, 10:24am UTC](https://discuss.elastic.co/t/problemas-con-el-analisis-de-archivo-xml-con-logstash/50824/1 "2016-05-24T10:24:12Z")

</div>

Hola a Todos  
Soy muy novata con ELK y tengo un problema para el que necesitaría vuestra ayuda.  
Tengo una serie de archivos xml con esta configuración  
` <row> <Date>16/05/2016</Date> <Hour>00:00:03</Hour> <Unit>OTT-TV-Ulises3</Unit> <TestVerdict>PASS</TestVerdict> <Description>Test OK</Description> <ChannelName>Canal Plus Series</ChannelName> <ZappingTime>4515</ZappingTime> </row> <row> <Date>16/05/2016</Date> <Hour>00:00:03</Hour> <Unit>OTT-TV-Camarillo2</Unit> <TestVerdict>PASS</TestVerdict> <Description>Test OK</Description> <ChannelName>National Geographic</ChannelName> <ZappingTime>4485</ZappingTime> </row> <row> <Date>16/05/2016</Date> <Hour>00:00:03</Hour> <Unit>OTT-FO-AREQUIPA2</Unit> <TestVerdict>PASS</TestVerdict> <Description>Test OK</Description> <ChannelName>DisneyJr</ChannelName> <ZappingTime>4469</ZappingTime> </row> <row> <Date>16/05/2016</Date> <Hour>00:00:04</Hour> <Unit>OTT-FO-PILAR</Unit> <TestVerdict>PASS</TestVerdict> <Description>Test OK</Description> <ChannelName>Calle 13</ChannelName> <ZappingTime>10797</ZappingTime> </row> </rows>`  
Para la configuración de logstash he usado el codec multilinea para agrupar documentos y el filtro xml donde creo los campos que quiero con los xpath correspondientes tal que así:

> input {  
> file {  
> path =\> "C:/ES/\*.xml"  
> start\_position =\> "beginning"  
> type =\> "stock3"  
> codec =\>multiline {  
> pattern =\> "/row"  
> negate =\> "true"  
> what =\> previous  
> }  
> }  
> }  
> filter {  
> xml {  
> source =\> message  
> store\_xml =\> "false"  
> remove\_namespaces =\> "true"  
> xpath =\> [  
> "/rows/row/Date/text()", "Date",  
> "/rows/row/Hour/text()", "Hour",  
> "/rows/row/Unit/text()", "Unit",  
> "/rows/row/TestVerdict/text()", "TestVerdict",  
> "/rows/row/Description/text()", "Description",  
> "/rows/row/ChannelName/text()", "ChannelName",  
> "/rows/row/ZappingTime/text()", "ZappingTime"  
> ]  
> }  
> date {  
> match =\> ["Hour","HH:mm:ss"]  
> target =\> "@timestamp"  
> }  
> date {  
> match =\> ["Date","dd/MM/yyyy"]  
> }  
> }  
> output{  
> elasticsearch{  
> index =\> ["logstash-prueba3-%{+yyyy.MM.dd}"]  
> hosts =\> ["localhost:9200"]  
> }  
> stdout { codec =\> rubydebug }  
> }

El resultado es una sola linea tal que así:

> Pipeline main started  
> {  
> "@timestamp" =\> "2016-05-24T10:09:43.996Z",  
> "message" =\> "?\<?xml version=\"1.0\" encoding=\"utf-8\"?\>\r\n\r\n \r\n 16/05/2016\r\n 00:00:03\r\n OTT-FO-Barcelona\r\n PASS\r\n Test OK\r\n Cosmo\r\n 5390\r",  
> "@version" =\> "1",  
> "tags" =\> [  
> [0] "multiline"  
> ],  
> "path" =\> "C:/ES/xml/OTT live/TVOTT/Prueba corta/TVOTT\_prueba1.xml",  
> "host" =\> "vcamarillo-PC",  
> "type" =\> "stock3"  
> }

He realizado múltiples configuraciones con los xpath pero no consigo nada distinto.  
Me podríais ayudar?

Muchas Gracias  
Un saludo  
Merche

---

<div class="post-metadata">

**Author:** ![purbon](https://avatars.discourse-cdn.com/v4/letter/p/edb3f5/32.png) [@purbon](https://discuss.elastic.co/u/purbon)\
**Post date:** [May 24, 2016, 11:20am UTC](https://discuss.elastic.co/t/problemas-con-el-analisis-de-archivo-xml-con-logstash/50824/2 "2016-05-24T11:20:10Z")

</div>

Buenos dias,  
mi recomendación para tu caso de uso, seria la de explorar el uso de [filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-getting-started.html), con el que podrás aplicar el multiline de forma más senzilla en origen (cuando leas el archivo). Si quires ver un ejemplo de aplicatión con un modelo parecido, puedes echar un vistazo a [https://github.com/purbon/elasticstack\_sports\_demo/tree/master/config/filebeat](https://github.com/purbon/elasticstack_sports_demo/tree/master/config/filebeat) .

Cabe decidir que también es posible hacerlo con el codec multiline, pero la expresión, y sobretodo su interacción con el caso de leer ficheros una sola vez, lo hace complicado. Para el caso de hacerlo con el codec, te recomiendo negar el pattern.

Saludos

Pere

---

<div class="post-metadata">

**Author:** ![Lop](https://avatars.discourse-cdn.com/v4/letter/l/ecb155/32.png) [@Lop](https://discuss.elastic.co/u/Lop)\
**Post date:** [May 24, 2016, 11:34am UTC](https://discuss.elastic.co/t/problemas-con-el-analisis-de-archivo-xml-con-logstash/50824/3 "2016-05-24T11:34:57Z")

</div>

Voy a probarlo

Muchas Gracias

---

<div class="post-metadata">

**Author:** ![Lop](https://avatars.discourse-cdn.com/v4/letter/l/ecb155/32.png) [@Lop](https://discuss.elastic.co/u/Lop)\
**Post date:** [May 30, 2016, 11:39am UTC](https://discuss.elastic.co/t/problemas-con-el-analisis-de-archivo-xml-con-logstash/50824/4 "2016-05-30T11:39:57Z")

</div>

Hola de nuevo

Al final he conseguido analizar los archivos con filebeat y logstash y todo muy bien. Ahora el problema que tengo es con otros archivos xml en los que no hay saltos de paginas (están en una sola linea) y que a la hora de analizarlos usando filebeat no hace nada pero si los guardo con un editor xml antes, si los reconoce y los analiza. ¿Hay alguna manera de configurar filebeat para evitar el paso por el xml editor?.  
Muchas Gracias de nuevo  
Un saludo

---

<div class="post-metadata">

**Author:** ![gmoskovicz](https://avatars.discourse-cdn.com/v4/letter/g/ecae2f/32.png) [@gmoskovicz](https://discuss.elastic.co/u/gmoskovicz)\
**Post date:** [May 30, 2016, 12:14pm UTC](https://discuss.elastic.co/t/problemas-con-el-analisis-de-archivo-xml-con-logstash/50824/5 "2016-05-30T12:14:01Z")

</div>

Hola!

Lamentablemente tu problema es con los saltos de lineas en los archivos plain, mas que xml. No hay forma de que logstash sepa que no hay un salto de linea. En el futuroqueremos crear un file reader que pueda leer hasta el final sin importarle el salto de linea.

Por el momento, sin pasar por el editor, lo otro que puedes hacer es fijarte con un grep o algo asi si los files tienen salto de linea, y de lo contrario agregarle un salto de linea para que lea el file.

Saludos!

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:47pm UTC](https://discuss.elastic.co/t/problemas-con-el-analisis-de-archivo-xml-con-logstash/50824/6 "2017-07-06T13:47:56Z")

</div>


