本文說明一些工具,可診斷各種複雜度的網路問題。 這些問題範圍包括從針對服務的非預期回應值進行疑難排解,到找出連線關閉例外狀況根本原因的各種案例。
針對用戶端排除故障,適用於 Java 的 Azure 用戶端庫提供一致且強大的日誌功能,如在 Azure SDK for Java中的記錄設定所述。 不過,客戶端連結庫會透過各種通訊協定進行網路呼叫,這可能會導致疑難解答案例超出提供的疑難解答範圍。 發生這些問題時,解決方案是使用本文中所述的外部工具來診斷網路問題。
琴師
Fiddler 是一種 HTTP 偵錯代理,可讓透過它傳遞的要求和回應數據被記錄 as-is。 您擷取的原始要求和響應可協助您針對服務取得非預期要求的案例進行疑難解答,或用戶端收到非預期的回應。 若要使用 Fiddler,您必須使用 HTTP Proxy 設定用戶端連結庫。 如果您使用 HTTPS,則需要額外的設定來檢查已解密的請求和回應正文。
新增 HTTP Proxy
若要新增 HTTP Proxy,請遵循 在 Azure SDK for Java中設定 Proxy 中的指引。 在埠 8888 上,請務必使用預設的 Fiddler 位址localhost。
啟用 HTTPS 解密
根據預設,Fiddler 只能擷取 HTTP 流量。 如果您的應用程式使用 HTTPS,您必須採取額外的步驟來信任 Fiddler 的憑證,以允許它擷取 HTTPS 流量。 如需詳細資訊,請參閱 Fiddler 文件中的 HTTPS 功能表。
下列步驟示範如何使用 Java Runtime Environment (JRE) 信任憑證。 如果憑證不受信任,透過 Fiddler 的 HTTPS 要求可能會因為安全性警告而失敗。
匯出 Fiddler 的憑證。
尋找 JRE 的 keytool (通常位於 jre/bin中)。
尋找 JRE 的 cacert (通常位於 jre/lib/security中)。
開啟 Bash 視窗,並使用下列命令匯入憑證:
sudo keytool -import -file <location-of-Fiddler-certificate> -keystore <location-of-cacert> -alias Fiddler輸入密碼。
信任憑證。
Wireshark
Wireshark 是一種網路通訊協定分析器,可以擷取網路流量,而不需要變更應用程式程序代碼。 Wireshark 的可調性很高,能夠從廣泛到特定的範疇擷取低層網路流量。 此功能在疑難排解的情境中非常有用,例如當遠端主機關閉連線或在操作過程中連線被中斷時。 Wireshark GUI 會使用識別唯一擷取案例的色彩配置來顯示擷取,例如TCP 重新傳輸、RST 等等。 您也可以在擷取時間或分析期間篩選擷取。
設定擷取篩選
擷取篩選器可減少擷取以供分析的網路呼叫數目。 如果沒有擷取篩選器,Wireshark 會擷取所有通過網路介面的流量。 此行為可能會產生大量數據,其中大部分可能是調查的雜訊。 使用擷取篩選器有助於預先設置要擷取的網路流量範圍,以協助調查目標更精準。 如需詳細資訊,請參閱 Wireshark 文件中的 擷取即時網路數據。
下列範例會新增擷取篩選器,以擷取傳送至特定主機或從特定主機接收的網路流量。
在Wireshark中,前往 [擷取 > 擷取篩選...],新增一個值為 host <host-IP-or-hostname>的新篩選。 此篩選只會擷取來自該主機的流量。 如果應用程式與多部主機通訊,您可以新增多個擷取篩選,或使用 『OR』 運算元新增主機 IP/主機名,以提供鬆散的擷取篩選。
擷取到磁碟
您可能需要運行應用程式很長一段時間,以重現未預期的網絡異常,並查看導致異常的流量。 此外,可能無法維護記憶體中的所有擷取。 幸運的是,Wireshark 可以將擷取記錄到磁碟,以便進行後續處理。 此方法可避免在重現問題時記憶體不足的風險。 如需詳細資訊,請參閱Wireshark檔中 檔案輸入、輸出和列印。
以下範例設定Wireshark將擷取數據持續保存到磁碟,並分割成多個檔案,每個檔案依100k次擷取或50 MB大小分開。
在Wireshark中,流覽至 [擷取 > 選項],然後尋找 [輸出] 索引卷標,然後輸入要使用的檔名。 此設定會導致Wireshark將擷取保存到單一檔案。
若要啟用擷取至多個檔案,請選取 自動建立新檔案,然後選取 在 100000 個封包之後,及選取 在 50 MB 之後。 當其中一個述詞相符時,這個配置會讓 Wireshark 建立一個新的檔案。 每個新檔案都會使用與輸入的檔名相同的基底名稱,並附加唯一標識符。
如果您要限制 Wireshark 可以建立的檔案數量,請選擇 [使用循環緩衝區搭配 X 個檔案]。 此選項會將Wireshark限制為只記錄指定的檔案數目。 達到該數目的檔案時,Wireshark 會從最舊開始覆寫檔案。
篩選擷取
有時候您無法嚴格限制Wireshark所擷取的流量,例如,如果您的應用程式使用各種通訊協定與多部主機通訊。 在此案例中,一般使用先前概述的持續性擷取,在網路擷取之後執行分析會比較容易。 Wireshark 支援類似篩選的語法來分析擷取。 如需詳細資訊,請參閱Wireshark文件中的 使用擷取封包。
下列範例會在 ip.src_host==<IP>載入保存的擷取檔案和篩選。
在Wireshark中,流覽至 [檔案] > [開啟],並從先前使用的檔案位置載入已儲存的擷取。 在功能表欄下方載入檔案之後,會出現篩選輸入。 在篩選輸入中,輸入 ip.src_host==<IP>。 此篩選會限制捕獲視圖,使其只會顯示來源是來自具有IP <IP>主機的擷取。
後續步驟
本文涵蓋使用各種工具來診斷使用適用於 Java 的 Azure SDK 時的網路問題。 現在您已熟悉高階使用案例,您可以開始探索 SDK 本身。 如需可用 API 的詳細資訊,請參閱 Azure SDK for Java 程式庫。