503 Service Unavailable - NoActiveTargets(サービス利用不可 - NoActiveTargets)

Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントに移動します。
情報

動画

503 エラーの詳細については、次の動画をご覧ください。

動画 説明
503 Service Unavailable - NoActiveTargets のトラブルシューティングと解決 以下の内容を学習します。
  • ターゲット サーバーとヘルスモニターの重要性
  • リアルタイムの 503 Service Unavailable - NoActiveTargets エラーのトラブルシューティングと解決

症状

クライアント アプリケーションが、API プロキシ リクエストに対して、HTTP レスポンス ステータス コード 503、メッセージ Service Unavailable、エラーコード NoActiveTargets を受け取ります。

エラー メッセージ

次のエラー レスポンスが表示されます。

HTTP/1.1 503 Service Unavailable
  

HTTP レスポンスに次のエラー メッセージが表示されます。

{
   "fault": {
      "faultstring": "The Service is temporarily unavailable",
      "detail": {
           "errorcode": "messaging.adaptors.http.flow.NoActiveTargets"
       }
    }
}
  

考えられる原因

通常、API プロキシのターゲット エンドポイント構成で 1 つ以上のターゲット サーバーを使用すると、エラーコード NoActiveTargets を含む HTTP レスポンス 503 Service Unavailable が返されます。

次の表に、エラーコード NoActiveTargets を含む 503 Service Unavailable レスポンスで考えられる原因を示します。

原因 説明 トラブルシューティング手順を実施できるユーザー
ターゲット サーバーが無効になっている ターゲット エンドポイント構成で指定されたターゲット サーバーが無効になっています。 Edge Public Cloud と Private Cloud のユーザー
DNS の解決が正しくないために発生する接続エラー ターゲット サーバーの DNS の解決で、接続エラーにつながる IP アドレスの不具合が生じた。 Edge Private Cloud ユーザー
接続エラー ネットワークまたは接続性の問題により、クライアントがサーバーに接続できなくなっています。 Edge Private Cloud ユーザー
ターゲット ホストのエイリアスが正しくない 指定されたターゲット サーバーのホストが正しくないか、不要な文字(スペースなど)が含まれている。 Edge Public Cloud と Private Cloud のユーザー
SSL ハンドシェイクの失敗 クライアントとサーバーの間で TLS/SSL handshake が失敗しました。 Edge Public Cloud と Private Cloud のユーザー
ヘルスチェックの失敗 ターゲット サーバーの健全性をチェックするように構成されたヘルスチェックが、なんらかの理由で失敗することがあります。 Edge Private Cloud ユーザー

原因: ターゲット サーバーが無効になっている

ターゲット エンドポイント構成で指定されたすべてのターゲット サーバーが無効になっている場合は、エラーコード NoActiveTargets を含む 503 Service Unavailable レスポンスが返されます。

