¿Qué es el ELK Stack? Primeros pasos para principiantes

En este artículo te exponemos qué es el ELK stack, cuáles son sus principales componentes, características, funcionalidades y beneficios. También te contamos brevemente cómo instalar cada una de sus piezas para ponerlo en marcha.

¿Qué es el ELK Stack?

El ELK Stack, también conocido como Elastic Stack, es una colección de tres productos de código abierto: Elasticsearch, Logstash y Kibana, desarrollados, administrados y mantenidos por la compañía Elastic.

Este grupo de herramientas, trabajando en conjunto, nos proporcionará un gestor de logs o registros centralizado, su almacenamiento distribuido en forma de datos, su procesamiento y su posterior visualización en dashboards.

Esto nos permitirá realizar consultas en tiempo real para analizar, identificar y resolver posibles problemas con sistemas o aplicaciones, como por ejemplo el número de errores que se producen en una aplicación web, o el uso de CPU y de memoria de un servidor.

Arquitectura del ELK Stack

El Stack de Elastic contaría con las siguientes partes diferenciables:

  • Logs/Registros: Los cuales nos aportarán aquellos datos que deben analizarse.
  • ElasticSearch: Almacena, busca e indexa los datos transformados de Logstash.
  • Logstash: Recopila los registros, los analiza y los transforma en datos.
  • Kibana: Usa Elasticsearch para explorar, visualizar y compartir la información.

Para continuar con este tutorial de ELK, procederemos a explicar con más profundidad cada una de estas partes.

Administrar y gestionar los logs

Los logs o registros son datos en forma de texto que suelen guardarse en ficheros, y que nos explican el comportamiento de nuestros sistemas o programas.

La gran cantidad de datos que se producen de esta manera hacen que el término Big Data también sea aplicable a los logs.

El principal problema con el que nos encontramos a la hora de dar uso a los logs, es que no suelen estar diseñados siguiendo una metodología de trabajo estándar. Esto supone una descentralización de la información y dificultades a la hora de visualizarla, lo que se traduce en un incremento en el tiempo de respuesta ante posibles incidencias, así como en la posibilidad de que se hagan interpretaciones erróneas.

Podemos decir que una gestión estandarizada y correcta de nuestros registros, nos llevará a una mejora en la gestión y el control de la información, y nos facilitará la detección de amenazas y la prevención de fugas de información. También nos ofrecerá la posibilidad de ir más lejos con nuestros datos, como puede ser la aplicación de técnicas de Machine Learning a la hora de detectar posibles patrones en el comportamiento de nuestras aplicaciones y/o sistemas.

¿Qué es Elasticsearch?

Elasticsearch se trata básicamente de una versión escalable del motor de búsqueda Apache Lucene y está construido con RESTful APIS.

Ofrece una implementación simple, máxima confiabilidad y fácil administración. También ofrece consultas avanzadas para realizar análisis en detalle y almacena todos los datos de forma descentralizada.

Suele usarse para añadir funcionalidades de búsqueda a nuestras aplicaciones sobre diferentes fuentes de datos. Entre estas funcionalidades se incluyen autocompletar, corrección de tipos, resaltado de coincidencias, manejo de sinónimos, ajustes en la relevancia, etc.

Básicamente, Elasticsearch tiene todo lo necesario para crear un motor de búsqueda potente.

Características y ventajas de Elasticsearch

  • Es una motor de analítica y análisis distribuido orientado a documentos JSON, por lo que almacena la información de forma desnormalizada.
  • Se organiza mediante nodos, los cuales son alojados dentro de un cluster.
  •  Utiliza su propio Query Domain Specific Language (DSL), mediante el cual permite realizar consultas en JSON.
  • La información se añade a Elasticsearch mediante un proceso “indexación”, ya que esta se inserta en los índices de Apache Lucene.
  • Al estar desarrollado en Java, es compatible en todas las plataformas donde Java lo sea.
  • Gracias a su distribución en nodos tiene una alta capacidad de respuesta y gran tolerancia a fallos.
  • Su distribución en nodos también permite una escalabilidad horizontal y da la posibilidad de almacenar grandes cantidades de información.
  • Al utilizar objetos JSON como respuesta, es fácil de invocar desde varios lenguajes de programación. Además cuenta con una gran cantidad librerías integradas para estos lenguajes: JavaC#PythonJavascriptPHPRuby,…
  • Permite acceder a los datos en tiempo real. Para ello dispone del acceso a todas sus capacidades mediante una API RESTful.

¿Qué es Logstash?

