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.