CodeGym /Cursos /Módulo 5. Spring /Lección 157: Añadiendo registro (logging) y monitorizació...

Lección 157: Añadiendo registro (logging) y monitorización con Spring Boot Actuator

Módulo 5. Spring
Nivel 25 , Lección 6
Disponible

Hoy aprenderemos cómo, con la ayuda de Spring Boot Actuator, hacer tu aplicación más observable. En particular, veremos:

  1. Conexión y configuración de Spring Boot Actuator.
  2. Uso de métricas y endpoints integrados para monitorización.
  3. Logging e integración con sistemas externos como Grafana, Prometheus y ELK (Elasticsearch, Logstash, Kibana).
  4. Configuración de métricas personalizadas para tu aplicación.

Así que prepárate, ¡es hora de mirar bajo el capó de tu aplicación!


Conexión de Spring Boot Actuator

Recordemos, Spring Boot Actuator es un módulo que añade observabilidad y proporciona métricas, disponibles vía API o consola. Es una auténtica herramienta Jedi para el desarrollador que quiere vigilar su aplicación.

Documentación oficial: Spring Boot Actuator

Empezaremos añadiendo la dependencia Actuator al proyecto. Asegúrate de tener instalado Spring Boot (por si lo habías olvidado antes).

Añadimos la dependencia

Añade la siguiente dependencia en tu pom.xml:


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

Si usas Gradle, importa:


implementation 'org.springframework.boot:spring-boot-starter-actuator'

Después de eso, ejecuta mvn install o gradle build para traer las dependencias al proyecto.


Principales funcionalidades de Actuator

Actuator ofrece un conjunto de endpoints listos para monitorear y gestionar la aplicación. Aquí tienes algunos:

Endpoint Propósito
/actuator/health Muestra el estado de la aplicación (UP/DOWN)
/actuator/info Información general de la aplicación (configurable)
/actuator/metrics| Métricas de rendimiento de la aplicación
/actuator/env Variables de entorno y sus valores
/actuator/loggers| Gestión de los niveles de logging
/actuator/beans Información de todos los Spring Beans registrados en la aplicación

Configuración y activación de endpoints

Paso 1: Permitir endpoints

Por defecto, no todos los endpoints de Actuator están accesibles. Vamos a abrirlos en la configuración:


# application.yml
management:
  endpoints:
    web:
      exposure:
        include: "*" # Abrimos todos los endpoints

O, si usas application.properties:


management.endpoints.web.exposure.include=*

Abre el navegador y ve a http://localhost:8080/actuator. Verás la lista de endpoints disponibles.


Paso 2: Activar métricas

Spring Boot Actuator está integrado con Micrometer, la herramienta para recolectar métricas de rendimiento. Para empezar, vamos a ver algunas métricas preinstaladas:

  1. Arranca la aplicación.
  2. Ve a /actuator/metrics.
  3. Verás la lista de todas las métricas disponibles. Por ejemplo:

{
  "names": [
    "jvm.memory.used",
    "jvm.memory.max",
    "process.uptime",
    "system.cpu.usage",
    "http.server.requests"
  ]
}

Prueba a ir a una métrica concreta, por ejemplo /actuator/metrics/system.cpu.usage. Obtendrás datos sobre la carga de CPU.


Integración con Prometheus

Prometheus es un sistema de monitorización que funciona muy bien junto a Actuator. Vamos a configurarlo.

Paso 1: Añadimos la dependencia de Prometheus


<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

Paso 2: Activamos el endpoint /actuator/prometheus


management:
  endpoints:
    web:
      exposure:
        include: prometheus

Ahora Prometheus podrá recoger datos de tu aplicación haciendo peticiones a /actuator/prometheus.


Logging con ELK

Con los logs es sencillo: deben ser legibles y centralizados. Para eso encaja muy bien la combinación Elasticsearch, Logstash y Kibana.

Paso 1: Configura el archivo logback-spring.xml

Crea el archivo logback-spring.xml en src/main/resources.


<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/spring-boot-app.log</file>
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

Paso 2: Integración con Logstash

Logstash recogerá los logs desde el archivo spring-boot-app.log. Configúralo para enviar los datos a Elasticsearch para analizarlos con Kibana.


Configuración de métricas personalizadas

Supongamos que quieres rastrear cuántas veces se llama a un método determinado en tu aplicación. Para crear métricas propias puedes usar Micrometer.

Ejemplo: Métrica personalizada

Añade la siguiente configuración:


import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;

@Service
public class CustomMetricsService {

    private final Counter customCounter;

    public CustomMetricsService(MeterRegistry registry) {
        this.customCounter = registry.counter("custom.metric.counter", "type", "custom_metric");
    }

    public void performAction() {
        // Lógica del método
        customCounter.increment(); // Incrementamos el contador
    }
}

Ahora, en cada llamada a performAction(), tu contador personalizado aumentará. Esa métrica se puede ver en el endpoint /actuator/metrics/custom.metric.counter.


Protección de las métricas

No todos los endpoints de Actuator deberían estar abiertos al público. Por ejemplo, /actuator/metrics y /actuator/beans contienen información sensible que podría ser usada por atacantes. Usa Spring Security para limitar el acceso:


@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/actuator/health").permitAll() // Accesible para todos
        .antMatchers("/actuator/**").authenticated() // Requiere autenticación
        .and()
        .httpBasic();
}

Ahora tu aplicación no solo es funcional, ¡sino también observable! Puedes analizar métricas, loguear eventos y estar seguro de que la aplicación funciona de forma estable.

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