Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.

Quando a gente implementa um proxy transparente usando http-proxy-middleware em Node.js, uma dúvida comum é como fazer uma inspeção de requisições e respostas sem interferir nos dados trafegados.
A galera costuma querer registrar tudo pra debug ou auditoria, mas sem modificar o fluxo. O truque é usar os hooks de evento, como onProxyRes e onProxyReq, pra capturar os dados em tempo real e salvar em arquivo. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Por exemplo, no onProxyRes, dá pra ouvir o evento 'data' do response e jogar num buffer. Assim, consegue-se montar o corpo da resposta completo antes de enviá-la ao cliente. O mesmo vale pra requisições, usando onProxyReq, pra interceptar e logar o conteúdo. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
O ponto é que, pra evitar impacto na performance, é melhor fazer isso de forma assíncrona e garantir que o buffer não fique gigante. Além disso, é importante pensar na segurança, pra não expor dados sensíveis nos logs. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Como vocês fazem esse tipo de inspeção em produção? Já passaram por algum problema de latência ou impacto na estabilidade usando esses hooks?
Eu faria um cache local do que for mais relevante e só logaria o restante em uma fila assíncrona. Assim, a chance de afetar a performance diminui bastante. O segredo é sempre balancear o nível de detalhe com o impacto operacional.
Boa dica. Aqui no meu time, a maior preocupação é sempre o impacto no desempenho. Logar tudo em tempo real pesa bastante, especialmente em tráfego alto. A gente tentou fazer um buffer assíncrono, mas ainda assim, deu uma desacelerada nas respostas. Alguém já conseguiu otimizar isso?
Concordo com o Wesley, o risco de impacto é real. Aqui, a gente costuma fazer o log em um serviço dedicado, pra não afetar o fluxo principal. E sempre que possível, faz uma amostragem, pra não registrar tudo.
No meu caso, o que ajuda é limitar o tamanho do buffer e fazer a rotação dos logs. Assim, evita que o sistema fique sobrecarregado.