現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください。 情報
内容
クライアント アプリケーションが、API 呼び出しに応答して、HTTP ステータス コード 504 とメッセージ「Gateway Timeout」を受け取ります。
このエラー レスポンスは、API 呼び出しの実行中にクライアントが Apigee Edge またはバックエンド サーバーからタイムリーなレスポンスを受信しなかったことを示します。
エラー メッセージ
クライアント アプリケーションは、次のレスポンス コードを受け取ります。
HTTP/1.1 504 Gateway Timeout
このコードの後に、次のようなエラー メッセージが表示されることがあります。
<html> <head><title>504 Gateway Timeout</title></head> <body bgcolor="white"> <center><h1>504 Gateway Timeout</h1></center> </body> </html>
ゲートウェイ タイムアウトの原因
次の図に示すように、Apigee Edge を介して行われる API リクエストの一般的なパスは、[Client] -> [Router] -> Message Processor -> Backend Server です。
クライアント アプリケーション、Router、Message Processor は、適切なタイムアウト値で構成されます。Apigee Edge では、タイムアウト値に基づく一定の時間内にすべての API リクエストに対するレスポンスが返されると想定しています。指定した時間内にレスポンスが受信されなかった場合は、504 Gateway Timeout レスポンスが返されます。
考えられる原因
Apigee Edge で、バックエンド サーバーから 504 Gateway Timeout レスポンスが返される一般的な原因は次のとおりです。
原因 | 説明 | トラブルシューティングの手順: |
---|---|---|
バックエンド サーバーが 504 Gateway Timeout で応答する | バックエンド サーバーがタイムアウトし、504 Gateway Timeout レスポンスが Message Processor に返されます。 | Edge Private Cloud ユーザーと Public Cloud ユーザー |
バックエンド サーバーが 504 ゲートウェイ タイムアウトで応答しています
バックエンド サーバーが HTTP レスポンス コード 504 Gateway Timeout を返す場合があります。
診断
このセクションでは、504 ゲートウェイ タイムアウトを正しく診断する方法について説明します。Private Cloud ユーザーと Public Cloud ユーザーの両方の手順が記載されています。
手順 1: Trace の使用(Private Cloud ユーザーと Public Cloud ユーザー)
- 影響を受ける API の Apigee UI で [Trace] を有効にします。
- バックエンド サーバーにリクエストを送信します。
- 失敗した API リクエストでバックエンド サーバーからの 504 レスポンスが Trace に表示された場合、504 Gateway タイムアウトの原因はバックエンド サーバーです。
- 応答時間を確認するには、Trace で [Response received from target server] フェーズをクリックします。この例では、経過時間は 60, 004 ミリ秒です。
[Phase Details] セクションには、次の詳細情報が表示されます。
- バックエンド サーバーから受信した 504 Gateway Timeout レスポンスがハイライト表示されます。
- [Response Content] セクションに、バックエンド サーバーからのレスポンスの本文全体が表示されます。前述のように、レスポンス ペイロードの形式と内容は、バックエンド サーバーの実装によって異なる場合があります。
- [Response Header] > [Server] セクションに、レスポンスの送信元が示されることがあります。
- アナリティクス データを表示して診断を確認するには、次の図に示すように、Trace で [Analytics Data Recorded] フェーズをクリックします。
次の図に示すように、[Phase Details] の [Response Headers] セクションに、
X-Apigee-fault-code
とX-Apigee-fault-source
の値が表示されます。これらのフィールドに以下の表に示す値が含まれている場合、504 エラー レスポンスはバックエンド サーバーから送信されます。
レスポンス ヘッダー 値 X-Apigee-fault-source target X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode -
プロキシ チェーンを確認します。次の手順に沿って、バックエンド サーバーが Apigee で別のプロキシを呼び出しているかどうかを判断します。
- [Request sent to target server] フェーズに戻り、[Show Curl] ボタンをクリックして、バックエンド サーバーのホスト エイリアスを表示します。
- バックエンド サーバーのホスト エイリアスが仮想ホスト エイリアスを参照している場合、プロキシ チェーンが適用されます。チェーンされたプロキシごとに上記の手順を繰り返し、504 Gateway Timeout エラー レスポンスの原因を診断します。504 Gateway タイムアウトは、リクエスト/レスポンス サイクルの他のステージでチェーン化されたプロキシで発生する場合は、 こちらのハンドブックで診断できます。
- バックエンド サーバーのホスト エイリアスがバックエンド サーバーを参照している場合は、解決策に進みます。
手順 2: バックエンド サーバーの API を直接呼び出す(Public Cloud ユーザーと Private Cloud ユーザー)
バックエンド サーバーを直接呼び出して、Apigee Edge からリクエストが行われた場合と同じ 504 ゲートウェイ タイムアウト レスポンスの動作を確認します。
- リクエストの一部としてバックエンド サーバーに渡すために必要なすべてのヘッダー、クエリ パラメータ、認証情報があることを確認します。
- バックエンド サービスが一般公開されている場合は、
curl
コマンド、Postman、その他の REST クライアントを使用して、バックエンド サーバー API を直接呼び出すことができます。 - バックエンド サーバーに Message Processor からのみアクセスできる場合は、
curl
コマンド、Postman、その他の REST クライアントを使用して、Message Processor からバックエンド サーバー API を直接呼び出します。 - バックエンド サービスが 504 Gateway Timeout レスポンスを返した場合は、解決策に進みます。
手順 3: NGINX アクセスログを確認する(Private Cloud ユーザーのみ)
NGINX のアクセスログは、504 エラー レスポンスがバックエンド サーバーによって送信されたかどうかを判断するのに役立ちます。 これは、問題が過去に発生した場合、断続的に発生する場合、Trace でキャプチャできない場合に特に役立ちます。NGINX のアクセスログを確認する手順は次のとおりです。
- 次のコマンドを使用して NGINX のアクセスログを表示します。
/opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log
- 該当する API プロキシの 504 エラー レスポンスを確認します。特定の期間を確認したり、問題が過去に発生したかどうかを調べたり、リクエストが引き続き 504 エラー レスポンスで失敗しているかどうかを調べたりできます。
- 504 エラー レスポンスがある場合は、エラー レスポンスがバックエンド サーバーから発生しているかどうかを確認します。
- 影響を受ける API プロキシでプロキシ チェーン(バックエンド サーバー/ターゲット エンドポイントが Apigee の別のプロキシを呼び出している)を確認します。API プロキシがプロキシ チェーン を使用している場合は、チェーンされたプロキシごとに上記の手順を繰り返して、504 Gateway Timeout エラー レスポンスの原因を診断します。504 Gateway タイムアウトは、こちらのハンドブックを使用して、他のステージでチェーンされたプロキシで発生している問題を診断できます。
- プロキシ チェーンが存在せず、504 エラー レスポンスがバックエンド サーバーから発生している場合は、解決策に進みます。
次の図は、ターゲット サーバーに起因する 504 エラー レスポンスを示す NGINX ログエントリの例です。
X-Apigee-fault-source
フィールドと X-Apigee-fault-code
フィールドに次の表に示す値が含まれている場合、504 レスポンスはバックエンド サーバーから送信されます。
レスポンス ヘッダー | 値 |
---|---|
X-Apigee-fault-source | target |
X-Apigee-fault-code | messaging.adaptors.http.flow.ErrorResponseCode |
手順 4: API Monitoring を使用する(Public Cloud ユーザーのみ)
API Monitoring を使用すると、問題領域をすばやく分離して、エラー、パフォーマンス、レイテンシの問題とその原因(デベロッパー アプリ、API プロキシ、バックエンド ターゲット、API プラットフォームなど)を診断できます。
サンプル シナリオを実行し、API Monitoring を使用して API での 5xx 問題のトラブルシューティング方法を確認します。たとえば、504 ステータス コードの数が特定のしきい値を超えたときに管理者に通知するアラートを設定できます。
解像度
上記の診断手順に沿って、バックエンド サーバー チームと協力してバックエンド サーバーの問題を解決できます。これには、バックエンド サーバーでのタイムアウトの調整や、ターゲット サーバーの前に配置されたロードバランサのタイムアウトの調整が含まれます。
診断情報の収集
問題が解決しない場合は、次の診断情報を Apigee サポートと共有してください。
Public Cloud をご利用の場合は、次の情報をご入力ください。
- 組織名
- 環境名
- API プロキシ名
- 504 エラー レスポンスを再現するための完全な
curl
コマンド - 504 Gateway Timeout エラーのレスポンスを受け取る API リクエストを含むトレース ファイル
Private Cloud をご利用の場合は、次の情報を提供してください。
- 失敗したリクエストについて確認された完全なエラー メッセージ
- 環境名
- API プロキシ バンドル
- 504 Gateway Timeout エラー レスポンスを受け取る API リクエストを含むトレース ファイル
- NGINX アクセスログ
/opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log
- Message Processor のログ
/opt/apigee/var/log/edge-message-processor/logs/system.log