504 Gateway Timeout from Backend Server(バックエンド サーバーからのゲートウェイ タイムアウト)

現在、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 です。

API リクエストのパス

クライアント アプリケーション、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 ユーザー)

  1. 影響を受ける API の Apigee UI で [Trace] を有効にします。
  2. バックエンド サーバーにリクエストを送信します。
  3. 失敗した API リクエストでバックエンド サーバーからの 504 レスポンスが Trace に表示された場合、504 Gateway タイムアウトの原因はバックエンド サーバーです。
  4. 応答時間を確認するには、Trace で [Response received from target server] フェーズをクリックします。この例では、経過時間は 60, 004 ミリ秒です。

    UI から取得したフェーズの詳細

    [Phase Details] セクションには、次の詳細情報が表示されます。

    • バックエンド サーバーから受信した 504 Gateway Timeout レスポンスがハイライト表示されます。
    • [Response Content] セクションに、バックエンド サーバーからのレスポンスの本文全体が表示されます。前述のように、レスポンス ペイロードの形式と内容は、バックエンド サーバーの実装によって異なる場合があります。
    • [Response Header] > [Server] セクションに、レスポンスの送信元が示されることがあります。
  5. アナリティクス データを表示して診断を確認するには、次の図に示すように、Trace で [Analytics Data Recorded] フェーズをクリックします。

    トレースからの分析の詳細

    次の図に示すように、[Phase Details] の [Response Headers] セクションに、X-Apigee-fault-codeX-Apigee-fault-source の値が表示されます。

    UI に表示された分析フェーズの詳細

    これらのフィールドに以下の表に示す値が含まれている場合、504 エラー レスポンスはバックエンド サーバーから送信されます。

    レスポンス ヘッダー
    X-Apigee-fault-source target
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. プロキシ チェーンを確認します。次の手順に沿って、バックエンド サーバーが Apigee で別のプロキシを呼び出しているかどうかを判断します。
    1. [Request sent to target server] フェーズに戻り、[Show Curl] ボタンをクリックして、バックエンド サーバーのホスト エイリアスを表示します。
    2. バックエンド サーバーのホスト エイリアスが仮想ホスト エイリアスを参照している場合、プロキシ チェーンが適用されます。チェーンされたプロキシごとに上記の手順を繰り返し、504 Gateway Timeout エラー レスポンスの原因を診断します。504 Gateway タイムアウトは、リクエスト/レスポンス サイクルの他のステージでチェーン化されたプロキシで発生する場合は、 こちらのハンドブックで診断できます。
    3. バックエンド サーバーのホスト エイリアスがバックエンド サーバーを参照している場合は、解決策に進みます。

手順 2: バックエンド サーバーの API を直接呼び出す(Public Cloud ユーザーと Private Cloud ユーザー)

バックエンド サーバーを直接呼び出して、Apigee Edge からリクエストが行われた場合と同じ 504 ゲートウェイ タイムアウト レスポンスの動作を確認します。

  1. リクエストの一部としてバックエンド サーバーに渡すために必要なすべてのヘッダー、クエリ パラメータ、認証情報があることを確認します。
  2. バックエンド サービスが一般公開されている場合は、curl コマンド、Postman、その他の REST クライアントを使用して、バックエンド サーバー API を直接呼び出すことができます。
  3. バックエンド サーバーに Message Processor からのみアクセスできる場合は、curl コマンド、Postman、その他の REST クライアントを使用して、Message Processor からバックエンド サーバー API を直接呼び出します。
  4. バックエンド サービスが 504 Gateway Timeout レスポンスを返した場合は、解決策に進みます。

手順 3: NGINX アクセスログを確認する(Private Cloud ユーザーのみ)

NGINX のアクセスログは、504 エラー レスポンスがバックエンド サーバーによって送信されたかどうかを判断するのに役立ちます。 これは、問題が過去に発生した場合、断続的に発生する場合、Trace でキャプチャできない場合に特に役立ちます。NGINX のアクセスログを確認する手順は次のとおりです。

  1. 次のコマンドを使用して NGINX のアクセスログを表示します。
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. 該当する API プロキシの 504 エラー レスポンスを確認します。特定の期間を確認したり、問題が過去に発生したかどうかを調べたり、リクエストが引き続き 504 エラー レスポンスで失敗しているかどうかを調べたりできます。
  3. 504 エラー レスポンスがある場合は、エラー レスポンスがバックエンド サーバーから発生しているかどうかを確認します。
  4. 次の図は、ターゲット サーバーに起因する 504 エラー レスポンスを示す NGINX ログエントリの例です。

    nginx ログのサンプル

    X-Apigee-fault-source フィールドと X-Apigee-fault-code フィールドに次の表に示す値が含まれている場合、504 レスポンスはバックエンド サーバーから送信されます。

    レスポンス ヘッダー
    X-Apigee-fault-source target
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. 影響を受ける API プロキシでプロキシ チェーン(バックエンド サーバー/ターゲット エンドポイントが Apigee の別のプロキシを呼び出している)を確認します。API プロキシがプロキシ チェーン を使用している場合は、チェーンされたプロキシごとに上記の手順を繰り返して、504 Gateway Timeout エラー レスポンスの原因を診断します。504 Gateway タイムアウトは、こちらのハンドブックを使用して、他のステージでチェーンされたプロキシで発生している問題を診断できます。
  6. プロキシ チェーンが存在せず、504 エラー レスポンスがバックエンド サーバーから発生している場合は、解決策に進みます。

手順 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