Con ELK (ElasticSearch, Logstash y Kibana) podemos gestionar los logs de nuestros servidores de forma muy eficiente, pudiendo realizar consultas muy concreta sobre lo que realmente nos interesa y obteniendo resultados muy visuales y fáciles de entender.
Antes de nada vamos a explicar de forma muy breve que función tiene cada uno de los componentes de ELK:
Logstash:
Logstash es una herramienta para la administración de logs. Esta herramienta se puede utilizar para recolectar, parsear y guardar los logs para futuras búsquedas. La aplicación se encuentra basada en jRuby y requiere de Java Virtual Machine para correr. Como corre en JVM puede ser ejecutada en cualquier Sistema Operativo que corra JVM.
ElasticSearch:
Elasticsearch es un servidor de búsqueda basado en Lucene. Provee un motor de búsqueda de texto completo, distribuido y con capacidad de multi-tenencia con una interfaz web RESTful y con documentos JSON. Elasticsearch está desarrollado en Java y está publicado como código abierto bajo las condiciones de la licencia Apache.
Kibana:
Kibana es una herramienta open-source perteneciente a Elastic, que nos permite visualizar y explorar datos que se encuentran indexados en ElasticSearch, es decir, un plugin de ElasticSearch.
Descripción del entorno de pruebas:
Para realizar las pruebas vamos a instalar Logstash, ElasticSearch y Kibana en una misma máquina virtual con la siguiente configuración:
- 1 Procesador + 4 Cores
- 4 Gb memoria RAM
- 1 Adaptador de red virtual
- Sistema operativo: Ubuntu 16.04 x64
- ElasticSearch 2.3.5
- Logstash 2.3.4
Manos a la obra:
Para empezar vamos a instalar ElasticSearch, ya que Logstash lo requiere (en el entorno ELK) para poder almacenar los datos y Kibana también lo requiere para poder realizar las consultas.
Antes de nada quería matizar que estamos en un entorno de pruebas, así que de momento no lo vamos a securizar, lo haremos más adelante.
Instalando ElasticSearch:
Lo primero que vamos a hacer es verificar que tenemos instalado JAVA en nuestro servidor:
1 2 3 4 |
> java -version openjdk version "1.8.0_91" OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14) OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode) |
En esta distribución de linux ya viene preinstalada la versión OPEN JDK V. 1.8, siendo esta la recomendada por Elastic. Así que perfecto!.
Si necesitáis ayuda para instalar JAVA, aqui teneis un articulo que os puede servir.
Procedemos a descargar la versión correspondiente de ElasticSearch desde la web de Elastic:
1 |
> wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/2.3.5/elasticsearch-2.3.5.deb |
Ahora lo instalamos con dpkg:
1 |
> sudo dpkg -i elasticsearch-2.3.5.deb |
Como resultado tendremos ElasticSearch instalado en /usr/share/elasticsearch/ , los archivos de configuración en /etc/elasticsearch/ y el script de arranque en /etc/init.d/elasticsearch.
Para que ElasticSearch se ejecute al arrancar la máquina, necesitamos incluir el script en la secuencia de arranque:
1 |
> sudo systemctl enable elasticsearch.service |
Posteriormente arrancamos el servicio manualmente para poder proseguir:
1 2 |
> /etc/init.d/elasticsearch start [ ok ] Starting elasticsearch (via systemctl): elasticsearch.service. |
Si comprobamos el estado del servicio con /etc/init.d/elasticsearch status nos mostrará algo similar a esto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
● elasticsearch.service - Elasticsearch Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enabled) Active: active (running) since jue 2016-08-25 16:40:48 CEST; 37s ago Docs: http://www.elastic.co Process: 39787 ExecStartPre=/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec (code=exited, status=0/SUCCESS) Main PID: 39791 (java) CGroup: /system.slice/elasticsearch.service └─39791 /usr/bin/java -Xms256m -Xmx1g -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:... ago 25 16:40:50 LekDemo elasticsearch[39791]: [2016-08-25 16:40:50,478][INFO ][env ] [Christopher Summers] heap size [990.7mb], compressed ordinary object pointers [true] ago 25 16:40:50 LekDemo elasticsearch[39791]: [2016-08-25 16:40:50,478][WARN ][env ] [Christopher Summers] max file descriptors [65535] for elasticsearch proce...east [65536] ago 25 16:40:52 LekDemo elasticsearch[39791]: [2016-08-25 16:40:52,868][INFO ][node ] [Christopher Summers] initialized ago 25 16:40:52 LekDemo elasticsearch[39791]: [2016-08-25 16:40:52,869][INFO ][node ] [Christopher Summers] starting ... ago 25 16:40:52 LekDemo elasticsearch[39791]: [2016-08-25 16:40:52,954][INFO ][transport ] [Christopher Summers] publish_address {127.0.0.1:9300}, bound_addresses {[....0.0.1:9300} ago 25 16:40:52 LekDemo elasticsearch[39791]: [2016-08-25 16:40:52,961][INFO ][discovery ] [Christopher Summers] elasticsearch/XwfzUs5pTDSFJ5bcj66mhQ ago 25 16:40:56 LekDemo elasticsearch[39791]: [2016-08-25 16:40:56,039][INFO ][cluster.service ] [Christopher Summers] new_master {Christopher Summers}{XwfzUs5pTDSFJ5bcj66...ns received) ago 25 16:40:56 LekDemo elasticsearch[39791]: [2016-08-25 16:40:56,060][INFO ][http ] [Christopher Summers] publish_address {127.0.0.1:9200}, bound_addresses {[....0.0.1:9200} ago 25 16:40:56 LekDemo elasticsearch[39791]: [2016-08-25 16:40:56,061][INFO ][node ] [Christopher Summers] started ago 25 16:40:56 LekDemo elasticsearch[39791]: [2016-08-25 16:40:56,088][INFO ][gateway ] [Christopher Summers] recovered [0] indices into cluster_state Hint: Some lines were ellipsized, use -l to show in full. |
También podemos comprobar si está escuchando el puerto 9200 definido por defecto y mediante el cual Logstash se comunicará con ElasticSearch:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
> curl localhost:9200 { "name" : "Christopher Summers", "cluster_name" : "elasticsearch", "version" : { "number" : "2.3.5", "build_hash" : "90f439ff60a3c0f497f91663701e64ccd01edbb4", "build_timestamp" : "2016-07-27T10:36:52Z", "build_snapshot" : false, "lucene_version" : "5.5.0" }, "tagline" : "You Know, for Search" } |
Con todo esto ya tenemos ElasticSearch instalado y funcionando. En el próximo articulo instalaremos y configuraremos Logstash.
Referencias de interés:
- https://es.wikipedia.org/wiki/Elasticsearch
- https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html
- https://es.wikipedia.org/wiki/Logstash
- https://www.adictosaltrabajo.com/tutoriales/introduccion-a-kibana/
- https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-14-04