APIゲートウェイの詳細
APIゲートウェイ・ログのロギング詳細。
リソース
- APIデプロイメント
ログ・カテゴリ
API値(ID): | コンソール(表示名) | 説明 |
---|---|---|
Access | アクセス・ログ | APIデプロイメントのアクセス・ログ。 |
Execution | 実行ログ | APIデプロイメントの実行ログ。 |
可用性
APIゲートウェイのアクセス/実行ロギングは、商用レルムのすべてのリージョンで使用できます。
APIデプロイメントのアクセス・ログ
APIデプロイメントのアクセス・ログには、APIゲートウェイを通過するすべてのリクエストおよびレスポンスのサマリーが記録され、APIデプロイメント上のルートと一致します。各アクセス・ログ・エントリには、リクエストおよびレスポンスに関する情報(リクエストの受信時間、サーバー・プロトコル、レスポンス・ステータスなど)が含まれます。フィールドの完全なリストは、アクセス・ログの内容を参照してください。
アクセス・ログの内容
アクセス・ログは、「ログ・データ」フィールドに値として表示されます。この値は、次のフィールドを含むJSON形式のデータです:
フィールド | 例 | 説明 |
---|---|---|
httpMethod | GET | リクエスト行から導出されたHTTPメソッド。 |
requestUri | /example/ | リクエスト行から導出されたリクエストURI。 |
serverProtocol | HTTP/1.1 | リクエスト行から導出されたHTTPプロトコル。 |
bodyBytesSent | 45 | クライアントに送信されたレスポンスの合計サイズ(バイト単位)。 |
gatewayId | ocid1.apigateway.oc1.iad.<unique_ID> | リクエストを処理するAPIデプロイメントのAPIゲートウェイのOCID。 |
httpUserAgent | Apache-HttpClient/4.5.9 (Java/1.8.0_252) | リクエストのHTTPユーザー・エージェント。 |
message | GET /example/ HTTP/1.1 | クライアントから受信されたリクエスト行。 |
opcRequestId | FF7F0B8A32246FC7526AE45A2FA8D5CE/ A408784281BF81B0EE23596CE57CA93C/ C06F7DDDFC7C505FAA0566D8F2FE0BB2 |
opc-request-id HTTPヘッダーの値、または内部生成されたリクエストID (リクエストで何も指定されていない場合)。 |
remoteAddr | 138.1.55.172 | リクエストしているクライアントのIPアドレス。 |
httpReferrer | https://www.example.com | 参照元のURL (存在する場合)。 |
requestDuration | 0.016 | ゲートウェイがクライアントからのリクエストの受信を開始したときから、クライアントへのレスポンスの送信を完了するまでにかかった合計時間(ミリ秒精度の秒単位)。 |
status | 404 | ゲートウェイからのレスポンスのステータス・コード。 |
サンプル・アクセス・ログ
{
"httpMethod": "GET",
"requestUri": "/example/",
"serverProtocol": "HTTP/1.1",
"bodyBytesSent": 45,
"gatewayId": "ocid1.apigateway.oc1.iad.<unique_ID>",
"httpUserAgent": "Apache-HttpClient/4.5.9 (Java/1.8.0_252)",
"message": "GET /example/ HTTP/1.1",
"opcRequestId": "FF7F0B8A32246FC7526AE45A2FA8D5CE/A408784281BF81B0EE23596CE57CA93C/C06F7DDDFC7C505FAA0566D8F2FE0BB2",
"remoteAddr": "138.2.05.172",
"requestDuration": 0.016,
"status": 404
}
APIデプロイメントの実行ログ
APIデプロイメントの実行ログには、個々のルートのAPIゲートウェイ内での処理に関する情報が記録され、トラブルシューティングおよびモニタリングに役立ちます。各実行ログ・エントリには、リクエストの受信時間、ログ・メッセージの重大度を示すレベル、メッセージ・コードなどの情報が含まれます。フィールドの完全なリストは、実行ログの内容を参照してください。
実行ログの内容
デフォルトでは、ログ・レベルの情報が有効になっています。この値は、次のフィールドを含むJSON形式のデータです:
フィールド | 例 | 説明 |
---|---|---|
code | request.loopDetected | リクエストの実行中に発生したロギング・イベントの短縮コード。メッセージ・コードの完全なリストは、「ログ・コード」表のログ・コードを参照してください。 |
gatewayId | ocid1.apigateway.oc1.iad.<unique_ID> | リクエストを処理するAPIデプロイメントのAPIゲートウェイのOCID。 |
functionId | ocid1.fnfunc.oc1.iad.<unique_ID> | APIゲートウェイが呼び出したファンクションのOCID。このフィールドは、ファンクション・バックエンド専用です。 |
level | WARN | 実行ログ・エントリのログ・レベル(INFO、WARNまたはERROR)。 |
message | A request loop has been detected - requests for this gateway are being directed back to this gateway. | リクエストの処理中に発行された実行メッセージ。 |
opcRequestId | FF7F0B8A32246FC7526AE45A2FA8D5CE/ A408784281BF81B0EE23596CE57CA93C/ C06F7DDDFC7C505FAA0566D8F2FE0BB2 |
opc-request-id HTTPヘッダーの値、または内部生成されたリクエストID (リクエストで何も指定されていない場合)。 |
configuredLimit | 5 | configuredUnitごとに許可するリクエストの数。レート制限または割当て制限のいずれか。 |
configuredUnit | 分 | configuredLimitで指定されたリクエスト数を許可する期間。レート制限の場合は、"SECOND"。割当ての場合は、"MINUTE"、"DAY"、"HOUR"、"WEEK"または"MONTH"です。 |
entitlementName | Entitlement1 | APIデプロイメントへのアクセスにリクエストが使用している資格の名前。 |
limitingKey | <timestamp>/ocid1.apigatewayusageplan.oc1.iad.<unique_ID>/<entitlement-name>/ocid1.apigatewaysubscriber.oc1.iad.<unique_ID> | レート制限および割当て制限の使用量を計算するには、同じキーを持つリクエストがまとめてカウントされます。 |
limitingResourceId | ocid1.apigatewayusageplan.oc1.iad.<unique_ID> | APIデプロイメントへのアクセスに使用される使用計画のOCID。 |
limitingResourceName | ゴールド-使用-計画 | APIデプロイメントへのアクセスに使用される使用計画の名前。 |
secretId | ocid1.secret.oc1.iad.<unique_ID> | APIゲートウェイが取得しようとしているボールト・シークレットのOCID。 |
secretVersion | 1 | APIゲートウェイが取得しようとしているボールト・シークレットのバージョン番号。 |
subscriberId | ocid1.apigatewaysubscriber.oc1.iad.<unique_ID> | サブスクライバのOCID。 |
subscriberName | プレミアム購読者 | サブスクライバの表示名。 |
ログ・コード
ログ・コード | 説明 |
---|---|
authentication.idpCallFailed | OAuth2アイデンティティ・プロバイダのコール中にエラーが発生しました。 |
authentication.idpCallSuccess | OAuth2アイデンティティ・プロバイダを正常にコールしました。 |
authentication.idpTokenExpiryNonNumeric | OAuth2アイデンティティ・プロバイダが有効な有効期限を返しませんでした。 |
authentication.validationFailurePolicyOAuth | OAuth2検証失敗ポリシーがトリガーされました。 |
authentication.validationFailurePolicyOAuthStepFailed | OAuth2検証失敗ポリシー・ステップの実行中にエラーが発生しました。 |
authorization.unauthorizedRequest | リクエストの認可に失敗しました。 |
customAuthentication.authenticationFailed | カスタム認証に失敗しました。 |
customAuthentication.cacheMiss | カスタム認可プロバイダ・レスポンスがキャッシュに見つかりませんでした。 |
customAuthentication.failedFunctionInvocation | Oracle Functionの呼出しに失敗しました。 |
customAuthentication.successfulAuthentication | カスタム認証に成功しました。 |
customAuthentication.successfulFunctionInvocation | Oracle Functionの呼出しに成功しました。 |
customAuthentication.unexpectedResponse | Oracle Functionからの予期しないレスポンス。 |
dynamicAuthentication.authenticationServerMatched | 選択したコンテキスト変数値が認証サーバー・ルールの1つと一致しました。 |
dynamicAuthentication.defaultAuthenticationServerMatched | 選択したコンテキスト変数値はどの認証サーバー・ルールとも一致しませんでしたが、認証に使用されたデフォルトの認証サーバーが指定されています。 |
dynamicAuthentication.jwtTokenInvalid | 選択したコンテキスト変数はrequest.auth[claimName]でしたが、リクエストとともに無効なJWTトークンが送信されました。 |
dynamicAuthentication.jwtTokenNotFound | 選択したコンテキスト変数はrequest.auth[claimName]でしたが、JWTトークンがリクエストとともに送信されませんでした。 |
dynamicAuthentication.noAuthenticationServerMatched | 選択したコンテキスト変数の値が認証サーバー・ルールのいずれにも一致せず、デフォルトの認証サーバーが指定されていません。 |
dynamicRouting.backendMatched | リクエストはバックエンド・ルールに一致し、関連付けられたバックエンドにルーティングされました。 |
dynamicRouting.backendRejected | リクエストがバックエンド・ルールと一致せず、デフォルト・ルールが定義されていないため、リクエストは失敗しました。 |
dynamicRouting.defaultBackendMatched | リクエストがバックエンド・ルールと一致しなかったため、デフォルト・ルールに関連付けられたバックエンドにルーティングされました。 |
functionBackend.badGateway | OCI Functionsでファンクションを呼び出すときに「不正なゲートウェイ」を受信しました |
functionBackend.badRequestHeaderValue | リクエスト・ヘッダーの不正な値。 |
functionBackend.badRequestHeaders | 不正なリクエスト・ヘッダーです。 |
functionBackend.badResponse | 関数が障害のある応答を返しました。これは、関数からの不適切な形式の応答を示します。 |
functionBackend.internalServiceError | OCI関数で関数を呼び出すときに内部サービス・エラーが発生しました |
functionBackend.notFoundOrNotAuthorized | OCI Functionsサービスからの404のため、OCI Functionsでのファンクションの呼出しに失敗しました。 |
functionBackend.rateLimited | OCI関数で関数を呼び出すときに制限されるレート |
functionBackend.serviceUnavailable | OCI Functionsサービスは使用できません。 |
functionBackend.successfulRequest | OCI関数での関数の正常な起動 |
functionBackend.timeout | OCI関数での関数の起動がタイムアウトしました。 |
headerTransformation.badHeaderValue | リクエスト・ヘッダーの不正な値。 |
headerTransformation.missingSetValues | セット変換ポリシーの値がありません。 |
headerTransformation.protectedHeaderTransformed | ポリシーは保護されたヘッダーを変換しようとしました。 |
httpBackend.formedBackendUrl | HTTPバックエンドURLは、コンテキスト変数を使用して動的に形成されました。 |
httpBackend.requestError | HTTPバックエンドへのリクエスト中にエラーが発生しました。 |
httpBackend.requestSent | HTTPバックエンドに送信されたリクエスト。 |
httpBackend.responseBodyError | HTTPバックエンドからのレスポンス本文の読取り中にエラーが発生しました。 |
httpBackend.responseReceived | HTTPバックエンドから受信されたレスポンス。 |
httpBackend.urlInvalid | HTTPバックエンドURLが無効です。 |
jwtAuthentication.authenticationFailed | JWT認証に失敗しました。 |
jwtAuthentication.badJsonWebKeySet | JSON Webキー・セットが無効です。 |
jwtAuthentication.loadingJsonWebKeySet | JSON Webキー・セットをロードしています。 |
jwtAuthentication.successfulAuthentication | JWT認証に成功しました。 |
logoutBackend.invalidAuthentication | ログアウト・パスが一致しません。 |
logoutBackend.logoutError | OAuth2ログアウト・バックエンドでエラーが発生しました。 |
logoutBackend.redirectError | ログアウト後のリダイレクトURLは許可されませんでした。 |
mutualTls.clientCertificateInvalid | クライアント証明書がないか、無効です。 |
mutualTls.clientCertificateSanInvalid | クライアント証明書に含まれるSANの検証に失敗しました。 |
queryParameterTransformation.badParameterValue | リクエスト問合せパラメータの不正な値。 |
rateLimiting.requestDenied | リクエストはレート制限ポリシーによって拒否されました。 |
rateLimiting.requestPermitted | リクエストはレート制限ポリシーによって許可されました。 |
request.bodyTooLarge | リクエスト本文が大きすぎます。 |
request.clientCertConversionFailed | クライアント証明書を文字列値に変換できませんでした。 |
request.clientEof | クライアント・エラーのため、リクエストを読み取れませんでした。 |
request.clientTimeout | クライアントのタイムアウトのため、リクエストを読み取れませんでした。 |
request.internalServiceError | 内部サービス・エラー。 |
request.loopDetected | リクエスト・ループ条件が検出されました。ゲートウェイのリクエストはそれ自体にリダイレクトされ、循環が発生しています。 |
request.possibleLoopDetected | リクエスト・ループ条件の可能性が検出されました。ゲートウェイのリクエストはそれ自体にリダイレクトされ、循環が発生しています。 |
request.serviceUnavailable | ゲートウェイは現在リクエストを処理できません。 |
requestValidation.validationError | リクエストは検証ポリシーに失敗しました。 |
requestValidation.validationPermitted | リクエストは検証ポリシーに合格しました。 |
responseCache.backendResponseStorageAborted | バックエンド・レスポンスがキャッシュに格納されませんでした。 |
responseCache.backendResponseStoredInCache | バックエンド・レスポンスがキャッシュに格納されました。 |
responseCache.lookupAborted | レスポンス・キャッシュは使用されませんでした。 |
responseCache.lookupResultNotFound | キャッシュにレスポンスが見つかりませんでした。 |
responseCache.lookupResultSuccess | キャッシュからレスポンスが読み取られました。 |
secretsClient.fetchFailure | シークレット・サービスからのクライアント・シークレットのフェッチに失敗しました。 |
secretsClient.fetchSuccess | シークレット・サービスからクライアント・シークレットを正常にフェッチしました。 |
secretsClient.unexpectedResponse | クライアント・シークレットのフェッチ中にシークレット・サービスから予期しないレスポンスが発生しました。 |
tokenAuthentication.authenticationFailed | トークン認証に失敗しました。 |
tokenAuthentication.badDiscoveryEndpointResponse | リモート検出エンドポイント・レスポンスが無効です。 |
tokenAuthentication.badIntrospectionResponse | トークン・イントロスペクション・レスポンスが無効です。 |
tokenAuthentication.badJsonWebKeySet | JSON Webキー・セットが無効です。 |
tokenAuthentication.loadingDiscoveryEndpointResponse | リモート検出ドキュメントをロードしています。 |
tokenAuthentication.loadingJsonWebKeySet | JSON Webキー・セットをロードしています。 |
tokenAuthentication.successfulAuthentication | トークン認証に成功しました。 |
UsagePlans.eligibleNotEntitle | APIデプロイメント仕様には、クライアント・トークンを指定する使用状況プラン・リクエスト・ポリシーが含まれていても、APIデプロイメントはどの使用プランの資格のターゲットでもありません。 |
UsagePlans.requestBreachedが許可されました | 使用計画資格で指定された最大リクエスト数を超えた場合でも、リクエストが許可されました。 |
UsagePlans.requestPermitted | 使用計画サブスクライバからのリクエストが許可されました。 |
UsagePlans.request拒否済 | 使用計画サブスクライバからのリクエストが拒否されました。 |
サンプル実行ログ
- タイプ: リクエスト
- シナリオ: リクエスト・ループの検出
- 説明: リクエスト・ループ条件が検出されました。ゲートウェイのリクエストはそれ自体にリダイレクトされ、循環が発生しています。
- 例:
{ "code": "request.loopDetected", "gatewayId": "ocid1.apigateway.oc1.iad.<unique_ID>", "level": "WARN", "message": "A request loop has been detected - requests for this gateway are being directed back to this gateway.", "opcRequestId": "FF7F0B8A32246FC7526AE45A2FA8D5CE/A408784281BF81B0EE23596CE57CA93C/C06F7DDDFC7C505FAA0566D8F2FE0BB2", }