Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントに移動します。 情報
症状
API 呼び出しのレスポンスで、クライアント アプリケーションが HTTP ステータス コード 502、「Bad Gateway」というメッセージを受け取ります。
HTTP ステータス コード 502 は、クライアントが、リクエストを実際に処理する必要があるバックエンド サーバーから有効なレスポンスを受信していないことを意味します。
エラー メッセージ
クライアント アプリケーションは、次のレスポンス コードを受け取ります。
HTTP/1.1 502 Bad Gateway
さらに、次のエラー メッセージも確認できます。
<html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
エラーがバックエンド サーバーから発生した場合は、次のようなメッセージが表示されることがあります。バックエンドからのエラー メッセージは、その実装に完全に依存します。
<html> <head><title>502 Bad Gateway</title></head> <body bgcolor="white"> <center><h1>502 Bad Gateway</h1></center> </body> </html>
考えられる原因
Apigee Edge を通過する API で 502 Bad Gateway エラーが発生する原因として、次のようなものが考えられます。
| 原因 | 説明 | トラブルシューティング手順の適用対象 |
| プールで使用可能な MP がない | このエラーは、プール内のすべての MP が使用できない場合(ダウンしているか、ビジー状態で応答していない場合)に発生します。 | Edge Private Cloud ユーザー |
| ルーターと MP 間の SSL 構成が正しくない | このエラーは、クライアントの CA 署名付きルート証明書が Edge Router のトラストストアにない場合に発生します。 | Edge Private Cloud ユーザー |
| バックエンド サーバーからのエラー | このエラーは、バックエンド サーバーが失敗してこのレスポンスを送信した場合に発生します。 | Edge Public Cloud と Private Cloud のユーザー |
原因: プールで使用可能な MP がない
このエラーは、特定のリージョン/データセンター内のすべての Message Processor が使用できない(すべてダウンしているなど)場合に発生します。
Apigee Edge は、特定のリージョン/データセンターの受信 API トラフィック(リクエスト)が常に Router から同じリージョン/データセンターの Message Processor(MP)に転送されるように構成されています。Apigee Edge コンポーネントは、1 つのリージョン/データセンターに設定されることもあれば、複数のリージョン/データセンターに設定されることもあります。各リージョン/データセンターには、2 つ以上の Router と Message Processor が構成されます。
診断
- 複数のリージョン/データセンターがある場合は、API リクエストが 502 Bad Gateway エラーで失敗しているリージョン/データセンターを特定します。これは、ユーザーが 502 エラーを観測しているリージョンを特定するか、異なるリージョンに属する各ルーターの
/opt/apigee/var/log/edge-router/nginx/ディレクトリにある NGINX アクセスログを確認することで確認できます。 - NGINX エラーログ(
/opt/apigee/var/log/edge-router/nginx/ORG-Env.)に次のエラーが表示されます。_error_log 2019/06/24 15:26:00 [error] 4796#4796: *56357443 no live upstreams while connecting to upstream, client: <Router_IP_address>, server: <HostAlias>, request: "PUT <BasePath> HTTP/1.1", upstream: "http://<ListOfMP-IP_R-MP-Port>/<BasePath>", host: "<HostAlias>"
シナリオ 1: すべての Message Processor がダウンしている
- 特定のリージョン/データセンターの Message Processor が稼働しているかどうかを確認します。
- すべての Message Processor が停止している場合は、再起動します。
解決策
次のコマンドを使用して、すべての Message Processor を再起動します。
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
シナリオ 2: すべての Message Processor が進行中のリクエストの処理でビジー状態である
このエラーは、特定のリージョン/データセンター内のすべての Message Processor が、進行中のリクエストの処理でビジー状態になっているため使用できないことが Router によって検出された場合に発生します。
- 特定のリージョン/データセンターの Message Processor が稼働しているかどうかを確認します。
- すべての Message Processor が起動してアクティブになっている場合は、Message Processor の CPU 使用率が高いかどうかを確認し、次のコマンドを使用して 30 秒ごとに 3 つのスレッドダンプを生成します。
<JAVA_HOME>/bin/jstack -l <pid> > <filename>
- Message Processor のメモリ使用率が高い場合は、次のコマンドを使用してヒープダンプを生成します。
sudo -u apigee
/bin/jmap -dump:live,format=b,file= - 次のコマンドを使用して Message Processor を再起動します。これにより、CPU とメモリの使用率が下がります。
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- API 呼び出しをモニタリングし、まだ問題が存在するかどうかを確認します。
- CPU/メモリ使用量の高い原因を調査できるように、Apigee サポートにスレッドダンプ、ヒープダンプ、Message Processor のログ(
/opt/apigee/var/log/edge-message-processor/logs/system.log)を提供します。
原因: Router と MP 間の SSL 構成が正しくない
診断
- NGINX アクセスログ(
/opt/apigee/var/log/edge-router/nginx/ORG-Env.)を確認します。次のように 502 レスポンスが表示されます。_access_log 2019-07-23T12:13:42+03:00 sc-10-254-226-23 10.X.X.X:53634 10.X.X.X:8998 0.000 - - 502 502 189 344 GET <path> curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 <host alias> mp-10-254-226-23-23706-8552529-1 10.129.107.101 - - -1 - - dc-2 gateway-2 green - gateway-2 dc-2 op pilot http -
- NGINX エラーログ(
/opt/apigee/var/log/edge-router/nginx/ORG-Env.)を確認します。次のようなエラーが表示されます。_error_log 2019/07/30 17:02:24 [error] 7691#7691: *11753633 peer closed connection in SSL handshake while SSL handshaking to upstream, client: X.X.X.X, server: <HostAlias>, request: "GET /no-target HTTP/1.1", upstream: "https://X.X.X.X:8998/no-target", host: "<HostAlias>"
- これは、Router と Message Processor 間の SSL handshake が失敗したことを示しています。
- 手順 1 と 2 のエラー メッセージをよく見ると、Message Processor との通信に使用されるポート番号は 8998 で、これは安全でないポートですが、プロトコルは SSL(https)です。通常、使用されるセキュア ポート番号は 8443 です。安全な通信に安全でないポートが使用されているため、SSL ハンドシェイクが失敗します。
- 通常、これは、Router と Message Processor 間の SSL の構成中に、手順を省略したり、誤った値を設定したりした場合に発生します。こちらに記載されている手順を参照してください。
たとえば、
/opt/apigee/customer/application/message-processor.properties as shown below
でポート番号が 8443 ではなく 8998 として指定されています。conf/message-processor-communication.properties+local.http.port=8998
- ディレクトリ
/opt/nginx/conf.d/*の Router 構成ファイルが削除されておらず、SSL 構成の実行中に Router が再起動されていない。このシナリオでは、構成ファイル内の Message Processor のポート番号は 8998 のままになります。
解決策
- Router と Message Processor 間の TLS の構成に記載されているすべての手順が正しく実行されていることを確認します。
- 問題が解決しない場合は、診断情報の収集に進みます。
原因: バックエンド サーバーからのエラー
診断
- エラーが毎回発生する場合は、失敗したリクエストの UI トレースをキャプチャできます。失敗したリクエストを選択し、トレースのさまざまなフェーズをナビゲートします。バックエンド サーバー自体から「502 Bad Gateway」が返される場合は、バックエンド サーバーで障害が発生したことが原因である可能性があります。
バックエンド サーバーから 502 Bad Gateway が返されたことを示すトレース
- 問題が断続的に発生し、トレースをキャプチャできない場合は、
- Public Cloud ユーザーの場合は、API Monitoring を使用して 502 エラーの詳細を確認できます。
- 障害コードが
messaging.adaptors.http.flow.ErrorResponseCodeで、障害発生元がtargetの場合は、エラーの原因はバックエンド サーバーです。
- 障害コードが
- Private Cloud ユーザーの場合は、NGINX アクセスログを分析できます。
/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log.
失敗したリクエストのエントリは次のようになります。
2017-02-24T14:42:12+00:00 rt-01 192.8.155.2:18118 192.168.84.166:8998 10.225 - - 502 502 440 0 GET /adv-eadlg-test/documents?type=doctype HTTP/1.1 rt-02efawae234-1234 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 myorg-dev.apigee.net rt-02efawae234-1234 6 - false target messaging.adaptors.http.flow.ErrorResponseCode null/null - /organizations/myorg/environments/dev/apiproxies/api123
- 障害コードが
messaging.adaptors.http.flow.ErrorResponseCodeで、障害発生元がtargetの場合は、エラーの原因はバックエンド サーバーです。
- 障害コードが
- Public Cloud ユーザーの場合は、API Monitoring を使用して 502 エラーの詳細を確認できます。
解決策
- バックエンド サーバー チームと協力して、バックエンドでこの問題を修正します。
診断情報を収集する
- NGINX アクセスログ
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.)_access_log
とエラーログ
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.)。_error_log - Message Processor のログ
(/opt/apigee/var/log/edge-message-processor/logs/system.log)。