Mostrando entradas con la etiqueta Elasticsearch. Mostrar todas las entradas
Mostrando entradas con la etiqueta Elasticsearch. Mostrar todas las entradas
Es el turno de visualizar datos gracias a Kibana. Este entorno de visualización web es la tercera pata del stack ELK. Gracias a Kibana, podremos realizar diferentes visualizaciones en base a los datos indexados en Elasticsearch. Además, podremos configurar paneles de control o dashboards creados a partir de las visualizaciones creadas.

Para esta entrada, necesitaremos descargar y descomprimir Kibana.


Puesta en marcha de Kibana

Kibana se conectará a la instancia de Elasticsearch que ya hemos configurado en entradas anteriores, mediante el host y puerto configurados por defecto, por lo que tendremos que tener activa dicha instancia de Elasticsearch.

Para iniciar Kibana, accederemos a la carpeta bin dentro del directorio raíz de Kibana, y ejecutaremos el archivo kibana.bat. Accederemos a la consola de gestión en la URL http://localhost:5601/

Configuración de índices

El primer paso para empezar a trabajar con Kibana es configurar los índices de Elasticsearch desde donde se obtendrán los datos para ser visualizados. Esta configuración se realiza en la pestaña Settings. En nuestro ejemplo, los datos de cotización en bolsa los hemos almacenado en el índice de nombre logstash-bolsa-2015.

En la casilla para la especificación del índice, pondremos "logstash-bolsa-*". En vez de utilizar el nombre exacto del índice, hemos utilizado el asterisco como patrón, para que nos sirva para futuros datos referentes a otros años (p. ej. logstash-bolsa-2016).

Indicaremos también que nuestro índice dispone de una propiedad que almacena un dato de tipo timestamp, que en este caso corresponde a la fecha de cotización en bolsa. Indicaremos también que la propiedad que almacena dicho dato es @timestamp.

Crearemos el índice e inmediatamente veremos un listado con las propiedades que Kibana ha encontrado en los documentos almacenados en dicho índice. Podremos ver algunas propiedades adicionales de Elasticsearch junto con las propiedades de los valores de cotización en bolsa.



 

Exploración de datos

Para echar un vistazo rápido a los datos, podremos ir a la sección Discover para realizar algunas consultas. Disponemos de una caja de texto con un asterisco, que indica que queremos obtener todos los datos indexados.

Puesto que los valores de cotización en bolsa corresponden al año 2015, tendremos que configurar el rango temporal con el control disponible arriba a la derecha. Mediante la opción Quick -> Previous year podremos ver un gráfico que refleja el histograma de los datos recogidos ese año y un listado con una muestra de los mismos.

También podemos filtrar los datos en base al valor de una propiedad. Por ejemplo, podemos especificar en el espacio de búsqueda "company: YAHOO", con lo que veremos únicamente los datos correspondientes a las acciones de Yahoo.


  

Visualización de datos

Vamos a crear ahora una visualización de datos, mediante la pestaña Visualize. En esta pestaña, veremos un listado de posibles gráficas. En este caso, vamos a crear una gráfica de tipo Line Chart, con el fin de comparar el precio de las acciones de cada compañía en el momento de apertura de mercados. Pinchando en Line Chart y seleccionando From a new search, accederemos a la configuración de la gráfica.

En el eje Y, elegiremos como métrica el máximo sobre el campo open. De esta forma, el eje Y representará los valores de las acciones en el momento de apertura de mercados. Para el eje X, crearemos lo que se denominan buckets. Los buckets son una especie de "cubos" donde se "insertarán" o agruparán los datos en base a una serie de parámetros. 

En nuestro caso, crearemos un bucket de tipo Date histogram sobre la propiedad @timestamp, para que los datos se puedan agrupar en base a la fecha en la que fueron obtenidos. Si dejáramos así la configuración y ejecutáramos la visualización (botón verde con el play) veríamos una gráfica con una sola línea, que correspondería a los valores de Google, ya que es la que dispone de los valores más altos.

