Métricas de Prometheus en Node.js: biblioteca prom-client
Prometheus es un potente sistema de monitoreo y alerta de código abierto que recopila métricas de sus aplicaciones e infraestructura. Para la integración de Prometheus con aplicaciones Node.js, existe la biblioteca oficial y más popular prom-client. Proporciona herramientas listas para crear, registrar y exportar métricas en el formato que entiende Prometheus.
En este artículo, analizaremos en detalle cómo instalar y usar prom-client, qué tipos de métricas están disponibles y cómo configurar un endpoint para la recopilación de datos.
Instalación de prom-client
La instalación de la biblioteca se realiza con el administrador de paquetes estándar npm:
npm install prom-clientDespués de la instalación, puede importar la biblioteca a su proyecto:
const client = require('prom-client');Tipos principales de métricas de Prometheus
Prometheus admite cuatro tipos principales de métricas, cada uno con su propósito:
- Counter — un contador que solo puede aumentar (por ejemplo, número de solicitudes, errores).
- Gauge — un valor que puede tanto aumentar como disminuir (por ejemplo, número de usuarios activos, uso de memoria).
- Histogram — un histograma para medir la distribución de valores (por ejemplo, tiempo de respuesta de solicitudes).
- Summary — similar al histograma, pero calcula cuantiles en el lado de la aplicación.
Ejemplos de uso de prom-client
Veamos la creación de cada tipo de métrica con un ejemplo de una aplicación Express simple.
1. Counter (contador)
El contador es ideal para contar eventos, como solicitudes HTTP o errores.
const httpRequestsCounter = new client.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'status']});
// Uso:httpRequestsCounter.inc({ method: 'GET', status: 200 });httpRequestsCounter.inc({ method: 'POST', status: 500 });2. Gauge (medidor)
Gauge permite rastrear un valor actual que puede cambiar en ambas direcciones.
const activeUsersGauge = new client.Gauge({ name: 'active_users', help: 'Number of active users'});
// Incrementar en 1:activeUsersGauge.inc();// Decrementar en 1:activeUsersGauge.dec();// Establecer un valor específico:activeUsersGauge.set(42);3. Histogram (histograma)
El histograma ayuda a analizar la distribución del tiempo de ejecución de las operaciones.
const requestDurationHistogram = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['method', 'route'], buckets: [0.1, 0.5, 1, 2, 5] // límites de los buckets (en segundos)});
// Medición de tiempo:const end = requestDurationHistogram.startTimer();// ... ejecución de la solicitud ...end({ method: 'GET', route: '/api/users' });4. Summary (resumen)
Summary es similar al histograma, pero proporciona cuantiles precisos (por ejemplo, mediana, percentil 95).
const requestDurationSummary = new client.Summary({ name: 'http_request_duration_summary_seconds', help: 'Summary of HTTP request duration in seconds', labelNames: ['method', 'route'], percentiles: [0.5, 0.9, 0.99] // cuantiles para calcular});
// Uso similar al histograma:const endSummary = requestDurationSummary.startTimer();// ... ejecución de la solicitud ...endSummary({ method: 'GET', route: '/api/data' });Configuración del endpoint para Prometheus
Para que Prometheus pueda recopilar métricas, es necesario crear un endpoint HTTP separado (generalmente /metrics) que devuelva los da
También en la biblioteca
Envío de correo electrónico en Rust: bibliotecas lettre y mailparse para trabajar con correo
Biblioteca estándar de Go (Golang): guía completa
Envío de SMS en Java: resumen de bibliotecas API (Twilio, Nexmo, pasarelas SMS)
Mocha para JavaScript (Node.js): guía completa con ejemplos