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

現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください
情報

動画

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

動画 説明
503 Service Unavailable - NoActiveTargets のトラブルシューティングと解決 以下を確認してください。
  • ターゲット サーバーとヘルスモニターの重要性
  • リアルタイム 503 Service Unavailable - NoActiveTargets エラーのトラブルシューティングと解決

内容

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

エラー メッセージ

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

HTTP/1.1 503 Service Unavailable
  

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

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

考えられる原因

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

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

原因 説明 トラブルシューティングの手順を実施できるユーザー
ターゲット サーバーが無効になっている ターゲット エンドポイント構成で指定されたターゲット サーバーが無効になっている。 Edge Public Cloud ユーザーと Private Cloud ユーザー
誤った DNS 解決による接続エラー ターゲット サーバーの DNS 解決で不正な IP アドレスが発生し、接続エラーが発生しました。 Edge Private Cloud ユーザー
接続エラー ネットワークまたは接続の問題により、クライアントがサーバーに接続できない。 Edge Private Cloud ユーザー
ターゲット ホスト エイリアスが正しくない 指定されたターゲット サーバーのホストが正しくないか、不要な文字(スペースなど)が含まれています。 Edge Public Cloud ユーザーと Private Cloud ユーザー
SSL handshake の失敗 クライアントとサーバーの間で 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(503 サービス利用不可)を再現します。
      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 はクライアントへのレスポンスとして直ちに 503 Service Unavailable を送信します(エラーコード NoActiveTargets)。

解像度

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

Edge UI

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

Edge API

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

<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. 503 Service Unavailable(エラーコード NoActiveTargets)のリクエストを含むトレース ファイル
  2. Private Cloud をご利用の場合は、次の情報を提供してください。
    1. 確認された完全なエラー メッセージ
    2. 環境名
    3. API プロキシ バンドル
    4. 503 Service Unavailable(エラーコード NoActiveTargets)のリクエストを含むトレース ファイル
    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)