Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao desenvolver sistemas de monitoramento de infraestrutura, uma tarefa recorrente é verificar se portas específicas de servidores estão acessíveis. Essa verificação é fundamental para assegurar a disponibilidade de serviços e entender o comportamento do ambiente em tempo real.
Em muitas operações, especialmente na automação de monitoramento, a necessidade de verificar se uma porta está aberta ou fechada surge frequentemente. Apesar de simples na teoria, a implementação eficiente e confiável requer atenção a detalhes como tempos de timeout, resolução de DNS e tratamento de erros.
O método mais comum para verificar uma porta TCP é tentar estabelecer uma conexão TCP usando um socket. Essa abordagem é direta, porém apresenta desafios:
Por isso, é importante implementar mecanismos de timeout bem ajustados e tratamento robusto de erros.
A biblioteca padrão do Node.js, o módulo 'net', oferece uma interface eficiente para esse propósito. A estratégia consiste em criar um socket, tentar conectar na porta alvo e capturar eventos de sucesso ou falha. 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.
Exemplo de pseudocódigo:
import net from 'node:net'. function verificarPorta(host, porta, timeout = 2500) {
return new Promise((resolve) => {
const socket = new net.Socket(). let estado = null. socket.setTimeout(timeout). socket.on('connect', () => {
estado = 'aberta'. socket.destroy(). }). socket.on('error', () => {
estado = 'fechada'. }). socket.on('timeout', () => {
estado = 'timeout'. socket.destroy(). }). socket.on('close', () => {
resolve({ host, porta, status: estado }). }). socket.connect({ host, port: porta }). }). }
// Uso
verificarPorta('192.168.1.1', 80).then(console.log). Apesar de eficiente, essa solução tem limitações:
Para ambientes críticos, recomenda-se combinar essa checagem com outras técnicas, como verificações de serviço ou logs de aplicação. 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. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
1. Implementar a função de verificação com timeout ajustado.
2. Criar uma rotina de execução periódica, usando timers ou filas assíncronas.
3. Registrar os resultados em uma base de dados ou sistema de alertas.
4. Integrar essa rotina ao seu sistema de observabilidade, enriquecendo os dashboards com métricas de conectividade.
Assim, a verificação de portas TCP se torna uma peça básica, porém essencial, na cadeia de monitoramento e garantia de disponibilidade. 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. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. 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. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
A simplicidade do método de conexão TCP esconde sua importância operacional. Quando bem implementada, ela ajuda a identificar rapidamente problemas de rede ou serviços indisponíveis, além de fornecer dados valiosos para análises de tendência. Como toda técnica de monitoramento, sua eficácia depende do ajuste fino e da integração com outros componentes de observabilidade. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. 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.
Patricia, eu faria uma resolução prévia e cache dessa DNS, assim evita ficar tentando resolver toda hora. Aí, se dá erro na resolução, já dá pra tratar ates da conexão.
Ótima abordagem, Rafael. Uma dúvida: na sua rotina, como você lida com o DNS? Já passou por casos em que a resolução falhava e afetava o resultado?
Concordo, Wesley. Além disso, achei importante ajustar o timeout para não ficar esperando demais em reddes ruins. Aqui, a gente costuma usar 2,5 segundos, funciona bem na maioria dos casos.