<ph type="x-smartling-placeholder"></ph>
現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント。 詳細
症状
クライアント アプリケーションが、メッセージとともに HTTP ステータス コード 504 を受け取ります。 API 呼び出しに対する「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] ->ルーター -> Message Processor ->バックエンド サーバーを起動します。
クライアント アプリケーション、Router、Message Processor には適切なタイムアウト値が構成されています。Apigee Edge は、タイムアウト値に基づいて一定の期間内にすべての API リクエストに対してレスポンスを期待します。指定された期間内にレスポンスを受信しなかった場合、504 Gateway Timeout レスポンスが返されます。
考えられる原因
Apigee Edge では、バックエンド サーバーから 504 Gateway Timeout レスポンスが返される一般的な原因は次のとおりです。
原因 | 説明 | トラブルシューティング手順 |
---|---|---|
バックエンド サーバーが 504 ゲートウェイ タイムアウトで応答する | バックエンド サーバーがタイムアウトし、504 Gateway Timeout レスポンスを Message Processor に返します。 | Edge Private Cloud と Public Cloud のユーザー |
バックエンド サーバーが 504 ゲートウェイ タイムアウトで応答する
バックエンド サーバーが HTTP レスポンス コード 504 Gateway Timeout で応答する場合があります。
診断
このセクションでは、504 ゲートウェイ タイムアウトを正しく診断する方法について説明します。非公開と暗号化の両方の手順が Public Cloud ユーザーが一覧表示されます。
手順 1: Trace を使用する(Private Cloud ユーザーと Public Cloud ユーザー)
- 影響を受ける API の Apigee UI でTraceを有効にします。
- バックエンド サーバーにリクエストを送信します。
- Trace で失敗した API リクエストにバックエンド サーバーからの 504 レスポンスが表示されている場合、 「504 Gateway Timeout」の原因はバックエンド サーバーです。
- 応答時間を確認するには、[Response received from target server] をクリックします。
表示されます。この例では、経過時間は 60, 004 ミリ秒です。
[フェーズの詳細] セクションには、以下の追加情報が表示されます。
- バックエンド サーバーから受信した「504 Gateway Timeout」というレスポンスがハイライト表示されます。
- [Response Content] セクションには、レスポンスが返されたレスポンスの本文全体が表示されます。 バックエンドサーバーと通信します前述のように、レスポンス ペイロードの形式と内容は異なる場合があります。 バックエンド サーバーの実装に基づいて行われます。
- レスポンス ヘッダー >Server セクションに応答の送信元が示されていることがあります。
- アナリティクス データを表示して診断を確認するには、[Analytics Data Recorded] をクリックします。
Trace のフェーズを 2 つ示します。
[Phase Details] の [Response Headers] セクションに、次の値が表示されます。 次のスライドに示すように、
X-Apigee-fault-code
とX-Apigee-fault-source
次の図をご覧ください。これらのフィールドに以下の表に示す値が含まれている場合、504 エラー レスポンスは バックエンド サーバーから読み取ることができます。
レスポンス ヘッダー 値 X-Apigee-fault-source 目標値 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode -
<ph type="x-smartling-placeholder"></ph>を確認してください
プロキシ チェーン接続。バックエンド サーバーが別のプロキシを呼び出しているかどうかを確認するには、次の手順を行います。
次のとおりです。
<ph type="x-smartling-placeholder">
- </ph>
- [Request sent to target server] フェーズに戻り、 バックエンド サーバーのホスト エイリアスを表示する [Show Curl] ボタン
- バックエンド サーバーのホスト エイリアスが仮想ホストのエイリアスを指している場合、プロキシ チェーンは できます。チェーンされたプロキシごとに上記の手順を繰り返し、504 Gateway の原因を診断します。 タイムアウト エラー レスポンス。他のステージでチェーン接続されたプロキシで 504 ゲートウェイのタイムアウトが発生した リクエスト/レスポンス サイクルは、 このハンドブックをご覧ください。
- バックエンド サーバーのホスト エイリアスがバックエンド サーバーを指している場合は、次の手順に進みます。 解決策。
手順 2: バックエンド サーバーの API を直接呼び出す(パブリック クラウド ユーザーとプライベート クラウド ユーザー)
バックエンド サーバーを直接呼び出して、同じ「504 Gateway Timeout」レスポンスの動作が発生することを確認する Apigee Edge を通じてリクエストが行われたときに行われます。
- 必要なすべてのヘッダー、クエリ パラメータ、認証情報が リクエストの一部としてバックエンド サーバーに渡されます。
- バックエンド サービスが一般公開されている場合は、
curl
コマンドを使用できます。 バックエンド サーバー API を直接呼び出すことができます。 - バックエンド サーバーに Message Processor からのみアクセスできる場合は、
curl
を使用します。 他の REST クライアントを使用して、プロジェクトから直接バックエンド サーバー API を Message Processor です。 - バックエンド サービスが 504 Gateway Timeout レスポンスを返した場合は、次の手順に進みます。 解決策。
手順 3: NGINX アクセスログを確認する(プライベート クラウド ユーザーのみ)
NGINX アクセスログは、504 エラー レスポンスがバックエンド サーバーから送信されたかどうかを判断するのに役立ちます。 これは、過去に発生した問題、問題が断続的に発生する問題、または捕捉できない場合に特に便利です。 表示されます。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 ゲートウェイのタイムアウトを診断可能 こちらのハンドブックをご覧ください。
- 「」がない場合 プロキシ チェーンで発生し、504 エラー レスポンスがバックエンド サーバーから発信されている場合、 解決策に進みます。
下の図は、サーバー コンポーネントによって引き起こされた 504 エラー レスポンスを示す NGINX ログエントリの例で、 target server:
X-Apigee-fault-source
フィールドと X-Apigee-fault-code
フィールドに
値である場合、504 レスポンスはバックエンド サーバーから発信されます。
レスポンス ヘッダー | 値 |
---|---|
X-Apigee-fault-source | 目標値 |
X-Apigee-fault-code | messaging.adaptors.http.flow.ErrorResponseCode |
手順 4: API Monitoring を使用する(Public Cloud ユーザーのみ)
API Monitoring で問題を切り分ける エラー、パフォーマンス、レイテンシの問題とその原因(デベロッパー アプリ、 API プロキシ、バックエンド ターゲット、または API プラットフォーム。
サンプル シナリオを使用する をご覧ください。たとえば 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