Métricas de Prometheus en Java: biblioteca simpleclient
Prometheus es un potente sistema de monitoreo y alerta de código abierto que recopila métricas de diversas fuentes. Para aplicaciones Java, existen varias bibliotecas para la integración con Prometheus. La principal y más popular es simpleclient del propio proyecto Prometheus. Proporciona una forma minimalista, segura para subprocesos y de alto rendimiento para crear, registrar y exportar métricas.
¿Qué es simpleclient?
simpleclient es la biblioteca oficial de Java para Prometheus, que permite a los desarrolladores agregar métricas a las aplicaciones con una sobrecarga mínima. Admite cuatro tipos principales de métricas:
- Counter — un contador que solo aumenta (por ejemplo, número de solicitudes).
- Gauge — un valor que puede tanto aumentar como disminuir (por ejemplo, número de conexiones activas, temperatura).
- Histogram — un histograma que mide la distribución de valores (por ejemplo, tiempo de ejecución de solicitudes).
- Summary — un resumen similar al histograma, pero que calcula cuantiles en el lado del cliente.
Instalación y configuración
Para trabajar con simpleclient, agregue las siguientes dependencias en pom.xml (Maven):
<dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient</artifactId> <version>0.16.0</version></dependency><dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_hotspot</artifactId> <version>0.16.0</version></dependency><dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_servlet</artifactId> <version>0.16.0</version></dependency>Para Gradle:
implementation 'io.prometheus:simpleclient:0.16.0'implementation 'io.prometheus:simpleclient_hotspot:0.16.0'implementation 'io.prometheus:simpleclient_servlet:0.16.0'Creación y registro de métricas
Veamos la creación de un contador simple de solicitudes. Las métricas se registran en el registro global CollectorRegistry.defaultRegistry.
import io.prometheus.client.Counter;import io.prometheus.client.Gauge;
public class MetricsExample { // Creamos un contador con nombre "http_requests_total" y etiquetas "method" y "endpoint" static final Counter requests = Counter.build() .name("http_requests_total") .help("Total number of HTTP requests.") .labelNames("method", "endpoint") .register();
// Creamos un gauge para el número de sesiones activas static final Gauge activeSessions = Gauge.build() .name("active_sessions") .help("Current number of active sessions.") .register();
public static void processRequest(String method, String endpoint) { // Incrementamos el contador requests.labels(method, endpoint).inc(); // Establecemos el valor del gauge (por ejemplo, tamaño de la cola) activeSessions.set(42); }}Exportación de métricas a través de HTTP
Para que Prometheus pueda recopilar las métricas, es necesario proporcionar un endpoint /metrics. La forma más sencilla es usando el servlet integrado. Si usa Spring Boot, agregue la dependencia simpleclient_spring_boot.
import io.prometheus.client.exporter.MetricsServlet;import io.prometheus.client.hotspot.DefaultExports;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;
@WebServlet("/metrics" También en la biblioteca
ORM para C# (.NET): Comparación de Entity Framework, Dapper y NHibernate
Trabajo con imágenes en Swift: resize y crop para iOS/macOS
Chai para JavaScript (Node.js): guía completa con ejemplos
Trabajo con fechas en Kotlin: bibliotecas y herramientas para el desarrollo