Entrada

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.

Definir el rol Actuator

Esta entrada est谩 licenciada bajo CC BY 4.0 por el autor.