Como 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 variam de solucionar problemas de um valor de resposta inesperado de um serviço até a raiz causar uma exceção de conexão fechada.
Para solucionar problemas do lado do cliente, as bibliotecas de clientes do Azure para Java oferecem uma história de registro em log consistente e robusta, conforme descrito em Configurar o registro em log no SDK do Azure para Java. No entanto, as bibliotecas de cliente fazem chamadas de rede em vários protocolos, o que pode levar a cenários de solução de problemas que se estendem para além do escopo da solução de problemas definido. Quando ocorrem esses problemas, 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 o registro em log solicitações e respostas passadas por ele no estado em que se encontram. As solicitações e respostas brutas que você captura podem ajudá-lo a solucionar problemas de cenários em que o serviço recebe uma solicitação inesperada ou o cliente recebe uma resposta inesperada. Para usar o Fiddler, configure a biblioteca de clientes com um proxy HTTP. Se você usar HTTPS, precisará 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 diretrizes em Configurar proxies no SDK do Azure para Java. Use o endereço padrão de localhost
do Fiddler na porta 8888.
Habilitar descriptografia de HTTPS
Por padrão, o Fiddler pode capturar somente o tráfego HTTP. Caso seu aplicativo use HTTPS, execute etapas adicionais para confiar no certificado do Fiddler e permitir que ele capture o tráfego HTTPS. Para obter mais informações, confira 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.
Exporte o certificado do Fiddler.
Encontre a ferramenta chave do JRE (geralmente em jre/bin).
Encontre o cacert do JRE (geralmente em jre/lib/security).
Abra uma janela do Bash e use o seguinte comando para importar o certificado:
sudo keytool -import -file <location-of-Fiddler-certificate> -keystore <location-of-cacert> -alias Fiddler
Digite uma senha.
Confie no certificado.
Wireshark
O Wireshark é um analisador de protocolo de rede que pode capturar o tráfego de rede sem precisar de alterações ao código do aplicativo. O Wireshark é altamente configurável e pode capturar amplo tráfego de rede de nível baixo e específico. Essa funcionalidade é útil para cenários de solução de problemas, como um host remoto fechar uma conexão ou conexões serem 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 gerar grandes quantidades de dados em que a maior parte pode ser um ruído para a investigação. O uso de um filtro de captura ajuda a definir o escopo de modo preventivo do tráfego de rede que está sendo capturado para ajudar a direcionar uma investigação. Para obter mais informações, confira Como capturar dados de rede ativos 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é Capturar > filtros de captura... 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ê poderá adicionar vários filtros de captura ou adicionar o IP/nome de host referentes ao host em questão com o operador 'OR' para fornecer filtragem de captura flexível.
Capturar para 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, talvez não seja possível manter todas as capturas na memória. Felizmente, o Wireshark pode registrar capturas em disco para que elas estejam disponíveis para pós-processamento. Essa abordagem previne o risco de ficar sem memória ao reproduzir um problema. Para obter mais informações, confira Entrada, saída e impressão de arquivo 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 100 mil ou 50 MB.
No Wireshark, navegue até Opções de Captura>, localize a guia Saída e insira um nome de arquivo a ser usado. Essa configuração faz com que o Wireshark persista capturas em um único arquivo.
Para habilitar a captura para vários arquivos, selecione Criar um arquivo automaticamente e selecione após 100.000 pacotes e depois de 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 você quiser limitar o número de arquivos que o Wireshark pode criar, selecione Usar um buffer de anel com X arquivos. Essa opção limita o Wireshark ao registro em log 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.
Capturas de filtro
Às vezes, não é possível definir um escopo rígido do tráfego que o Wireshark captura, por exemplo, quando seu aplicativo se comunica com vários hosts usando vários protocolos. Nesse cenário, geralmente com o uso da captura persistente descrito anteriormente, é mais fácil executar a análise após a captura de rede. O Wireshark dá suporte à sintaxe semelhante a filtro para analisar as capturas. Para obter mais informações, confira Como trabalhar com pacotes capturados na documentação do Wireshark.
O exemplo a seguir carrega um arquivo de captura persistente e filtra no 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, insira ip.src_host==<IP>
. Esse filtro limita a exibição de captura para que ela mostre apenas capturas onde a origem era do host com o IP <IP>
.
Próximas etapas
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 próprio SDK. Para obter mais informações sobre as APIs disponíveis, confira as bibliotecas do SDK do Azure para Java.