Métricas de Prometheus en Java: guía completa de la biblioteca simpleclient
Prometheus es un potente sistema de monitoreo y alerta de código abierto, que se ha convertido en el estándar de facto en el mundo Cloud Native. Para desarrolladores Java, existen varias bibliotecas para la integración, pero la biblioteca oficial simpleclient (también conocida como prometheus/client_java) es la más popular y con mejor soporte. En este artículo, analizaremos en detalle cómo agregar métricas de Prometheus a una aplicación Java utilizando esta biblioteca.
¿Qué es simpleclient?
simpleclient es el cliente oficial de Java para Prometheus, que proporciona una forma simple y eficiente de crear y exportar métricas. La biblioteca admite cuatro tipos principales de métricas de Prometheus:
- Counter (Contador) — un valor que aumenta monótonamente (por ejemplo, número de solicitudes).
- Gauge (Indicador) — un valor que puede cambiar arbitrariamente (por ejemplo, la carga actual de la CPU).
- Histogram (Histograma) — distribución de valores en "cubos" predefinidos (por ejemplo, tiempo de respuesta).
- Summary (Resumen) — cuantiles de los valores observados (por ejemplo, p50, p99 del tiempo de respuesta).
Instalación y configuración
Para comenzar, agregue las siguientes dependencias a su archivo pom.xml (Maven) o build.gradle (Gradle).
Maven
<dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient</artifactId> <version>0.16.0</version></dependency>
<!-- Para exportar métricas a través de HTTP --><dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_httpserver</artifactId> <version>0.16.0</version></dependency>Gradle
implementation 'io.prometheus:simpleclient:0.16.0'implementation 'io.prometheus:simpleclient_httpserver:0.16.0'Creación y uso de métricas
Veamos un ejemplo de creación de todos los tipos principales de métricas en una sola clase.
import io.prometheus.client.Counter;import io.prometheus.client.Gauge;import io.prometheus.client.Histogram;import io.prometheus.client.Summary;
public class MetricsExample {
// 1. Counter: número de solicitudes procesadas static final Counter requestsCounter = Counter.build() .name("app_requests_total") .help("Total number of processed requests.") .labelNames("endpoint", "method") .register();
// 2. Gauge: número actual de usuarios activos static final Gauge activeUsersGauge = Gauge.build() .name("app_active_users") .help("Current number of active users.") .register();
// 3. Histogram: duración de la solicitud en milisegundos static final Histogram requestDurationHistogram = Histogram.build() .name("app_request_duration_ms") .help("Request duration in milliseconds.") .buckets(10, 50, 100, 200, 500, 1000, 5000) .register();
// 4. Summary: cuantiles de la duración de la solicitud static final Summary requestDurationSummary = Summary.build() .name("app_request_duration_summary_ms") .help("Request duration summary in milliseconds.") .quantile(0.5, 0.05) // p50 con un margen de error del 5% .quantile(0.99, 0.01) // p99 con un margen de error del 1% .register();
public static void main(String[] args) throws Exception { // Simulación de procesamiento de solicitudes for (int i = 0; i < 100; i++) { processRequest("/api/users", "GET"); }
// Iniciar el servidor HTTP para exportar métricas new HTTPServer(9090); System.out.println("Metrics server started También en la biblioteca
Colas de tareas en Swift: GCD, OperationQueue y Combine para iOS/macOS
ORM para TypeScript: comparación de TypeORM, Prisma y MikroORM
Cliente Elasticsearch para Go (Golang): guía completa