診断

  1. 次のいずれかの方法で、失敗した API プロキシの特定のターゲット エンドポイント構成で使用されているターゲット サーバーの名前を特定します。
    1. ターゲット エンドポイントが 1 つの場合は、そのターゲット エンドポイントを確認します。
    2. 複数のターゲット エンドポイントがあり、どのエンドポイントでターゲット サーバーが無効になっているかわからない場合は、次の手順を行います。
      1. トレース セッションを有効にして API 呼び出しを行い、503 Service Unavailable の問題を再現します。
      2. トレースから [Target Request Flow Started] に移動し、次のようにターゲット エンドポイントの名前を特定します。
      3. トレースからターゲット エンドポイント名を特定する

  2. ターゲット エンドポイントを特定したら、次の例に示すように、ターゲット エンドポイント構成で使用されているターゲット サーバー名を取得します。
    <TargetEndpoint name="default">>
      <HTTPTargetConnection>
        <LoadBalancer>
          <Server name="demo-target" />
        </LoadBalancer>
        <Path>/test</Path>
      </HTTPTargetConnection>
    </TargetEndpoint>
          

    上記の例では、demo-target という名前の単一のターゲット サーバーがあります。

  3. Edge UI または Edge API 呼び出しを使用して、ターゲット エンドポイントで使用されている各ターゲット サーバーの定義を取得します。

    Edge UI

    Edge UI を使用して定義を取得するには:

    1. [Admin] > [Environments] > [Target Servers] に移動します。
    2. エラーが発生している特定の環境を選択します。
    3. 特定のターゲット サーバー名を検索して、ターゲット サーバーの定義を取得します。

      たとえば、ターゲット サーバー名 demo-target を入力すると、次のように定義が表示されます。

      ターゲット サーバーの名前と有効/無効のステータス

      ターゲット サーバー demo-target には、ホスト エイリアス、ポート番号、SSL が有効になっていることに注意してください。ただし、ターゲット サーバー自体は無効 になっています。これは、[ENABLED] 要素がグレー表示になっていることで示されます。

    Edge API

    Edge API を使用して定義を取得するには:

    Get TargetServer API を使用して、ターゲット サーバー定義を取得します。

    ターゲット サーバー定義の出力

    <TargetServer name="demo-target">
      <Host>demo-target.apigee.net</Host>
      <Port>443</Port>
      <IsEnabled>false</IsEnabled>
      <SSLInfo>
          <Enabled>true</Enabled>
      </SSLInfo>
    </TargetServer>
              

    Apigee API の出力は、要素 IsEnabled が false に設定されているため、ターゲット サーバー demo-target が無効になっていることを示しています。

    ターゲット サーバーが無効になっているため、Message Processor はエラーコード NoActiveTargets を含む 503 Service Unavailable をクライアントへのレスポンスとしてすぐに送信します。

解決策

API プロキシのターゲット エンドポイント構成で使用される特定のターゲット サーバーが常に有効になっていることを確認します。

Edge UI

  1. [Admin] > [Environments] > [Target Servers] に移動します。
  2. エラーが発生している特定の環境を選択します。
  3. 特定のターゲット サーバー名を検索して、その定義を取得します。
  4. 特定のターゲット サーバーを選択し、[編集] をクリックします。
  5. [Enabled] チェックボックスをオンにします。
  6. [更新] をクリックします。

Edge API

Target Server API の更新を使用して、ターゲット サーバーの定義を更新し、API のリクエスト ペイロードで IsEnabled が true に設定されていることを確認します。

<TargetServer name="demo-target">
  <Host>demo-target.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
      <Enabled>true</Enabled>
  </SSLInfo>
</TargetServer>
        

問題が解決しない場合は、診断情報の収集が必要な場合に進みます。

API Monitoring を使用して問題を診断する

API Monitoring を使用すると、問題領域を迅速に切り分けて、エラー、パフォーマンス、レイテンシの問題とその発生元(デベロッパー アプリ、API プロキシ、バックエンド ターゲット、API プラットフォームなど)を診断できます。

API Monitoring を使用して API での 5xx 問題をトラブルシューティングする方法を説明するサンプル シナリオに従ってください 。たとえば、messaging.adaptors.http.flow.NoActiveTargets エラーの数が特定のしきい値を超えたときに通知を行うようにアラートを設定します。

診断情報の収集が必要な場合

上記の手順に従っても問題が解決されない場合は、次の診断情報を収集してください。Apigee サポートに連絡して、収集した情報を共有してください。

  1. Public Cloud をご利用の場合は、次の情報を提供してください。
    1. 組織名
    2. 環境名
    3. API プロキシ名
    4. エラーを再現するための完全な curl コマンド
    5. エラーコード NoActiveTargets で 503 Service Unavailable のリクエストを含むトレース ファイル
  2. Private Cloud をご利用の場合は、次の情報を提供してください。
    1. 確認したエラー メッセージ全文
    2. 環境名
    3. API プロキシ バンドル
    4. エラーコード NoActiveTargets で 503 Service Unavailable のリクエストを含むトレース ファイル
    5. NGINX アクセスログ

      (/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log)

    6. Message Processor ログ

      (/opt/apigee/var/log/edge-message-processor/logs/system.log)