エンドユーザーがウェブサイトにアクセスできない原因を、Elastic Load Balancing (ELB) を使用してトラブルシューティングしたいです。
解決策
エンドユーザー側で、次の問題が発生する可能性があります。
- ページがタイムアウトする。
- ウェブサイトで断続的に問題が発生する。
- ページが読み込まれるまでに遅延が発生する。
- HTTP 5XX ステータスコードエラーが発生する。
DNS ルックアップと比較を実施する
ドメインがロードバランサーノードの IP アドレスに正しく解決されており、クライアントの接続が正しい IP アドレスに送信されることを確認します。
次のいずれかのコマンドを実行し、ドメインの DNS レコードを取得します。
dig affected domain
または、
nslookup affected domain
次に、以下のコマンドを実行してロードバランサーの DNS レコードを取得します。
dig lb-xxxxxxxxxx.us-east-1.elb.amazonaws.com
ドメインの DNS レコードをロードバランサーの DNS レコードと比較します。IP アドレスのリストが一致する場合は、チェックに合格しています。ロードバランサーがスケールアウト状態の場合、DNS 応答が示す IP アドレスよりも多くの IP アドレスが存在する可能性があります。すべての IP アドレスを取得するには、複数の DNS クエリを実行します。
ロードバランサーのバックエンドインスタンスまたはターゲットの正常性を確認する
異常があるバックエンド Amazon Elastic Compute Cloud (Amazon EC2) インスタンスまたはターゲットがルーティングに影響している可能性があります。ターゲットに異常がある場合は、ターゲットまたはバックエンドインスタンスでサービスが停止している可能性があります。または、ロードバランサーがターゲットまたはバックエンドインスタンスから応答を取得できていない可能性があります。
ロードバランサーのタイプのヘルスチェックをレビューし、バックエンドインスタンスまたはターゲットのステータスを確認します。
注: クロスゾーン負荷分散を無効にすると、Network Load Balancer と Classic Load Balancer によるリクエストのルーティングに影響します。ヘルスチェックは、トラフィックポート以外のポートにも設定できます。ただし、ターゲットまたはバックエンドインスタンスが正常であっても、ターゲットはインバウンドトラフィックに応答しない場合があります。
ロードバランサーのノードに接続する
ロードバランサーのノードを直接接続し、次のことを検証します。
- DNS が解決したロードバランサーの IP アドレスに到達できる。
- この問題は、特定のアベイラビリティーゾーンのサブネットでのみ発生する。
ロードバランサーの IP アドレスを書き留めます。次に、IP アドレスに 1 つずつ接続してみます。このチェックの実行には、** curl ** ツールを使用することがベストプラクティスです。ブラウザを使用する場合、証明書の検証とホストヘッダーが原因でテストが機能しない可能性があります。
次のコマンドを実行します。
curl -lvk protocol://ELB IP Address:port/path -H "Host: domain name"
注: protocol、ELB IP Address、port、path、and domain name は、実際の値に置き換えます。
応答を受信した場合は、その応答が想定どおりであるか、エラーであるかを確認します。応答が想定どおりの場合は、次の IP アドレスを確認します。
ロードバランサーにバックエンドインスタンスまたはターゲットの問題がないかを確認する
ロードバランサーと、バックエンドインスタンスまたはターゲットとの通信ステータスを確認します。
セキュリティグループ、ネットワークアクセスコントロールリスト (ネットワーク ACL)、ルーティングでアクセスが許可されていることを確認します。次に、ターゲットまたはバックエンドインスタンスにログインします。オペレーティングシステム (OS) に応じて、次のいずれかのコマンドを実行し、Web サービスが設定されたポートでリッスンしていることを確認します。
Windows
netstat -an | findstr "LISTEN" | findstr "port"
Linux
netstat -an | grep LISTEN | grep "port"
**注:**port は、ターゲットまたはバックエンドインスタンスをロードバランサーに登録するときに使用する、ターゲットまたはバックエンドインスタンスのリスニングポートに置き換えます。
リスニングポートがリストにない場合、ウェブサービスはダウンしています。
応答がポートがリスニング中であることを示す場合は、次のコマンドを実行します。
curl -lvk protocol://localhost:port
注: protocol をリスニングする側のアプリケーションサービスに、port をローカルホストのポートに置き換えます。
上記のコマンドで応答が取得できた場合、ウェブサービスは機能しています。
同じ Amazon Virtual Private Cloud (Amazon VPC) 内の別のインスタンスから接続を開始することもできます。接続がウェブサービスに到達し、応答を取得できるかどうかを確認します。応答には、ターゲットまたはバックエンドインスタンスに接続しようとしたときにロードバランサーが取得する内容が表示されます。
関連情報
EC2 インスタンスでホストされているウェブサイトに接続できない理由を教えてください