次の方法で共有


ネットワークに関する問題のトラブルシューティング

この記事では、さまざまな複雑さのネットワークの問題を診断できるいくつかのツールについて説明します。 これらの問題には、サービスからの予期しない応答値のトラブルシューティングから、接続が閉じられた例外の根本原因まで、さまざまなシナリオが含まれます。

クライアント側のトラブルシューティングについては、「Azure SDK for Javaでのログ記録の構成」の説明に従って、Java 用 Azure クライアント ライブラリは一貫した堅牢なログ記録ストーリーを提供します。 ただし、クライアント ライブラリは、さまざまなプロトコルを介してネットワーク呼び出しを行います。これは、提供されるトラブルシューティング スコープの外側に拡張されるトラブルシューティング シナリオにつながる可能性があります。 これらの問題が発生した場合の解決策は、この記事で説明されている外部ツールを使用してネットワークの問題を診断することです。

Fiddler

Fiddler は、渡された要求と応答を as-isログに記録できる HTTP デバッグ プロキシです。 キャプチャする生の要求と応答は、サービスが予期しない要求を受け取ったり、クライアントが予期しない応答を受信したりするシナリオのトラブルシューティングに役立ちます。 Fiddler を使用するには、HTTP プロキシを使用してクライアント ライブラリを構成する必要があります。 HTTPS を使用する場合は、復号化された要求と応答本文を検査するための追加の構成が必要です。

HTTP プロキシを追加する

HTTP プロキシを追加するには、「Azure SDK for Javaでプロキシを構成する」のガイダンスに従います。 ポート 8888 では、localhost の既定の Fiddler アドレスを使用してください。

HTTPS 復号化を有効にする

既定では、Fiddler は HTTP トラフィックのみをキャプチャできます。 アプリケーションで HTTPS を使用する場合は、Fiddler の証明書を信頼して HTTPS トラフィックのキャプチャを許可する追加の手順を実行する必要があります。 詳細については、Fiddler ドキュメント HTTPS メニュー を参照してください。

次の手順では、Java ランタイム環境 (JRE) を使用して証明書を信頼する方法を示します。 証明書が信頼されていない場合、Fiddler を介した HTTPS 要求がセキュリティ警告で失敗する可能性があります。

  1. Fiddler の証明書をエクスポートします。

  2. JRE の keytool (通常は jre/binにあります) を見つけます。

  3. JRE の cacert を検索します (通常は、jre/lib/security にあります)。

  4. Bash ウィンドウを開き、次のコマンドを使用して証明書をインポートします。

    sudo keytool -import -file <location-of-Fiddler-certificate> -keystore <location-of-cacert> -alias Fiddler
    
  5. パスワードを入力します。

  6. 証明書を信頼します。

Wireshark

Wireshark は、アプリケーション コードを変更することなくネットワーク トラフィックをキャプチャできるネットワーク プロトコル アナライザーです。 Wireshark は高度に構成可能であり、特定の低レベルのネットワーク トラフィックまで幅広くキャプチャできます。 この機能は、リモート ホストが接続を閉じたり、操作中に接続を閉じたりするなどのシナリオのトラブルシューティングに役立ちます。 Wireshark GUI では、TCP 再送信、RST などの一意のキャプチャ ケースを識別する配色を使用してキャプチャが表示されます。 キャプチャは、キャプチャ時または分析中にフィルター処理することもできます。

キャプチャ フィルターを構成する

キャプチャ フィルターは、分析のためにキャプチャされるネットワーク呼び出しの数を減らします。 キャプチャ フィルターを使用しない場合、Wireshark はネットワーク インターフェイスを通過するすべてのトラフィックをキャプチャします。 この動作により、大量のデータが生成される可能性があり、そのほとんどが調査のノイズになる可能性があります。 キャプチャ フィルターを使用すると、キャプチャ対象のネットワーク トラフィックを先取りしてスコープを設定し、調査の対象を絞り込むのに役立ちます。 詳細については、Wireshark ドキュメントの「ライブ ネットワーク データ のキャプチャ」を参照してください。

次の例では、特定のホストに送受信されるネットワーク トラフィックをキャプチャするキャプチャ フィルターを追加します。

Wireshark で、Capture > Capture Filters... に移動し、値が host <host-IP-or-hostname>された新しいフィルターを追加します。 このフィルターは、そのホストとの間のトラフィックのみをキャプチャします。 アプリケーションが複数のホストと通信する場合は、複数のキャプチャ フィルターを追加するか、または 'OR' 演算子を使用してホスト IP/ホスト名を追加して、より緩いキャプチャ フィルター処理を提供できます。

ディスクへのキャプチャ

予期しないネットワーク例外を再現し、それに至るトラフィックを確認するために、アプリケーションを長時間実行することが必要になる場合があります。 また、メモリ内のすべてのキャプチャを維持できない場合もあります。 さいわい、Wireshark はキャプチャをディスクに記録して、後処理に使用できるようにします。 この方法では、問題を再現するときにメモリが不足するリスクを回避できます。 詳細については、Wireshark ドキュメント ファイル入力、出力、および印刷 を参照してください。

次の例では、Wireshark を設定して、100k キャプチャまたは 50 MB のサイズでファイルが分割される複数のファイルを持つディスクにキャプチャを保持します。

Wireshark で、キャプチャ > オプション に移動し、出力 タブを見つけて、使用するファイル名を入力します。 この構成により、Wireshark はキャプチャを 1 つのファイルに保持します。

複数のファイルへのキャプチャを有効にするには、[Create a new file automatically]\(自動的に新しいファイルを作成する\) を選択し、次に、[after 100000 packets]\(100000 パケット後\)[after 50 megabytes]\(50 メガバイト後\) を選択します。 この構成では、述語のいずれかが一致したときに Wireshark によって新しいファイルが作成されます。 新しい各ファイルは、入力されたファイル名と同じベース名を使用し、一意の識別子を追加します。

Wireshark で作成できるファイルの数を制限する場合は、[ X ファイルでリング バッファーを使用する] を選択します。 このオプションでは、Wireshark を指定された数のファイルのみでログ記録するように制限します。 その数のファイルに達すると、Wireshark は最も古いファイルからファイルの上書きを開始します。

キャプチャをフィルター処理する

たとえば、アプリケーションがさまざまなプロトコルを使用して複数のホストと通信する場合など、Wireshark がキャプチャするトラフィックの範囲を厳密に設定できない場合があります。 このシナリオでは、一般に、前に説明した永続的なキャプチャを使用すると、ネットワーク キャプチャ後に分析を実行する方が簡単です。 Wireshark では、キャプチャを分析するためのフィルターに似た構文がサポートされています。 詳細については、Wireshark ドキュメントの「キャプチャされたパケット の操作」を参照してください。

次の例では、永続化されたキャプチャ ファイルとフィルターを ip.src_host==<IP>に読み込みます。

Wireshark で、[ファイル] > [ を開く] に移動し、前に使用したファイルの場所から永続化されたキャプチャを読み込みます。 ファイルがメニュー バーの下に読み込まれた後、フィルター入力が表示されます。 フィルター入力に「ip.src_host==<IP>」と入力します。 このフィルターは、IP <IP>を持つホストからのソースの場所のみをキャプチャするようにキャプチャ ビューを制限します。

次の手順

この記事では、Azure SDK for Java を使用する際のネットワークの問題を診断するために、さまざまなツールを使用して説明しました。 高度な使用シナリオに慣れたので、SDK 自体の調査を開始できます。 使用可能な API の詳細については、Azure SDK for Java ライブラリのを参照してください。