Logstash es una herramienta de recopilación y administración de datos en forma de logs. Puede unificar datos de distintas fuentes y normalizarlos, preparándolos para su posterior análisis y visualización.

Los datos llegan a Logstash almacenados mediante eventos. A cada flujo de datos que procesa cada uno de estos eventos  se le conoce como pipeline. Una pipeline es un proceso de ETL que cuenta con tres elementos principales:

  • Input: Primera parte de la pipeline, que se encarga de recopilar los registros para su procesamiento.
  • Filter: Etapa en la cual mediante expresiones regulares, se realizan las operaciones necesarias para transformar y filtrar los datos, dividiéndolos según los distintos campos y criterios requeridos.
  • Output: Última etapa del proceso de pipeline, en la que se puede dar formato a los datos para adaptarse a la estructura requerida por los sistemas de destino. Estos pueden tratarse de bases de datos, ficheros, índices de Elasticsearch, etc…

Características y ventajas de Logstash

  • Está basado en JRuby y requiere de Java Virtual Machine para ejecutarse.
  • Es de código abierto y está disponible bajo la licencia Apache versión 2.0.
  • Puede requerir de códecs para adaptar un formato de entrada a un formato aceptado por Logstash.
  • Nos permite la centralización y estandarización de logs.
  • Puede analizar una gran variedad de datos y eventos estructurados y no estructurados.
  •  Puede recopilar datos de diferentes fuentes y enviarlos a múltiples destinos.
  • Proporciona una gran variedad de filtros, lo que da muchas posibilidades al usuario a la hora de explotar de los datos.

¿Qué es Kibana?

Kibana es el útimo elemento del ELK Stack. Se trata de un visualizador de datos que se conecta a un índice de Elasticsearch, y mediante una interfaz web, permite realizar consultas, filtrando los datos para posteriormente representarlos, lo que ayuda a los desarrolladores a tener una visión rápida de los mismos.

Características y ventajas de Kibana

  • Potente panel frontal, que es capaz de visualizar información indexada.
  • Puede buscar, ver e interactuar en tiempo real con los datos almacenados en Elasticsearch.
  • Ofrece una gran variedad de diagramas interactivos, tablas, gráficos y mapas para visualizar requisitos complejos.
  • Permite compartir instantáneas de los registros buscados.
  • Permite guardar las tablas y administrarlas.

Instalación de ELK

Los métodos para instalar y usar el ELK Stack son muchos y muy variados. También lo son los diferentes sistemas operativos y entornos en los que puede utilizarse. ELK se puede instalar localmente, en la nube, usando Docker, etc…

Muchos de los pasos de instalación son similares de un entorno a otro. Dado que no es posible cubrir todos los diferentes escenarios en un solo artículo, proporcionaremos un ejemplo para instalar todos los componentes en Linux.

Instalar Java JDK-8

Para instalar JDK añadiremos el repositorio ppa, actualizaremos repositorios e instalaremos java. Para ello ejecutaremos:

add-apt-repository ppa:webupd8team/java
apt-get update
apt-get install oracle-java8-installer
java -version

El último comando nos servirá para ver si se ha instalado correctamente. Nos mostrará algo similar a:

java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)

Cómo instalar y configurar ElasticSearch

Instalación:

El primer paso será ejecutar el siguiente comando para importar la clave pública GPG de Elasticsearch en APT:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Hecho esto crearemos una lista de fuentes de paquetes para Elastic, y la almacenaremos en el directorio sources.list.d, de esta manera APT podrá usar estas fuentes para la instalación que queramos hacer:

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

Por último actualizaremos la lista de paquetes:

apt-get update 

E instalaremos elasticsearch:

apt-get install elasticsearch

Una vez finalizada la instalación, podremos iniciar el servicio:

systemctl start elasticsearch

ElasticSearch, por defecto, escuchará en el puerto 9200, por lo que si accedemos a la URL: http://localhost:9200/ podremos ver un JSON parecido a este, que nos confirmará si se está ejecutando:

{
 "name" : "3QgzSR_",
 "cluster_name" : "elasticsearch",
 "cluster_uuid" : "cH8_cDckSpGh1giGdG58Lg",
 "version" : {
 "number" : "7.12.0",
 "build_hash" : "8bbedf5",
 "build_date" : "2017-10-31T18:55:38.105Z",
 "build_snapshot" : false,
 "lucene_version" : "6.6.1"
 },
 "tagline" : "You Know, for Search"
 }

Configuración:

