Monitoreo de aplicaciones Java: biblioteca Micrometer
Las aplicaciones Java modernas requieren una supervisión constante del rendimiento, consumo de memoria, tiempo de respuesta y otros parámetros críticos. Micrometer es la biblioteca estándar de facto para la recolección de métricas en el ecosistema Java, que proporciona una API universal y admite la exportación de datos a sistemas de monitoreo populares como Prometheus, Graphite y Datadog.
¿Qué es Micrometer y por qué es necesario?
Micrometer es una fachada para la recolección de métricas, similar a como SLF4J es una fachada para el registro. Abstrae el código de la aplicación del sistema de monitoreo específico, permitiendo cambiar entre backends sin modificar la lógica de negocio.
Funcionalidades principales de la biblioteca:
- Contadores (Counter) — para contar eventos (por ejemplo, número de solicitudes).
- Temporizadores (Timer) — para medir el tiempo de ejecución de operaciones.
- Indicadores (Gauge) — para rastrear valores actuales (por ejemplo, tamaño del pool de hilos).
- Resúmenes de distribución (DistributionSummary) — para analizar la distribución de valores (por ejemplo, tamaño del cuerpo de la solicitud).
- Etiquetas (Tags) — para agregar dimensiones a las métricas (por ejemplo,
endpoint,status).
Instalación y configuración
Para usar Micrometer en un proyecto Maven, agregue la siguiente dependencia en pom.xml:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> <version>1.12.0</version></dependency>Si usa Spring Boot, simplemente agregue el starter micrometer-registry-prometheus:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.12.0</version></dependency>Después de esto, Spring Boot configurará automáticamente MeterRegistry y abrirá el endpoint /actuator/prometheus para la recolección de métricas.
Ejemplos de uso
1. Creación de un contador de solicitudes
Ejemplo simple de conteo del número de llamadas a un método:
import io.micrometer.core.instrument.Counter;import io.micrometer.core.instrument.MeterRegistry;
public class RequestCounter { private final Counter requestCounter;
public RequestCounter(MeterRegistry registry) { this.requestCounter = Counter.builder("api.requests") .tag("endpoint", "/users") .description("Total number of requests to /users") .register(registry); }
public void handleRequest() { requestCounter.increment(); // lógica de negocio }}2. Medición del tiempo de ejecución con un temporizador
Use Timer.Sample para medir el tiempo de ejecución de un bloque de código:
import io.micrometer.core.instrument.Timer;import io.micrometer.core.instrument.MeterRegistry;
public class RequestTimer { private final Timer requestTimer;
public RequestTimer(MeterRegistry registry) { this.requestTimer = Timer.builder("api.response.time") .tag("endpoint", "/data") .publishPercentiles(0.95, 0.99) .register(registry); }
public String processRequest() { Timer.Sample sample = Timer.start(registry); try { // emulación de retardo Thread.sleep(100); return "OK"; } catch (InterruptedException e) { Thread.currentThread().interrupt(); return "ERROR"; } finally También en la biblioteca
Trabajo con imágenes en Kotlin: bibliotecas, herramientas y ejemplos
Trabajo con archivos ZIP en C# (.NET): guía completa
CameraX para Kotlin: guía completa con ejemplos prácticos
Validación de datos en JavaScript (Node.js): Joi, Yup, Zod