API Gateway では、公開済みの API をオンラインでデバッグできます。このトピックでは、API デバッグ中に発生する問題のトラブルシューティング方法について説明します。
デバッグの制約
API Gateway コンソールの API デバッグ機能を使用して、公開済みの API をデバッグし、障害のトラブルシューティングを行います。開始する前に、以下の制約に注意してください。
API デバッグ機能は、署名認証、簡易認証 (AppCode) 、Basic 認証プラグイン (BasicAuth プラグイン) による認証の 3 つの認証方式をサポートしています。
API デバッグ機能は、multipart および form-data をサポートしています。デバッグページでファイルをアップロードできます。
デバッグページでのリクエストパケットの最大サイズは 512 KB です。より大きなペイロードの場合は、SDK を使用してデバッグしてください。
インスタンスに許可リストまたは拒否リストを含む IP アドレスベースのスロットリングプラグインを設定した場合は、デバッグに使用する IP アドレスがリストで許可されていることを確認してください。この IP アドレスは、API デバッグページの左下隅で確認できます。
レスポンスヘッダーからのエラー情報の読み取り
API Gateway は、受信したすべてのリクエストに対してレスポンスを返します。X-Ca で始まるヘッダーには、API Gateway が返す診断情報が含まれています。トラブルシューティングに最も役立つ 3 つのヘッダーは次のとおりです。
X-Ca-Error-Code:エラーコード。API Gateway がリクエストを拒否した場合にのみ存在します。X-Ca-Request-Id:一意のリクエスト ID。API Gateway は、すべてのリクエストに対してこの ID を生成して返します。クライアントとバックエンドサービスの両方でこれを記録してください。これは、トレースとトラブルシューティングのための主要な手がかりとなります。X-Ca-Error-Message:エラーメッセージ。リクエストが失敗した場合、X-Ca-Error-Codeとともに返されます。
X-Ca-Request-Id による呼び出しの詳細の検索
X-Ca-Error-Code と X-Ca-Error-Message を使用して、最初の障害を特定します。3 つの結果が考えられます。
API Gateway によって報告されたエラー
X-Ca-Error-Code が空でない場合は、API Gateway によってリクエストが拒否されたことを示します。このエラーコードは 6 文字の文字列です。原因の簡単な説明は、X-Ca-Error-Message で確認できます。エラーコードの完全なリストについては、「エラーコード」をご参照ください。
バックエンドサービスによって報告されたエラー
HTTP ステータスコードが 200 でなく、X-Ca-Error-Code が空の場合、API Gateway はリクエストを正常に転送しましたが、バックエンドサービスが 200 以外のレスポンスを返しました。バックエンドサービスのロジックを確認してください。Alibaba Cloud Marketplace から API を購入した場合は、サービスプロバイダーにお問い合わせください。
リクエスト成功
HTTP ステータスコードが 200 の場合、API Gateway はリクエストを転送し、バックエンドサービスが成功レスポンスを返しました。
より詳細な調査を行うには、X-Ca-Request-Id を使用して Simple Log Service で詳細なリクエストログをクエリし、API Gateway コンソールで結果を表示してください。また、テクニカルサポートと共有することもできます。
コンソールでリクエストを検索するには、次の手順を実行します。
API Gateway コンソールにログオンします。
左側のナビゲーションペインで、 をクリックし、[API Gateway のリージョン] と [X-Ca-Request-Id] を入力し、[クエリ] をクリックします。
ログフィールドの詳細については、「Simple Log Service を使用して API コールのログを管理する」をご参照ください。
トレースログの取得
API デバッグページでリクエストを送信した後、そのトレースログを表示できます。このログは、リクエストライフサイクル全体をキャプチャします。具体的には、API Gateway がクライアントから受信したリクエスト、API Gateway 内での処理ステップ、API Gateway がバックエンドサービスに送信したリクエスト、バックエンドレスポンス、クライアントに返される最終レスポンスが含まれます。
RAM ユーザーアカウントまたは引き受けたロールを使用している場合は、リクエストを送信する前に[トレースログの記録]を選択してください。 また、アカウントは、API が存在するインスタンスに対して、ルートアカウントから付与された apigateway:AcquireGatewayToken 権限を持っている必要があります。 権限の付与に関する詳細については、「RAM を使用した API の管理」をご参照ください。
次の例は、この権限を付与するポリシーステートメントを示しています。
{
"Version": "1",
"Statement": [
{
"Effect": "ALLOW",
"Action": "apigateway:AcquireGatewayToken",
"Resource": "acs:apigateway:{#regionId}:{#accountId}:instance/{#InstanceId}"
}
]
}
# {#} 記号は、実際の値に置き換える必要がある変数を示します。
[診断] タブを使用したエラーの分析
[診断] タブの [呼び出し情報] セクションでは、任意の呼び出しのログを調査できます。2 つのレイテンシーフィールドにより、障害が API Gateway 内で発生したのか、バックエンドサービスで発生したのかをすぐに特定できます。
TotalLatency:API Gateway がクライアントリクエストを受信してから、完全なレスポンスをクライアントに送信するまでの合計時間。ServiceLatency:API Gateway がバックエンドサービスにリクエストを送信してから、完全なレスポンスを受信するまでの時間。
ServiceLatency が 0 の場合、リクエストは API Gateway によってインターセプトされ、バックエンドサービスには到達しませんでした。ServiceLatency が 0 より大きい場合、リクエストはバックエンドサービスに到達しました。
ログには、リクエストパスの各段階の I/O タイムスタンプも記録されます。
|
フィールド |
説明 |
|
|
API Gateway がクライアントリクエストの受信を開始した時刻 |
|
|
API Gateway がクライアントリクエストの受信を完了した時刻 |
|
|
API Gateway がバックエンドサービスへのリクエスト送信を開始した時刻 |
|
|
API Gateway がバックエンドサービスへのリクエスト送信を完了した時刻 |
|
|
API Gateway がバックエンドサービスレスポンスの受信を開始した時刻 |
|
|
API Gateway がバックエンドサービスレスポンスの受信を完了した時刻 |
|
|
API Gateway がクライアントへのレスポンス送信を開始した時刻 |
|
|
API Gateway がクライアントへのレスポンス送信を完了した時刻 |
ログフィールドの詳細については、「Simple Log Service を使用して API コールのログを管理する」をご参照ください。