Para solucionar el problema, añadiremos un sub-bucket sobre el ya configurado. Este sub-bucket será de tipo Split Lines, para diferenciar las líneas correspondientes a Google y Yahoo. Para ello, crearemos un par de filtros, que servirán para dividir la línea en dos. Los filtros pueden configurarse en base a valores de las propiedades, por lo que crearemos uno de tipo "company : YAHOO" y otro de tipo "company : GOOGLE". Ejecutando otra vez la visualización, veremos que ahora aparecen dos líneas, una para cada compañía. Podremos guardar la visualización para su posterior uso o consulta.


Creación de un panel de control o dashboard

En la pestaña Dashboard podemos crear un panel de control con las gráficas que hemos guardado anteriormente. En este caso, crearemos un panel de control que incluya la visualización creada anteriormente. Podemos situar cada visualización en el lugar que creamos pertinente y con las dimensiones que queramos, por lo que se permite una flexibilidad total a la hora de componer nuestros paneles de control. Estos dashboard podemos también guardarlos e incluso incrustarlos en cualquier web externa mediante la opción Share, la cual nos facilita un código de incrustación.


 

Conclusiones

Kibana permite realizar visualizaciones de datos de una forma sencilla y flexible. Dispone de multitud de tipos de gráficas y parámetros de configuración, que hacen que pueda adaptarse a cualquier dominio y necesidad de visualización de datos. Es importante recalcar, que estas visualizaciones se actualizan en tiempo real a medida que nuevos datos son indexados en Elasticsearch. Si los tipos de gráficos no fueran suficientes, se pueden desarrollar plugins de forma sencilla para crear los gráficos que podamos necesitar en cada caso.

En siguientes entradas crearé un ejemplo más completo con el stack ELK para la indexación y visualización de tweets de la red social Twitter, así que puedes suscribirte a mi blog para no perder detalle!
Hoy hablaré de Elasticsearch, un indexador de documentos que se está haciendo muy popular gracias al stack ELK (Elasticsearch, Logstash y Kibana). Estos tres componentes son bastante comunes en arquitecturas Big Data. Logstash facilita la ingesta de datos provenientes de fuentes distribuidas, Elasticsearch indexa los datos y Kibana permite su visualización. En esta entrada mostraré las funcionalidades básicas de Elasticsearch como motor de indexación.



Las herramientas necesarias para seguir este tutorial son:

¿Qué es Elasticsearch?

Elasticsearch es un motor de búsqueda basado en Apache Lucene que permite indexar grandes cantidades de datos para su posterior consulta de forma eficiente. Los datos o documentos que se indexan no necesitan tener una estructura determinada, aunque para un mejor funcionamiento y explotación de los mismos es recomendable su definición.

Como todo sistema orientado a Big Data, es fácilmente escalable y se puede configurar de forma distribuida. Dispone de una API RESTful para interactuar con la plataforma y los datos, un lenguaje de consulta llamado Query DSL y multitud de librerías en los principales lenguajes de programación (Java, PHP, etc.).


Wikipedia, Soundcloud o GitHub utilizan Elasticsearch para proporcionar búsquedas de información en tiempo real.

Componentes principales de Elasticsearch

A continuación se describen los componentes principales de Elasticsearch.
  • Índice: es una colección de documentos que comparten características similares. Cada índice puede contener múltiples tipos de documentos y cada tipo puede contener múltiples documentos. Por ejemplo, si creamos un índice llamado "Mi blog", podemos indexar documentos de tipo "post" o de tipo "comentario".
  • Documento: un documento se representa en formato JSON y se almacena en un índice. Cada documento tiene un tipo y un identificador único.
  • Mapeo: el mapeo se utiliza para realizar la correspondencia entre un campo de un documento JSON y su tipo de dato. Elasticsearch crea estos mapeos de forma automática al indexar un nuevo documento, aunque pueden ser asignados de forma manual también.
  • Shard: un shard es una entidad física donde se almacenan los datos para los distintos índices creados. Cada índice puede tener diversos shard, tanto primarios como secundarios (para respaldos, balanceo de carga, etc.). Los shard pueden estar distribuidos en los diferentes nodos que pueden componer un cluster Elasticsearch. Al iniciar una instancia de Elasticsearch (un nodo), se crea un cluster de nombre "elasticsearch" y se crean 5 shard primarios por cada índice.

Puesta en marcha de Elasticsearch

