ElasticSearch y Logstash


Se han puesto de moda las bases de datos No-SQL. El tratamiento de datos masivo y el escalado horizontal (sharding) están a la orden del día.

Gestionar granjas de servidores es cada día más común, y cada vez es todo más distribuido.

Esta distribución dificulta la gestión de logs y trazas: ¿Qué ocurrió para que saltara una excepción, cuando cada paso de la ejecución se realizó en una máquina diferente?

Es en este escenario en el que surge una solución libre con Logstash y ElasticSearch.

Qué voy a contar

No voy a contar cómo configurarlos, ni cómo instalarlos. Este artículo se decidará exclusivamente a contar qué son y para qué sirven.

Realmente son herramientas sencillas de comprender, pero potentes en su función.

ElasticSearch

Si lo que queremos es manejar cantidades ingentes de información, necesitamos una base de datos. Básicamente, ésa es la función de ElasticSearch.

ElasticSearch es una base de datos no-SQL documental, gestionada mediante Apache Lucene. Es, por lo tanto, similar a MongoDB en cuanto al concepto, pero en este caso el punto fuerte es la indexación frente a guardar documentos muy grandes.

Su mayor característica es su velocidad: Resulta increíblemente rápida para cualquier operación que deseemos realizar. Además, permite realizar sharding, montando varios servidores en cluster.

No es raro encontrar empresas que utilizan MongoDB para almacenar información y ElasticSearch para su indexado.

También es útil para almacenar los logs del sistema o aplicación en arquitecturas distribuidas, permitiendo guardar en un único punto el acceso a toda esa información, indexada, facilitando así cualquier tipo de filtro o búsqueda. Para ello, se usa de forma conjunta con Logstash.

Logstash

Es un agrupador de información. Permite establecer varios orígenes (TCP, UDP, rsyslog, ficheros, bases de datos, ...) y varios destinos (ElasticSearch, bases de datos, ficheros, ...), realizando transformaciones y filtrados de los datos en el proceso.

Por poner un ejemplo: Podemos escuchar en un puerto UDP por donde se mandarán datos en formato JSON, filtrar sólo aquéllos que tengan cierto valor en cierto campo y almacenarlos en ElasticSearch. Y todo esto con una configuración sencilla que no ocupará más de 10 líneas.

Dispone de un ElasticSearch embebido, muy útil para realizar pruebas, aunque en producción será más corriente utilizarlo standalone, por si es necesario escalarlo.

Logstash en sí mismo ya es una herramienta muy potente: Leer de varios archivos, filtrar por líneas y combinarlos en uno solo o justo lo contrario resulta muy sencillo de gestionar. No es necesario utilizar ElasticSearch como backend, aunque suele ser bastante conveniente.

Kibana

Consiste en una interfaz a ElasticSearch muy sencilla. Dado que ElasticSearch dispone de una API ReST, Kibana consiste en una aplicación web dinámica en JavaScript que nos permite crear dashboards o realizar búsquedas de una forma muy amigable. También permite generar gráficos.

Instalarlo es tan secillo como descargárnoslo y configurar un servidor web en ese directorio. Es decir, bastará con ejecutar en el directorio de instalación:

python -m SimpleHTTPServer

Por defecto tratará de encontrar una instalación estándar de ElasticSearch en la máquina en la que se ejecuta. Además, dispone de un dashboard preconfigurado para trabajar con Logstash que resulta muy útil.

Por dónde empezar

¿Cómo abordar todo este potencial? Pues mi consejo es descargarse Logstash y hacer el tutorial de Logstash. Una vez comprendido el uso de Logstash y visto lo sencillo que resulta configurarlo, es posible abordar ElasticSearch. Finalmente, Kibana nos permitirá ponerlo todo más bonito y accesible.

Para comenzar se pueden utilizar las instancias embebidas de ElasticSearch y Kibana, aunque es posible que en producción nos interese tenerlo separado por razones de rendimiento y/o sharding


Comentarios

Comments powered by Disqus