現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください。 情報
動画
503 エラーについて詳しくは、次の動画をご覧ください。
動画 | 説明 |
---|---|
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 レスポンスが返されます。
診断
- 次のいずれかの方法で、エラーが発生した API プロキシの特定のターゲット エンドポイント構成で使用されているターゲット サーバーの名前を確認します。
- ターゲット エンドポイントが 1 つしかない場合は、そのターゲット エンドポイントを確認します。
- 複数のターゲット エンドポイントがあり、どのエンドポイントでターゲット サーバーが無効になっているか不明な場合は、次の手順を行います。
- トレース セッションを有効にして API 呼び出しを行い、503 Service Unavailable(503 サービス利用不可)を再現します。
- トレースから [Target Request Flow Started] に移動し、以下のようにターゲット エンドポイントの名前を特定します。
- ターゲット エンドポイントを特定したら、以下の例に示すように、使用するターゲット サーバー名をターゲット エンドポイント構成から取得します。
<TargetEndpoint name="default">> <HTTPTargetConnection> <LoadBalancer> <Server name="demo-target" /> </LoadBalancer> <Path>/test</Path> </HTTPTargetConnection> </TargetEndpoint>
上記の例では、demo-target という名前の単一のターゲット サーバーがあります。
- Edge UI または Edge API 呼び出しを使用して、ターゲット エンドポイントで使用されている各ターゲット サーバーの定義を取得します。
Edge UI
Edge UI を使用して定義を取得するには:
- [Admin] > [Environments] > [Target Servers] に移動します。
- エラーが発生している特定の環境を選択します。
- 特定のターゲット サーバー名を検索して、ターゲット サーバーの定義を取得します。
たとえば、ターゲット サーバー名として「
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
- [管理] > [環境] > [ターゲット サーバー] に移動します。
- エラーが発生している特定の環境を選択します。
- ターゲット サーバーの名前を検索して定義を取得します。
- 特定のターゲット サーバーを選択し、[Edit] をクリックします。
- [Enabled] チェックボックスをオンにします。
- [更新] をクリックします。
Edge API
ターゲット サーバー 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 サポートに連絡し、共有してください。
- Public Cloud をご利用の場合は、次の情報をご入力ください。
- 組織名
- 環境名
- API プロキシ名
- 完全な curl コマンドでエラーを再現する
- 503 Service Unavailable(エラーコード NoActiveTargets)のリクエストを含むトレース ファイル
- Private Cloud をご利用の場合は、次の情報を提供してください。
- 確認された完全なエラー メッセージ
- 環境名
- API プロキシ バンドル
- 503 Service Unavailable(エラーコード NoActiveTargets)のリクエストを含むトレース ファイル
- 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
)