CodeGym /Cursos /Módulo 5. Spring /Lección 256: Práctica: configuración del logging vía Logs...

Lección 256: Práctica: configuración del logging vía Logstash y Elasticsearch

Módulo 5. Spring
Nivel 20 , Lección 5
Disponible

El logging en microservicios no es solo un truco para parecer profesional, es una herramienta vital. Cuando tus microservicios empiezan a hablar entre sí, tienes que estar seguro de que puedes seguir fácilmente dónde algo ha ido mal. Imagina que tu código es un teatro de código y los logs son como el diario de la vida entre bastidores. ELK-stack (Elasticsearch, Logstash, Kibana) convierte ese diario en algo fácil de leer, buscar y analizar.


¿Por qué ELK?

Cuanto más se comunican tus aplicaciones, más caótico se vuelve el monitoring de logs. ELK resuelve eso con:

  • Elasticsearch — una base de datos potente, optimizada para búsquedas.
  • Logstash — el transportador universal de logs.
  • Kibana — la herramienta de visualización para logs mediante unos dashboards bien chulos.

Y ahora lo mejor: en vez de leer JSON-outputs en tu terminal, podrás "quedarte mirando los gráficos" en Kibana. ¿Suena atractivo? ¡Pues vamos!


Pasos preparatorios

Instalación de los componentes del stack ELK

  1. Elasticsearch:
    Descargamos Elasticsearch y lo arrancamos localmente. Comando para arrancarlo después de descomprimir:
    ./bin/elasticsearch
    
    Asegúrate de que está corriendo visitando http://localhost:9200 en el navegador.
  2. Logstash:
    Descargamos Logstash y lo preparamos para la batalla. Logstash necesitará que lo configures con un archivo de configuración, de eso hablaremos más abajo.
  3. Kibana:
    Descargamos Kibana. Tras arrancarla, Kibana estará disponible en http://localhost:5601.

Preparación de la aplicación Spring Boot

Vamos a crear una aplicación Spring Boot con la estructura básica para logging. Añadimos las siguientes dependencias a nuestro pom.xml (o build.gradle):

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
</dependencies>

¿Por qué Log4j2? Es flexible y se integra de maravilla con Logstash.


Configuración del proyecto para logging

Configuración de log4j2

Crea el archivo log4j2.xml en el directorio src/main/resources. Ejemplo de configuración:


<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <!-- Appender de consola -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <!-- Logstash appender -->
        <Socket name="Logstash" host="localhost" port="5044">
            <JsonLayout complete="true" compact="true" eventEol="true" />
        </Socket>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="Logstash" />
        </Root>
    </Loggers>
</Configuration>

Aquí hemos configurado:

  1. Los logs se muestran en la consola.
  2. Los logs se envían a Logstash a través de un socket.

Configuración de Logstash

Crea el archivo logstash.conf:


input {
  tcp {
    port => 5044
    codec => json
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "application-logs"
  }
  stdout {
    codec => rubydebug
  }
}

Explicación de lo que pasa aquí:

  • input — Logstash espera datos por TCP en el puerto 5044.
  • output — los logs se guardan en Elasticsearch en el índice application-logs y se muestran por consola por si tienes curiosidad.

Arranca Logstash con este archivo de configuración:

./bin/logstash -f logstash.conf

Comprobación

  1. Escribir código: En tu aplicación Spring Boot añade un par de logs:
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class LogController {
        private final Logger logger = LoggerFactory.getLogger(LogController.class);
    
        @GetMapping("/log")
        public String generateLog() {
            logger.info("¡Hola, ELK! Este es mi primer log.");
            logger.error("Houston, ¡tenemos un problema!");
            return "Log enviado";
        }
    }
    
  2. Arranque: Levanta la aplicación Spring Boot, abre el navegador e introduce:
    http://localhost:8080/log
    
  3. Comprobación en Kibana:
    • Entra en Kibana (http://localhost:5601).
    • Ve a Management -> Index Patterns.
    • Configura el patrón de índice para application-logs.
    • Ve a Discover, y verás todos tus maravillosos logs.

Consejos útiles

  1. Siempre prueba la configuración con logs pequeños antes de desplegar en production. El logging que no funciona en un sistema real duele bastante.
  2. Asegúrate de que tu Logstash puede aguantar la carga. Si no, usa clustering o alternativas como Fluentd.
  3. Configura la rotación de índices en Elasticsearch para que los clusters no se ahoguen con gigabytes de datos.

Ahora que has pasado por este paso, tienes una herramienta potente no solo para recoger logs, sino también para buscar problemas en tus microservicios. En la siguiente lección veremos el monitoring de métricas con Prometheus, pero por ahora disfruta explorando tus logs en ELK!

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION