Monitoramento de aplicações TypeScript: métricas e alertas
No desenvolvimento web moderno, monitorar aplicações TypeScript não é um luxo, mas uma necessidade. Sem isso, você corre o risco de saber sobre uma falha apenas pelos usuários. Neste artigo, vamos abordar como configurar um monitoramento eficaz para projetos TypeScript, quais métricas acompanhar e como configurar alertas para receber notificações sobre problemas antes que se tornem críticos.
Por que o monitoramento de aplicações TypeScript é tão importante?
TypeScript, sendo uma extensão do JavaScript, é frequentemente usado para criar sistemas corporativos complexos e soluções server-side em Node.js. No entanto, a natureza dinâmica do JavaScript internamente pode levar a erros inesperados em tempo de execução. O monitoramento permite:
- Detectar problemas em estágio inicial — antes que afetem os usuários.
- Analisar desempenho — identificar gargalos no código.
- Prever falhas — com base em tendências de métricas.
- Melhorar a qualidade do código — entender quais módulos são os mais "problemáticos".
Métricas-chave para aplicações TypeScript
Para que o monitoramento seja eficaz, é necessário coletar as métricas corretas. Vamos dividi-las em três grupos principais.
1. Métricas técnicas (método RED)
A abordagem RED (Rate, Errors, Duration) é ideal para microsserviços e APIs:
- Rate (taxa de requisições) — número de requisições por segundo (RPS).
- Errors (erros) — porcentagem de erros (4xx, 5xx).
- Duration (tempo de resposta) — tempo de processamento da requisição (p50, p95, p99).
Exemplo de coleta de métricas usando a biblioteca prom-client:
import client from 'prom-client';import express from 'express';
const app = express();
// Criando métricasconst 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]});
const httpRequestsTotal = new client.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'route', 'status_code']});
// Middleware para coleta de métricasapp.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { const labels = { method: req.method, route: req.path, status_code: res.statusCode }; httpRequestsTotal.inc(labels); end(labels); }); next();});
// Endpoint para Prometheusapp.get('/metrics', async (req, res) => { res.set('Content-Type', client.register.contentType); res.end(await client.register.metrics());});
app.listen(3000, () => console.log('Server running on port 3000'));2. Métricas de negócio
Essas métricas refletem a saúde do negócio:
- Número de transações bem-sucedidas.
- Tamanho médio do carrinho (para e-commerce).
- Tempo de resposta do banco de dados.
- Número de usuários ativos.
Exemplo de métrica personalizada para rastrear pedidos:
const ordersCreated = new client.Counter({ name: 'orders_created_total', help: 'Total number of orders created', labelNames: ['status']});
// Em algum lugar no códigoexport function createOrder(data: OrderData): Order { // lógica de criação do pedido ordersCreated.inc({ status: 'success' }); return order;}3. Métricas de infraestrutura
Para aplicações Node.js/TypeScript, são críticas:
- Uso de memória (heap, RSS).
- Uso de CPU.
- Número de descritores de arquivo abertos.
- Número de conexões ativas.
- Coleta de lixo (GC).
Exemplo de coleta de métricas de memória:
Blogs
Book Recommendations
Leia também
Registro em aplicações Go: melhores práticas e ferramentas
Utilitários CLI Kotlin: escrevendo do console do zero
Por que o PHP ainda está vivo e popular: história, código e razões do sucesso
Convert Int to String em Swift: 5 erros fatais de iniciantes
Microsserviços em PHP: arquitetura e prática de nível avançado