Disminuir tiempos de carga del Discover en Kibana 5

0
1498

En este tutorial veremos una manera muy sencilla de reducir los tiempos de carga del Discover en Kibana.

Índice de contenidos


1. Introducción

Por defecto, en Kibana los tiempos de carga en la pestaña del Discover son muy altos cuando buscas información general sin filtros. Vamos a ver cómo podemos modificar la búsqueda que realizamos a Elasticsearch desde la configuración del Kibana para disminuir el tiempo de búsqueda.

Damos por hecho que ya tenemos instalado Kibana y Elasticsearch. Este tutorial te ayudará a conocer el funcionamiento de las herramientas.


2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: portátil MacBook Pro Retina 15′ (2.5 Ghz Intel Core I7, 16GB DDR3)
  • Sistema operativo: macOS Sierra 10.12.6
  • Kibana 5.4.0
  • Elasticsearch 5.4.0


3. Optimización del endpoint _msearch

Con las herramientas del desarrollador del navegador, podemos ver que la petición que más tarda durante la carga del Discover es _msearch.

Si vemos la petición que se realiza cuando se hace una llamada a _msearch (herramientas del desarrollador –> Network –> click derecho –> copy as cURL), vemos la siguiente estructura:

Petición endpoint _search
curl 'http://localhost:5601/elasticsearch/_msearch'
    -H Headers
    ...
    -H 'content-type: application/x-ndjson'
--data-binary
$'{"index":["logstash-index"],"ignore_unavailable":true,"preference":number}\n
{
    "version":true,
    "size":500,
    "sort":[{"@timestamp":{"order":"desc","unmapped_type":"boolean"}}],
    "query":{"bool":{"must":[{"query_string":{"analyze_wildcard":true,"query":"*"}},
    {"range":{"@timestamp":{"gte":1498860000000,"lte":1501711199999,"format":"epoch_millis"}}}],"must_not":[]}},
    "_source":{"excludes":[]},
    "aggs":{"2":{"date_histogram":{"field":"@timestamp","interval":"12h","time_zone":"Europe/Berlin","min_doc_count":1}}},
    "stored_fields":["*"],
    "script_fields":{},
    "docvalue_fields": ["field1", "field2", ..., "fieldN"],
    "highlight":{"pre_tags":["@kibana-highlighted-field@"],"post_tags":["@/kibana-highlighted-field@"],"fields":{"*":{"highlight_query":{"bool":{"must":[{"query_string":{"analyze_wildcard":true,"query":"*","all_fields":true}},{"range":{"@timestamp":{"gte":1498860000000,"lte":1501711199999,"format":"epoch_millis"}}}],"must_not":[]}}}},"fragment_size":2147483647}
}\n
--compressed

En esta petición hemos omitido las cabeceras propias del navegador, pero hemos dejado la del content-type, ya que este es necesario para poder hacer una petición correcta al endpoint _msearch.

Este endpoint recibe varios JSON en varias líneas, donde las impares son cabeceras y las pares son los cuerpos de la misma, de forma que puede hacer búsquedas múltiples iterando entre cabeceras y cuerpos. En nuestra petición solo tenemos dos líneas (marcadas con \n), aunque la última la hemos separado para mayor claridad.

Toda esta información saldrá correctamente formateada cuando copies la información del cURL.

La cabecera contiene la información sobre el índice en el que vamos a realizar la búsqueda y el cuerpo tiene la búsqueda propiamente dicha. Vamos a analizar con detalle esta búsqueda para ver qué información podemos eliminar.

Vemos que por defecto esta búsqueda nos trae 500 documentos. El Discover no suele ser una herramienta que se visite de forma plana, sino que sueles acceder a ella tras filtrar la información que quieres buscar, ya sea por dashboards o filtros de búsqueda. Podríamos reducir su valor para que la consulta tardara menos en procesarse.

El factor más relevante de la consulta a eliminar es el apartado highlight que se hace en todos los campos. Esta propiedad incluye en la respuesta de cada campo un campo ‘highlight’ que incluye los campos sobresaltados. Esto ralentiza muchísimo la carga del Discover y no es necesario para nada, pero viene habilitado por defecto.


4. Cambio de las propiedades en Kibana

Para realizar el cambio, vamos a acceder a Management –> Advanced Settings. Aquí salen un montón de propiedades que podremos actualizar, de las cuales vamos a cambiar las siguientes:

  • discover:sampleSize. Vamos a reducir este valor de 500 a 50, de forma que obtengamos menos datos y la búsqueda sea más rápida. Esto disminuye los tiempos de carga bastante, pero es posible que en algún caso queramos tenerlo con un valor superior al de por defecto, por lo que es un cambio más opcional.
  • doc_table:highlight. Vamos a poner el check a False. Si leemos la descripción de esta propiedad, vemos que pone que puede hacer las peticiones lentas, y realmente lo hacen. Tras cambiar esta propiedad, las búsquedas que antes me tardaban 5 minutos, ahora me tardan 1 segundo. Maravilloso.


5. Conclusiones

Mirar cómo funcionan las herramientas por debajo puede darnos conocimiento de comportamientos innecesarios o inadecuados. Como recomendación general, cuando veas que hay algo que no funciona como debería, saber qué es lo que hace realmente nos ayuda a solventar el problema. Y, si la solución es muy fácil, mejor. 😀


6. Referencias

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad