Felsöka nätverksproblem
Den här artikeln beskriver några verktyg som kan diagnostisera nätverksproblem med olika komplexiteter. Dessa problem omfattar scenarier som sträcker sig från felsökning av ett oväntat svarsvärde från en tjänst till att fastställa orsaken till ett undantag vid avslutad anslutning.
Vid felsökning på klientsidan erbjuder Azure-klientbiblioteken för Java en konsekvent och robust loggningshistoria, enligt beskrivningen i Konfigurera loggning i Azure SDK för Java. Klientbiblioteken gör dock nätverksanrop via olika protokoll, vilket kan leda till felsökningsscenarier som sträcker sig utanför felsökningsomfånget. När dessa problem uppstår är lösningen att använda det externa verktyg som beskrivs i den här artikeln för att diagnostisera nätverksproblem.
Spelman
Fiddler är en HTTP-felsökningsproxy som gör att begäranden och svar som skickas genom den kan loggas as-is. De råa begäranden och svar som du samlar in kan hjälpa dig att felsöka scenarier där tjänsten får en oväntad begäran, eller så får klienten ett oväntat svar. Om du vill använda Fiddler måste du konfigurera klientbiblioteket med en HTTP-proxy. Om du använder HTTPS behöver du extra konfiguration för att inspektera de dekrypterade begärande- och svarsorganen.
Lägga till en HTTP-proxy
Om du vill lägga till en HTTP-proxy följer du riktlinjerna i Konfigurera proxyservrar i Azure SDK för Java. Se till att använda fiddler-standardadressen för localhost
på port 8888.
Aktivera HTTPS-dekryptering
Fiddler kan som standard endast samla in HTTP-trafik. Om ditt program använder HTTPS måste du vidta extra åtgärder för att lita på Fiddlers certifikat så att det kan samla in HTTPS-trafik. Mer information finns i HTTPS-meny i Fiddler-dokumentationen.
Följande steg visar hur du använder Java Runtime Environment (JRE) för att lita på certifikatet. Om certifikatet inte är pålitligt kan en HTTPS-begäran via Fiddler misslyckas, vilket leder till säkerhetsmeddelanden.
Exportera Fiddler-certifikatet.
Hitta JRE:s nyckelverktyg (vanligtvis i jre/bin).
Hitta JRE:s cacert-fil (vanligtvis i jre/lib/security).
Öppna ett Bash-fönster och använd följande kommando för att importera certifikatet:
sudo keytool -import -file <location-of-Fiddler-certificate> -keystore <location-of-cacert> -alias Fiddler
Ange ett lösenord.
Lita på certifikatet.
Wireshark
Wireshark är en nätverksprotokollanalysator som kan samla in nätverkstrafik utan att behöva ändra programkoden. Wireshark är mycket konfigurerbar och kan samla in bred till specifik nätverkstrafik på låg nivå. Den här funktionen är användbar för felsökning av scenarier, till exempel en fjärrvärd som stänger en anslutning eller har anslutningar stängda under en åtgärd. Wireshark GUI visar avbildningar med hjälp av ett färgschema som identifierar unika avbildningsfall, till exempel en TCP-återöverföring, RST och så vidare. Du kan också filtrera avbildningar vid avbildningstid eller under analys.
Konfigurera ett avbildningsfilter
Avbildningsfilter minskar antalet nätverksanrop som samlas in för analys. Utan avbildningsfilter samlar Wireshark in all trafik som går via ett nätverksgränssnitt. Det här beteendet kan generera enorma mängder data där det mesta kan vara brus i undersökningen. Genom att använda ett inspelningsfilter kan nätverkstrafiken förhandsbegränsas för att underlätta en undersökning. För mer information, se Samla in live-nätverksdata i Wireshark-dokumentationen.
I följande exempel läggs ett insamlingsfilter till för att avbilda nätverkstrafik som skickas till eller tas emot från en specifik värd.
I Wireshark navigerar du till Capture > Capture Filters... och lägger till ett nytt filter med värdet host <host-IP-or-hostname>
. Det här filtret samlar endast in trafik till och från värden. Om programmet kommunicerar med flera värdar kan du lägga till flera avbildningsfilter eller lägga till värd-IP/värdnamnet med operatorn OR för att tillhandahålla lösare avbildningsfiltrering.
Avbilda till disk
Du kan behöva köra ett program under en längre tid för att återskapa ett oväntat nätverksfel och för att se trafiken som leder fram till det. Dessutom kanske det inte går att underhålla alla avbildningar i minnet. Som tur är kan Wireshark logga infångningar till disken så att de är tillgängliga för efterbearbetning. Den här metoden undviker risken för att minnet tar slut medan du återskapar ett problem. Mer information finns i Filindata, Utdata och utskrift i Wireshark-dokumentation.
I följande exempel konfigureras Wireshark för att bevara avbildningar till disk med flera filer, där filerna delas på antingen 100 000 avbildningar eller 50 MB.
I Wireshark navigerar du till Fångst > Alternativ och letar upp fliken Utdata, och anger sedan ett filnamn som ska användas. Den här konfigurationen gör att Wireshark bevarar avbildningar till en enda fil.
Om du vill aktivera avbildning till flera filer väljer du Skapa en ny fil automatiskt och väljer sedan efter 100000 paket och efter 50 mb. Den här konfigurationen gör att Wireshark skapar en ny fil när ett av predikaterna matchas. Varje ny fil använder samma basnamn som det angivna filnamnet och lägger till en unik identifierare.
Om du vill begränsa antalet filer som Wireshark kan skapa väljer du Använd en ringbuffert med X-filer. Det här alternativet begränsar Wireshark till loggning med endast det angivna antalet filer. När det antalet filer har nåtts börjar Wireshark skriva över filerna, från och med den äldsta.
Filtrera avbildningar
Ibland kan du inte begränsa den trafik som Wireshark samlar in, till exempel om programmet kommunicerar med flera värdar med hjälp av olika protokoll. I det här scenariot är det i allmänhet enklare att köra analys efter nätverksinspelning med hjälp av ihållande inspelning som beskrivits tidigare. Wireshark stöder filterliknande syntax för analys av avbildningar. Mer information finns i Arbeta med insamlade paket i Wireshark-dokumentationen.
I följande exempel läses en sparad fil och filtrerar på ip.src_host==<IP>
.
I Wireshark navigerar du till File > Open och läser in en sparad avbildning från den filplats som användes tidigare. När filen har lästs in nedanför menyraden visas ett inmatningsfält för filter. I infältsfiltret skriver du in ip.src_host==<IP>
. Det här filtret begränsar insamlingsvyn så att den endast visar fångster där källan kom från värden med IP <IP>
.
Nästa steg
Den här artikeln beskriver hur du använder olika verktyg för att diagnostisera nätverksproblem när du arbetar med Azure SDK för Java. Nu när du är bekant med användningsscenarierna på hög nivå kan du börja utforska själva SDK:et. Mer information om tillgängliga API:er finns i Azure SDK för Java-bibliotek.