Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
No cenário de operações de infraestrutura digital, uma tarefa comum mas muitas vezes subestimada é monitorar a disponibilidade de portas TCP específicas em servidores ou serviços. Essa checagem é essencial para garantir a saúde dos sistemas, identificar problemas de conexão ou até validar configurações de firewall. Apesar de parecer uma operação trivial, ela envolve nuances que podem impactar a eficiência e a confiabilidade do monitoramento.
A necessidade de verificar se uma porta específica está aberta e acessível é frequente em ambientes de produção e desenvolvimento. Essa checagem pode ser feita de diversas formas, mas a abordagem mais direta e eficiente em Node.js é através do módulo net. A dúvida comum é: como fazer essa operação de forma que seja robusta, sem gerar falsos positivos ou negativos, e sem impactar a performance do sistema? A decisão fica mais saudável quando o time consegue medir o impacto depois.
O método mais utilizado consiste em tentar estabelecer uma conexão TCP com a destino desejado. Contudo, há pontos importantes a considerar:
Sem uma implementação cuidadosa, esses fatores podem gerar dados errados, levando a ações desnecessárias ou à falta de resposta a problemas reais.
Vamos montar um exemplo de implementação usando o módulo net para verificar múltiplas portas de forma eficiente. A estratégia envolve criar um socket para cada host e porta, configurar tempos limite, e tratar erros específicos para distinguir entre diferentes tipos de indisponibilidade.
import net from 'node:net'. const hosts = [
['servidor1.com', 80],
['servidor2.com', 443],
['localhost', 3000]
]. hosts.forEach(([host, port]) => {
const socket = new net.Socket(). socket.setTimeout(3000). // timeout de 3 segundos Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
socket.on('connect', () => {
console.log(`Porta ${port} do host ${host} está acessível.`). socket.destroy(). })
.on('error', (err) => {
if (err.code === 'ECONNREFUSED') {
console.log(`Porta ${port} do host ${host} está fechada.`). } else if (err.code === 'ENOTFOUND') {
console.log(`Host ${host} não resolvido.`). } else {
console.log(`Erro ao verificar ${host}:${port} - ${err.message}`). }
})
.on('timeout', () => {
console.log(`Timeout ao tentar conectar em ${host}:${port}`). socket.destroy(). })
.connect({ host, port }). }). Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Apesar de eficaz, essa abordagem tem suas limitações:
Para ambientes de produção, recomenda-se implementar uma fila de verificações, limitar a concorrência, e registrar logs detalhados para análises futuras. Além disso, o uso de métricas de latência e taxas de erro ajuda a detectar padrões de indisponibilidade. 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. 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.
A checagem de portas TCP, quando feita de forma estruturada, é uma ferramenta poderosa para manutenção e monitoramento de infraestrutura. Utilizar o módulo net do Node.js oferece uma solução prática, porém é preciso estar atento às limitações e aos possíveis falsos positivos. Com uma implementação cuidadosa, é possível criar um sistema de monitoramento eficiente, confiável e adaptável às necessidades específicas de cada ambiente. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Implementar verificações periódicas, integrar com dashboards de observabilidade e automatizar respostas a falhas podem elevar a gestão da infraestrutura a um novo patamar de controle e segurança. 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. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. 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.
Total, o coontrole de erro é que faz diferença.
Ótima explicação, ajuda bastante na rotina de testes rápidos. Uma dúvida: você já tentou usar algum pacote que encapsule essa lógica? Acho que às vezes facilita o gerenciamento, especialmente se precisar de logs mais detalhados.
No meu time, prefiro usar a abordagem manual mesmo. Pacote costuma esconder detalhes importantes e dificulta o diagnóstico. Mas concordo que pra quem não quer reinventar roda, às vezes ajuda.