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-clientApó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
Também na biblioteca
Cliente Redis para C++: conexão, instalação e exemplos
Trabalhando com CSV em Swift (iOS/macOS) — bibliotecas e exemplos de código
Migrações de banco de dados em C++: visão geral de ferramentas e bibliotecas
Parsing de HTML em Kotlin: jsoup, ktor, khtml e outras ferramentas