Después de instalar y configurar Java, deberemos descargar y descomprimir la distribución de Elasticsearch. Accederemos a la carpeta bin dentro del directorio donde hayamos descomprimido Elasticsearch y ejecutaremos el fichero elasticsearch.bat (en Windows).

Una vez iniciado, accederemos a la URL http://localhost:9200/?pretty con nuestro navegador para comprobar que funciona correctamente. Se mostrarán algunos datos básicos como el nombre del clúster y del nodo (como curiosidad, comentar que se asigna un nombre de nodo correspondiente a un personaje de Marvel...).



Ahora instalaremos el plugin kopf, para lo que abriremos una consola de comandos en el directorio bin de Elasticsearch y ejecutaremos el siguiente comando:


Una vez instalado, podremos acceder a la URL http://localhost:9200/_plugin/kopf donde veremos el cluster, los nodos, los shards y su estado.




Trabajando con documentos

Vamos ahora a indexar algunos documentos. A la hora de insertar un nuevo documento mediante la API REST, se sigue el patrón http://localhost:9200/<indice>/<tipo>/[<id>]. El índice se crea si no existe, así como el tipo. El identificador es opcional, y si no se proporciona Elasticsearch asignará uno de forma automática.

Por ejemplo, vamos a utilizar Elasticsearch para indexar nuestra biblioteca multimedia. Empezaremos por los libros, añadiendo un nuevo al índice llamado "multimedia". Realizaremos llamadas a la API mediante la extensión de Chrome Advanced Rest Client.

Indexaremos un nuevo libro realizando una petición PUT a la URL http://localhost:9200/multimedia/libro/1 enviando en el cuerpo del mensaje el siguiente documento JSON.


Podemos visualizar los índices contenidos en Elasticsearch para ver que se ha creado el nuevo índice correctamente, mediante la consulta GET http://localhost:9200/_cat/indices. Esta consulta devuelve un listado de índices en formato texto, donde veremos nuestro nuevo índice "multimedia".

Ahora vamos a realizar algunas búsquedas. Mediante la consulta GET http://localhost:9200/_search podemos visualizar todos los documentos indexados, para comprobar que nuestro libro se ha insertado correctamente.

Esta consulta de documentos, puede realizarse también en relación al índice o al tipo de documento. Por ejemplo, para obtener todos los libros se utilizaría la consulta siguiente http://localhost:9200/multimedia/libro/_search

Para realizar una búsqueda de un libro que contenga en cualquiera de sus campos un texto determinado, se puede utilizar la siguiente consulta de tipo POST http://localhost:9200/multimedia/_search En el cuerpo de la petición, enviaremos el término por el que queremos realizar la búsqueda. En este caso, vamos a buscar por la palabra "pampinoplas" enviando el siguiente JSON codificado mediante Query DSL en el cuerpo de la petición.



Si lo que queremos es buscar un libro por un campo determinado, se utilizaría la consulta POST http://localhost:9200/multimedia/_search enviando el siguiente JSON, donde se especifican los campos en los que realizar la búsqueda del término proporcionado.



Conclusiones

Elasticsearch es una excelente solución para la indexación de documentos, pensada para realizar búsquedas eficientes en grandes cantidades de datos. Es importante mencionar que Elasticsearch está concebida para realizar búsquedas rápidas, por lo que no soporta transacciones ni sus principios ACID.

El ciclo de vida de los datos suele ser de una única escritura en Elasticsearch y múltiples lecturas. Por ejemplo, puede utilizarse como soporte a bases de datos relacionales que sí soportan los principios ACID, pero que no disponen de sistemas de indexación de texto eficientes. De esta manera, se pueden replicar datos de forma asíncrona a una instancia de Elasticsearch para delegar en esta plataforma las búsquedas de texto.

Como ya he comentado, el poder de Elasticsearch aumenta en combinación con Logstash y Kibana, conformando el stack ELK. En siguientes entradas hablaré del resto de componentes de este stack y pondré algún ejemplo de uso.

Si necesitas más información sobre Elasticsearch, te recomiendo que te compres un par de libros muy completos, "Elasticsearch In Action" y "Elasticsearch: The Definitive Guide".