Monitoramento de aplicações JavaScript: métricas e alertas em Node.js

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

Introdução: Por que o monitoramento é crítico para aplicações Node.js



Aplicações web modernas em JavaScript (Node.js) operam sob alta carga e arquiteturas distribuídas. Mesmo o código perfeitamente escrito pode falhar devido a vazamentos de memória, queda de desempenho ou erros em operações assíncronas. O monitoramento de aplicações JavaScript permite não apenas detectar o problema, mas também preveni-lo antes que afete os usuários.



Neste artigo, vamos analisar quais métricas devem ser monitoradas, como configurar a coleta de dados usando ferramentas populares (Prometheus, Grafana) e como organizar um sistema de alertas para Node.js. Todos os exemplos de código estão escritos em JavaScript e prontos para uso.



Métricas-chave para aplicações Node.js



O monitoramento de aplicações Node.js pode ser dividido em três níveis: infraestrutura, aplicação e métricas de negócio. Vamos analisar cada um deles.



Métricas de infraestrutura

Essas métricas mostram o estado do servidor e do ambiente de execução:

  • CPU e Memory (RSS, Heap Total, Heap Used) — vazamentos de memória e alta carga do processador.
  • Event Loop Lag — atraso no loop de eventos (se >50ms, a aplicação começa a ficar lenta).
  • Garbage Collection (GC) — frequência e duração da coleta de lixo.
  • File Descriptors — número de arquivos e sockets abertos.


Métricas da aplicação

Mostram como a aplicação processa as requisições:

  • RPS (Requests Per Second) — número de requisições por segundo.
  • Latency (p50, p95, p99) — atraso na resposta.
  • Error Rate — percentual de erros (4xx, 5xx).
  • Active Connections — número de conexões WebSocket/HTTP ativas.


Métricas de negócio

Específicas para sua aplicação:

  • Número de usuários registrados.
  • Velocidade de processamento de pagamentos.
  • Tempo de resposta de APIs externas.


Coleta de métricas com Prometheus e Node.js



Prometheus é o padrão de facto para coleta de métricas na infraestrutura moderna. Para Node.js, existe a biblioteca prom-client, que permite exportar métricas facilmente.



Instalação e configuração do prom-client

npm install prom-client express


Vamos criar um servidor básico com métricas:

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

// Criando um registro de métricasconst register = new client.Registry();client.collectDefaultMetrics({ register });

// Criando um histograma personalizado para latênciasconst httpRequestDuration = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['method', 'route', 'status_code'], buckets: [0.1, 0.5, 1, 2, 5]});register.registerMetric(httpRequestDuration);

// Middleware para medir latênciasapp.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.route?.path || 'unknown', status_code: res.statusCode }); }); next();});

// Endpoint para métricasapp.get('/metrics', async (req, res) => { res.set('Content-Type', register.contentType); res.end(await register.metrics());});

app.get('/', (req, res) => { res.send('Hello World');});

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


Coleta de métricas do Event Loop

Para monitorar o loop de eventos, use process.hrtime() ou a biblioteca event-loop-lag:

const eventLoopLag = new client.Gauge({    name: 'nodejs_event_loop_lag_seconds',    help: 'Event loop lag in seconds'});register.re                

Blogs

Book Recommendations