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

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

Biblioteca prom-client: Monitoramento de aplicações Node.js com Prometheus



No desenvolvimento web moderno, o monitoramento de desempenho e estado das aplicações tornou-se uma necessidade. Uma das soluções mais populares para coleta e análise de métricas é o Prometheus — um sistema de código aberto que coleta dados na forma de séries temporais. Para integração com Node.js, existe a biblioteca oficial prom-client, que permite exportar métricas facilmente em um formato compreensível para o Prometheus.



Neste artigo, vamos detalhar como instalar e usar o prom-client, quais tipos de métricas estão disponíveis e como integrá-las com o framework web Express.



Instalação e configuração



Para começar, instale a biblioteca via npm:



npm install prom-client


Após a instalação, importe-a para sua aplicação:



const prometheus = require('prom-client');const express = require('express');const app = express();


Principais tipos de métricas



A biblioteca prom-client suporta quatro tipos principais de métricas do Prometheus:



  • Counter — um contador que só aumenta (por exemplo, número de requisições).
  • Gauge — um valor que pode tanto aumentar quanto diminuir (por exemplo, número de conexões ativas).
  • Histogram — um histograma que mede a distribuição de valores (por exemplo, tempo de resposta).
  • Summary — uma estatística resumida, semelhante ao Histogram, mas com quantis mais precisos.


Exemplo: Counter (contador de requisições)



Vamos criar um contador para rastrear o número total de requisições HTTP:



const httpRequestsTotal = new prometheus.Counter({  name: 'http_requests_total',  help: 'Total number of HTTP requests',  labelNames: ['method', 'route', 'status']});

// Middleware para contar requisiçõesapp.use((req, res, next) => { res.on('finish', () => { httpRequestsTotal.inc({ method: req.method, route: req.path, status: res.statusCode }); }); next();});


Exemplo: Gauge (conexões ativas)



O Gauge é útil para rastrear o estado atual, como o número de usuários ativos:



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

app.get('/login', (req, res) => { activeUsers.inc(); // Aumenta ao fazer login res.send('Logged in');});

app.get('/logout', (req, res) => { activeUsers.dec(); // Diminui ao fazer logout res.send('Logged out');});


Exemplo: Histogram (tempo de resposta)



O Histogram permite medir quanto tempo leva para processar requisições:



const httpRequestDuration = new prometheus.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});

app.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.path }); }); next();});


Exportando métricas para o Prometheus



Para que o Prometheus possa coletar dados, é necessário criar um endpoint (geralmente /metrics) que retorna todas as métricas registradas:



app.get('/metrics', async (req, res) => {  res.set('Content-Type', prometheus.register.contentType);  res.end(await prometheus.register.metrics());});

app.listen(3000, () => { console.log('Server running on port 3000');});


Métricas personalizadas com labels



Você pode adicionar labels (rótulos) para uma filtragem mais detalhada. Por exemplo, vamos dividir as métricas por versões da API:



const apiCalls = new prometheus.Counte                    

Recommendations