Mostrando entradas con la etiqueta ELK stack. Mostrar todas las entradas
Mostrando entradas con la etiqueta ELK stack. 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!
Después de presentar ElasticSearch, es el turno de Logstash, un recolector de datos distribuidos. Logstash fue diseñado para recopilar datos provenientes de ficheros de logs (p. ej. logs de servidores Apache, Tomcat, etc.) con el fin de pre-procesarlos y enviarlos a un sistema de almacenamiento, como es el caso de ElasticSearch. Sin embargo, la herramienta ha evolucionado mucho y ya existen multitud de plugins que nos permiten obtener datos desde fuentes de datos de lo más variado (p. ej. Twitter, ficheros, bases de datos, servicios,...), pre-procesar dichos datos aplicando filtros y redirigir los datos (p. ej. hacia repositorios de datos, sistemas de visualización, sistemas de colas, etc.)


En esta entrada veremos un ejemplo de ingesta de datos desde un fichero CSV hacia Elsticsearch mediante Logstash. Para ello, utilizaremos un fichero con valores de cotización en bolsa de las compañías Yahoo y Google durante el año 2015 que puedes descargar aquí. Si te apetece obtener datos de alguna otra compañía, puedes obtener un fichero CSV similar en este enlace.

Para poder seguir esta entrada, necesitarás las siguientes herramientas:

Flujo de trabajo con Logstash

El flujo de trabajo con Logstash se basa en la definición de entradas, filtros y salidas de datos. En las entradas (input), se define la fuente de datos desde donde obtener los datos. En los filtros (filter) se definen operaciones y transformaciones sobre los datos, y en las salidas (output) se define el destino de dichos datos. Este flujo de datos se especifica en un fichero de configuración que tiene el siguiente aspecto.


Ejemplo con Logstash

Para realizar el ejemplo, tendremos que habilitar la plataforma Elasticsearch. Después, tendremos que descargar y descomprimir Logstash. A continuación, copiaremos en la carpeta bin del directorio de Logstash el fichero CSV que utilizaremos como fuente de datos de entrada (input), que puedes descargar aquí.

Ahora tendremos que crear el fichero de configuración que utilizaremos para leer los valores de las acciones, pre-procesarlos y enviarlos a Elasticsearch para su indexación.

En el bloque correspondiente al input hemos especificado las siguientes propiedades:
  • file: para configurar una entrada de datos proveniente de un fichero.
    • path: ruta donde se encuentra el fichero.
    • start_position: posición del fichero desde la que Logstash empezará a parsear datos.
    • type: tipo de documento que se creará en Elasticsearch cuando se indexen los datos.
    • sincedb_path: utilizado para que Logstash no tenga en cuenta dónde se quedó el cursor al parsear el fichero. Esta configuración viene bien para realizar pruebas, ya que de esta forma siempre podremos volver a indexar los datos del fichero. 
    • mutate: utilizado para mapear tipos de datos.
En el bloque correspondiente a los filtros hemos configurado lo siguiente:
  • csv: para mapear las columnas del fichero CSV a propiedades del documento JSON con unos nombres determinados.
  • date: para especificar la fecha proveniente de los datos de cotización de las acciones. Para ello, especificamos el patrón que siguen las fechas en el fichero CSV mediante la propiedad match, especificamos el locale y finalmente especificamos con target la propiedad del documento JSON de salida a la que se mapeará la fecha. Si no se configura un filtro de tipo date, Elasticsearch indexará cada documento con el timestamp en el que se recibió dicho documento.
Finalmente especificamos el output o salida de los datos mediante las siguientes configuraciones:
  • elasticsearch: donde especificamos el host donde está Elasticsearch y el índice que creará cuando se indexen los datos. Este índice se ha creado utilizando un patrón, de manera que se crea un índice por cada año perteneciente a los datos de cotización en bolsa. De esta forma se podrán borrar los documentos asociados a cada año borrando para ello su índice correspondiente.
  • stdout: mostrará en consola de comandos los datos parseados y enviados a Elasticsearch con el fin de comprobar que el proceso ha ido bien.


Una vez creado el fichero, deberemos situarlo en la carpeta bin de nuestro directorio de Logstash. Para empezar el proceso, tendremos que ejecutar Logstash, abriendo una consola de comandos en el directorio bin y escribiendo el siguiente comando, donde especificamos qué fichero de configuración queremos que Logstash utilice.

Cuando termine el proceso, podremos acceder al manager de Elasticsearch (http://localhost:9200/_plugin/kopf) para comprobar que los índices se han creado y que existen datos indexados. Concretamente, veremos que se han indexado 511 documentos nuevos en el índice logstash-bolsa-2015.


Conclusiones

Logstash es muy sencillo de configurar y dispone de multitud de plugins para realizar procesos de gestión de datos, lo que le convierte en una herramienta muy flexible. En la siguiente entrada utilizaremos Kibana para crear visualizaciones sobre los datos que hemos indexado con Elasticsearch.