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

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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



Prometheus é um poderoso sistema de monitoramento e alerta de código aberto que coleta métricas de suas aplicações e infraestrutura. Para integrar Prometheus com aplicações Node.js, existe a biblioteca oficial e mais popular prom-client. Ela fornece ferramentas prontas para criar, registrar e exportar métricas no formato que o Prometheus entende.



Neste artigo, vamos detalhar como instalar e usar o prom-client, quais tipos de métricas estão disponíveis e como configurar um endpoint para coleta de dados.



Instalação do prom-client



A instalação da biblioteca é feita com o gerenciador de pacotes padrão npm:



npm install prom-client


Após a instalação, você pode importar a biblioteca para o seu projeto:



const client = require('prom-client');


Principais tipos de métricas Prometheus



Prometheus suporta quatro tipos principais de métricas, cada um resolvendo um problema específico:



  • Counter — contador que só pode aumentar (ex.: número de requisições, erros).
  • Gauge — valor que pode tanto aumentar quanto diminuir (ex.: número de usuários ativos, uso de memória).
  • Histogram — histograma para medir a distribuição de valores (ex.: tempo de resposta de requisições).
  • Summary — semelhante ao histograma, mas calcula quantis no lado da aplicação.


Exemplos de uso do prom-client



Vamos criar cada tipo de métrica usando um exemplo simples de uma aplicação Express.



1. Counter (contador)



O contador é ideal para contar o número de eventos, como requisições HTTP ou erros.



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 monitorar um valor atual que pode variar em ambos os sentidos.



const activeUsersGauge = new client.Gauge({  name: 'active_users',  help: 'Number of active users'});

// Incrementar em 1:activeUsersGauge.inc();// Decrementar em 1:activeUsersGauge.dec();// Definir um valor específico:activeUsersGauge.set(42);


3. Histogram (histograma)



O histograma ajuda a analisar a distribuição do tempo de execução de operações.



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] // limites dos buckets (em segundos)});

// Medição de tempo:const end = requestDurationHistogram.startTimer();// ... execução da requisição ...end({ method: 'GET', route: '/api/users' });


4. Summary (sumário)



Summary é semelhante ao histograma, mas fornece quantis precisos (ex.: 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] // quantis para cálculo});

// Uso semelhante ao histograma:const endSummary = requestDurationSummary.startTimer();// ... execução da requisição ...endSummary({ method: 'GET', route: '/api/data' });


Configuração do endpoint para Prometheus



Para que o Prometheus possa coletar métricas, é necessário criar um endpoint HTTP separado (geralmente /metrics), que retornará os da

Recommendations