Partilhar via


Solucionar problemas de rede

Este artigo descreve algumas ferramentas que podem diagnosticar problemas de rede de várias complexidades. Esses problemas incluem cenários que vão desde a solução de problemas de um valor de resposta inesperado de um serviço até a causa raiz de uma exceção de conexão fechada.

Para a solução de problemas do lado do cliente, as bibliotecas de cliente do Azure para Java oferecem uma história de log consistente e robusta, conforme descrito em Configurar log no SDK do Azure para Java. No entanto, as bibliotecas de cliente fazem chamadas de rede através de vários protocolos, o que pode levar a cenários de solução de problemas que se estendem fora do escopo de solução de problemas fornecido. Quando esses problemas ocorrem, a solução é usar as ferramentas externas descritas neste artigo para diagnosticar problemas de rede.

Fiddler

O Fiddler é um proxy de depuração HTTP que permite que solicitações e respostas passadas por ele sejam registradas no estado em que se encontram. As solicitações e respostas brutas capturadas podem ajudá-lo a solucionar problemas em cenários em que o serviço recebe uma solicitação inesperada ou o cliente recebe uma resposta inesperada. Para usar o Fiddler, você precisa configurar a biblioteca de cliente com um proxy HTTP. Se você usa HTTPS, precisa de configuração extra para inspecionar os corpos de solicitação e resposta descriptografados.

Adicionar um proxy HTTP

Para adicionar um proxy HTTP, siga as orientações em Configurar proxies no SDK do Azure para Java. Certifique-se de usar o endereço padrão do Fiddler na localhost porta 8888.

Ativar a desencriptação HTTPS

Por padrão, o Fiddler pode capturar apenas tráfego HTTP. Se seu aplicativo usa HTTPS, você deve tomar medidas adicionais para confiar no certificado do Fiddler para permitir que ele capture tráfego HTTPS. Para obter mais informações, consulte Menu HTTPS na documentação do Fiddler.

As etapas a seguir mostram como usar o Java Runtime Environment (JRE) para confiar no certificado. Se o certificado não for confiável, uma solicitação HTTPS por meio do Fiddler poderá falhar com avisos de segurança.

  1. Exportar certificado do Fiddler.

  2. Encontre a keytool do JRE (geralmente em jre/bin).

  3. Encontre o cacert do JRE (geralmente em jre/lib/security).

  4. Abra uma janela Bash e use o seguinte comando para importar o certificado:

    sudo keytool -import -file <location-of-Fiddler-certificate> -keystore <location-of-cacert> -alias Fiddler
    
  5. Introduza uma palavra-passe.

  6. Confie no certificado.

Tubarão-arame

O Wireshark é um analisador de protocolo de rede que pode capturar o tráfego de rede sem a necessidade de alterações no código do aplicativo. O Wireshark é altamente configurável e pode capturar tráfego de rede amplo a específico de baixo nível. Esse recurso é útil para solucionar problemas de cenários, como um host remoto fechando uma conexão ou tendo conexões fechadas durante uma operação. A GUI do Wireshark exibe capturas usando um esquema de cores que identifica casos de captura exclusivos, como uma retransmissão TCP, RST e assim por diante. Você também pode filtrar capturas no momento da captura ou durante a análise.

Configurar um filtro de captura

Os filtros de captura reduzem o número de chamadas de rede capturadas para análise. Sem filtros de captura, o Wireshark captura todo o tráfego que passa por uma interface de rede. Esse comportamento pode produzir grandes quantidades de dados, onde a maioria deles pode ser ruído para a investigação. O uso de um filtro de captura ajuda a definir o escopo preventivo do tráfego de rede que está sendo capturado para ajudar a direcionar uma investigação. Para obter mais informações, consulte Capturando dados de rede em tempo real na documentação do Wireshark.

O exemplo a seguir adiciona um filtro de captura para capturar o tráfego de rede enviado ou recebido de um host específico.

No Wireshark, navegue até Capture Capture Capture > Filters... e adicione um novo filtro com o valor host <host-IP-or-hostname>. Esse filtro captura o tráfego somente de e para esse host. Se o aplicativo se comunicar com vários hosts, você pode adicionar vários filtros de captura ou pode adicionar o IP/nome do host com o operador 'OR' para fornecer filtragem de captura mais solta.

Captura em disco

Talvez seja necessário executar um aplicativo por um longo tempo para reproduzir uma exceção de rede inesperada e ver o tráfego que leva até ela. Além disso, pode não ser possível manter todas as capturas na memória. Felizmente, o Wireshark pode registrar capturas em disco para que estejam disponíveis para pós-processamento. Essa abordagem evita o risco de ficar sem memória enquanto você reproduz um problema. Para obter mais informações, consulte Entrada, saída e impressão de arquivos na documentação do Wireshark.

O exemplo a seguir configura o Wireshark para persistir capturas em disco com vários arquivos, onde os arquivos são divididos em capturas de 100k ou 50 MB de tamanho.

No Wireshark, navegue até Opções de captura > e localize a guia Saída e, em seguida, insira um nome de arquivo a ser usado. Essa configuração faz com que o Wireshark persista as capturas em um único arquivo.

Para habilitar a captura para vários arquivos, selecione Criar um novo arquivo automaticamente e, em seguida, selecione após 100000 pacotes e após 50 megabytes. Essa configuração faz com que o Wireshark crie um novo arquivo quando um dos predicados for correspondido. Cada novo arquivo usa o mesmo nome base que o nome de arquivo inserido e acrescenta um identificador exclusivo.

Se quiser limitar o número de arquivos que o Wireshark pode criar, selecione Usar um buffer de anel com arquivos X. Esta opção limita o Wireshark a registrar apenas com o número especificado de arquivos. Quando esse número de arquivos é atingido, o Wireshark começa a substituir os arquivos, começando com os mais antigos.

Filtrar capturas

Às vezes, você não pode definir o escopo preciso do tráfego que o Wireshark captura - por exemplo, se seu aplicativo se comunicar com vários hosts usando vários protocolos. Nesse cenário, geralmente com o uso de captura persistente descrito anteriormente, é mais fácil executar a análise após a captura de rede. O Wireshark suporta sintaxe semelhante a um filtro para analisar capturas. Para obter mais informações, consulte Trabalhando com pacotes capturados na documentação do Wireshark.

O exemplo a seguir carrega um arquivo de captura persistente e filtra em ip.src_host==<IP>.

No Wireshark, navegue até Abrir arquivo e carregue uma captura persistente do local do arquivo > usado anteriormente. Depois que o arquivo for carregado abaixo da barra de menus, uma entrada de filtro será exibida. Na entrada do filtro, digite ip.src_host==<IP>. Esse filtro limita a visualização de captura para que mostre apenas capturas de onde a fonte era do host com o IP <IP>.

Próximos passos

Este artigo abordou o uso de várias ferramentas para diagnosticar problemas de rede ao trabalhar com o SDK do Azure para Java. Agora que você está familiarizado com os cenários de uso de alto nível, pode começar a explorar o SDK em si. Para obter mais informações sobre as APIs disponíveis, consulte o SDK do Azure para bibliotecas Java.