La mayoría de componentes de configuración de ElasticSearch se encuentran en el archivo elasticsearch.yml, que puedes encontrar en el directorio /etc/elasticsearch.

Este archivo nos ofrece opciones de configuración para su clúster, nodo, rutas, memoria, red, descubrimiento y puerta de enlace. Estas opciones están preconfiguradas en el archivo, pero se pueden cambiar según nuestras necesidades.

Por ejemplo, si quisiéramos cambiar el acceso a nuestra instancia de ElasticSearch, restringiéndolo localmente,  tendríamos que buscar la línea que especifica ‘network.host’ y reemplazar el valor ‘9200’ por ‘localhost’, quedando lo siguiente:

network.host: localhost

Elastic cuenta en su web con una guía para configurar elasticsearch.ylm

Es importante saber que el formato YALM tiene en cuenta el sangrado del texto, por lo que habrá que poner especial cuidado de no añadir o quitar espacios.

Cómo instalar y configurar Kibana

Instalación:

Instalaremos Kibana únicamente después de haber instalado Elasticsearch, de esta manera nos aseguraremos de que quedará correctamente configurado.

Como ya tenemos agregado el paquete Elastic a la fuente, podremos instalar Kibana directamente:

apt install kibana

Y una vez instalado, podremos iniciar Kibana:

systemctl start kibana

Para acceder a la interfaz de Kibana tan solo tendremos que mirar en la URL: http://localhost:5601

Esta interfaz nos ofrecerá diferentes opciones a la hora de visualizar gráficos, de manera que podremos elegir entre varios para componer un dashboard.

Además, Kibana dispone de distintas maneras de realizar el filtrado de datos. Entre ellas, el llamado Kibana Query Language (KQL).

Si quieres aprender más sobre Kibana Query Language, puedes acceder a este manual de KQL desde la propia página de Elastic.

Configuración:

La mayoría de componentes de configuración de Kibana se encuentran en el archivo kibana.yml, que puedes encontrar por defecto en $KIBANA_HOME/config.

Desde este archivo, puedes cambiar la configuración predeterminada del puerto y el host en el que se ejecuta Kibana (localhost:5601), así como habilitar SSL y una gran variedad de opciones.

Puedes encontrar la documentación para configurar kibana.yml en la web de Elastic.

Cómo instalar y configurar Logstash

Instalación:

Podremos instalar Logstash con el mismo procedimiento que en los casos anteriores:

apt install logstash

Configuración:

Logstash se configura a partir de un fichero .conf, cuya estructura viene marcada por los tres elementos que forman la pipeline: Input, Filter y Output.

input {
    file {
        path => "ruta/archivo.log"
        start_position => beginning
	}
}

filter {
}

output {
	stdout {}

    	elasticsearch {}
}

El fichero del ejemplo está configurado para que tome todos los ficheros de logs de la ruta elegida. A continuación, realizará los filtros por defecto (no añadimos ninguno), sacando los resultados por pantalla, a la vez que los los indexa en ElasticSearch.

Por último iniciaremos Logstash indicándole el archivo de configuración, que en nuestro caso hemos llamado pipeline.conf:

bin/logstash -f pipeline.conf

Logstash procesará los ficheros de log, interpretará los distintos campos y los indexará en ElasticSearch.

En caso de que quieras profundizar en la configuración de los filtros de Logstash, puedes acceder a una gran cantidad de diferentes plugins para filtros, desde la propia página de Elastic.

También podrás encontrar una lista con varios ejemplos de configuración para logstash que te ayudarán a conseguir lo que necesitas.

¿Qué nos proporciona ELK?

Podemos resumir el trabajo del ELK Stack en los siguientes puntos:

  • Recolecta logs y eventos de las aplicaciones. 
  • Procesa esta información y la pone a nuestra disposición.
  • Le da formato, convirtiéndola en datos que puedan ser ordenados y permitan su búsqueda, filtrado y manipulación.
  • Representa los datos de forma gráfica y visual, proporcionándonos el conocimiento de lo que está pasando en tiempo real.

De esta manera, podemos ver como ELK nos ayuda a completar el ciclo de la información, transformando esta en datos, los datos en conocimiento y el conocimiento en competitividad. Por estas razones, podemos llegar a la conclusión de que ELK es un poderoso conjunto de herramientas a tener en cuenta en el campo del Big Data.

En BI Geek, consultora de Analítica Avanzada y Big Data, apostamos por un modelo de consultoría orientado a hacer accesibles este tipo de soluciones para cualquier tipo de empresa.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*
*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.