Hoy aprenderemos cómo, con la ayuda de Spring Boot Actuator, hacer tu aplicación más observable. En particular, veremos:
- Conexión y configuración de Spring Boot Actuator.
- Uso de métricas y endpoints integrados para monitorización.
- Logging e integración con sistemas externos como Grafana, Prometheus y ELK (Elasticsearch, Logstash, Kibana).
- 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:
- Arranca la aplicación.
- Ve a
/actuator/metrics. - 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.
GO TO FULL VERSION