Métricas de Prometheus en Node.js: biblioteca prom-client

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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-client


Despué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

Recommendations