¿Alguna vez has intentado encontrar un error revisando un montón de archivos de texto con registros? Imagina que hay unas decenas de esos archivos y que están repartidos en distintos servidores. Para facilitar situaciones así se inventó el stack ELK. ELK — es el trío de herramientas: Elasticsearch, Logstash y Kibana, que ayudan a recopilar, almacenar, analizar y visualizar los registros.
En una arquitectura de microservicios cada servicio genera sus propios registros. Si surge un error, queremos poder encontrar rápida y fácilmente dónde ocurrió, revisar la cadena de eventos y entender por qué todo falló. El registro centralizado permite:
- Reunir los registros de todos los microservicios en un solo lugar.
- Analizar los registros cómodamente usando queries (en vez de "mirar a mano").
- Encontrar rápidamente las interacciones entre servicios y averiguar la causa de los problemas.
- Visualizar los datos para entender mejor lo que pasa.
¿Qué es el stack ELK?
Veamos cada una de las tres letras de ELK:
- Elasticsearch — es un almacén de datos y motor de búsqueda. Encuentra los registros necesarios en volúmenes enormes de datos en fracciones de segundo. También soporta queries basados en JSON.
- Logstash — es un procesador de datos. Recoge registros de diferentes fuentes, los filtra o transforma y los manda a Elasticsearch. Se podría decir que es el "repartidor" de los registros.
- Kibana — es la herramienta de visualización. Toma datos de Elasticsearch y dibuja gráficos, diagramas y tablas para que puedas entender lo que ocurre sin sufrir.
Cuando estas tres herramientas trabajan juntas, convierten los aburridos archivos de texto en una potente herramienta de análisis.
Instalación y configuración de ELK
Elasticsearch
Empecemos instalando Elasticsearch, que será nuestro almacén de registros.
- Descarga e instala Elasticsearch.
- Después de la instalación abre el archivo de configuración
elasticsearch.yml, que se encuentra en la carpetaconfig. - Comprueba que Elasticsearch esté accesible localmente:
network.host: 127.0.0.1 http.port: 9200 - Arranca Elasticsearch:
Tras el arranque el servicio estará disponible en http://localhost:9200.
./bin/elasticsearch
Logstash
Ahora vamos a configurar el segundo componente — Logstash. Es el puente que recibirá los registros de nuestra aplicación Spring Boot y los enviará a Elasticsearch.
- Descarga e instala Logstash.
- Crea el archivo de configuración
logstash.conf:input { beats { port => 5044 } } output { elasticsearch { hosts => ["localhost:9200"] } }- En input indicamos que queremos recibir registros por el puerto
5044. - En output configuramos Logstash para enviar los datos a Elasticsearch.
- En input indicamos que queremos recibir registros por el puerto
- Arrancamos Logstash:
./bin/logstash -f logstash.conf
Kibana
El último paso — instalar y arrancar Kibana, para poder visualizar los datos.
- Descarga e instala Kibana.
- Configura Kibana editando el archivo
kibana.yml:server.port: 5601 server.host: "localhost" elasticsearch.hosts: ["http://localhost:9200"] - Arranca Kibana:
Ahora la interfaz de Kibana está disponible en http://localhost:5601.
./bin/kibana
Así que los componentes principales están instalados. Ahora podemos integrar nuestra aplicación Spring Boot con ELK.
Integración de microservicios con ELK
Configuración del logging en Spring Boot
Es el momento de hacer que tu aplicación envíe los registros directamente a Logstash.
- Abre
pom.xmly añade las siguientes dependencias:<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>7.4</version> </dependency> - Configura
logback-spring.xmlpara enviar los registros a Logstash:<configuration> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>127.0.0.1:5044</destination> <encoder class="net.logstash.logback.encoder.LogstashEncoder" /> </appender> <root level="INFO"> <appender-ref ref="LOGSTASH" /> </root> </configuration> Reinicia la aplicación. Ahora los registros se enviarán automáticamente a Logstash y desde ahí a Elasticsearch.
Comprobación de los registros
- Abre la interfaz de Kibana (http://localhost:5601).
- Ve a la sección Discover.
- Configura el índice (por ejemplo,
logstash-*) y verás los registros de tu aplicación.
Configuración práctica de ELK para microservicios
Imaginemos que tenemos dos microservicios:
- User Service — se encarga de gestionar los datos de usuarios.
- Order Service — se encarga de procesar pedidos.
Pasos:
- Añade la configuración de Logstash en cada servicio, como se mostró antes.
- Configura ambos servicios para que envíen los registros a Logstash.
- Usa Kibana para analizar los registros:
- Busca las requests que pasan por ambos servicios.
- Si las requests están relacionadas entre sí (por ejemplo, Trace ID de Sleuth), sigue su rastro.
¿Qué debes tener en cuenta?
El registro es una herramienta potente, pero tiene algunos retos asociados:
- Consumo de recursos. Generar y procesar grandes volúmenes de registros puede ralentizar el sistema.
- Seguridad. Asegúrate de que los datos sensibles (por ejemplo, contraseñas) no acaben en los registros.
- Almacenamiento. Elasticsearch tiene límites en la cantidad de datos, así que los registros antiguos deben archivarse o eliminarse.
Ahora, cuando tus microservicios tengan registro centralizado mediante ELK, podrás dormir mucho más tranquilo. La diagnosis de problemas pasará a ser cuestión de segundos, y la visualización de los registros en Kibana seguro que dejará contento a tu equipo. (O al menos a tu líder de equipo.)
GO TO FULL VERSION