Spring Boot 🍃 : Actuator REST API
En esencia, Actuator aporta funciones listas para producción a nuestra aplicación. Monitorea nuestra aplicación, recopila métricas, permite conocer el estado de nuestra base de datos, entre otras cosas.
El principal beneficio de esta librería es que podemos obtener herramientas a nivel de producción sin tener que implementar estas funciones nosotros mismos.
El actuator expone principalmente información operativa sobre la aplicación en ejecución (estado, métricas, información, etc). Utiliza endpoints HTTP para permitirnos interactuar con él.
Una vez que esta dependencia se habilita a través de nuestra configuración, disponemos de varios endpoint listos para usar. Como la mayoría de los módulos de Spring, podemos configurarla o ampliarla fácilmente de diversas maneras.
Primeros pasos
1. Agregar la dependencias
Necesitamos agregar la dependencia spring-boot-actuator
a nuestro administrador de paquetes para habilitar Spring Boot Actuator.
En Maven:
1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Tenga en cuenta que esto sigue siendo válido independientemente de la versión de Spring Boot, ya que las versiones se especifican en la lista de materiales (BOM) de Spring Boot.
2. Habilitar endpoint de Actuator
De forma predeterminada, solo de habilitan algunos endpoints. Puedes habilitar enpoints adicionales en el archivo de configuración:
1
2
3
4
5
6
7
8
management:
endpoints:
web:
exposure:
include: "*" # esto habilita todos los endpoints
endpoint:
health:
show-details: always # muestra la información del estado
3. Explorar endpoints de Actuator
- Endpoint health
- proporciona información sobre el estado de la aplicación:
GET http://localhost:8080/actuator/health
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"status":"UP",
"components":{
"diskSpace":{
"status":"UP",
"details":{
"total":226106015744,
"free":221147168768,
"threshold":10485760,
"path":"/home/mcherrera/workspace/springboot/demo-actuator/.",
"exists":true
}
},
"ping":{
"status":"UP"
},
"ssl":{
"status":"UP",
"details":{
"validChains":[
],
"invalidChains":[
]
}
}
}
}
- Enpoint de métricas
- Proporciona varias métricas relacionadas con la aplicación:
GET: http://localhost:8080/actuator/metrics
1
2
3
4
5
6
7
8
9
{
"names": [
"jvm.memory.used",
"jvm.gc.pause",
"system.cpu.usage",
"system.memory.usage",
"http.server.requests"
]
}
- Para obtener detalles de una métrica específica:
GET http://localhost:8080/actuator/metrics/jvm.memory.used
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"name": "jvm.memory.used",
"description": "The amount of used memory",
"baseUnit": "bytes",
"measurements": [
{
"statistic": "VALUE",
"value": 5.1234567E7
}
],
"availableTags": [
{
"tag": "area",
"values": [
"heap",
"nonheap"
]
},
{
"tag": "id",
"values": [
"PS Eden Space",
"PS Survivor Space",
"PS Old Gen",
"Metaspace",
"Compressed Class Space"
]
}
]
}
- Endpoint del entorno
- proporciona información sobre las propiedades del entorno:
GET http://localhost:8080/actuator/env
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"activeProfiles": [],
"propertySources": [
{
"name": "systemProperties",
"properties": {
"java.runtime.name": {
"value": "Java(TM) SE Runtime Environment"
},
"java.vm.version": {
"value": "25.181-b13"
}
}
},
{
"name": "systemEnvironment",
"properties": {
"PATH": {
"value": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
},
"HOME": {
"value": "/root"
}
}
}
]
}
- Enpoint de info
- Proporciona información sonbre la aplicación:
GET http://localhost:8080/actuator/info
Para personalizar la información, agrega propiedades en el archivo de configuración:
1
2
3
4
5
6
7
8
9
management:
info:
env:
enabled: true
info:
app:
name: "Mi Aplicación de Spring Boot"
description: "Esto es un ejemplo demostrativo de Spring Boot con Actuator"
version: 1.0.0
Protección de endpoints
De forma predeterminada, todos los endpoints del Actuator son accesible sin autenticación. Para proteger estos endpoints, podemos configurar a nuestro amigo Spring Security.
Agregar la dependencia
Al igual que como lo hicimos con Actuator, añade la dependencia de Spring Security al pom.xml
:
1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Restringir el acceso
Ahora, actualiza el archivo de configuración:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
spring:
security:
user:
name: admin # por defecto
password: admin # por defecto
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
security:
enabled: true
roles: ACTUATOR
Por último, crea una clase de configuración para configurar la seguridad del endpoint:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.requestMatchers("/actuator/**").hasRole("ACTUATOR")
.anyRequest().authenticated()
)
.httpBasic(Customizer.withDefaults());
return http.build();
}
}
Con esta configuración, solo los usuarios autenticados con el rol ACTUATOR
pueden acceder a los endpoints.