Détails relatifs à API Gateway
Détails de journalisation pour les journaux API Gateway.
Ressources
- Déploiement d'API
Catégories de journal
Valeur d'API (ID) : | Console (nom d'affichage) | Description |
---|---|---|
Accès | Journaux d'accès | Journaux d'accès pour un déploiement d'API. |
Exécution | Journaux d'exécution | Journaux d'exécution pour un déploiement d'API. |
Disponibilité
La journalisation des accès/d'exécution d'API Gateway est disponible dans toutes les régions des domaines commerciaux.
Journal d'accès de déploiement d'API
Les journaux d'accès de déploiement d'API enregistrent un récapitulatif de chaque demande et de chaque réponse qui passent par la passerelle d'API, correspondant à un routage sur le déploiement d'API. Chaque entrée du journal d'accès contient des informations sur la demande et la réponse (heure de réception de la demande, protocole du serveur, statut de la réponse, etc.). Pour obtenir la liste complète des champs, reportez-vous à Contenu d'un journal d'accès.
Contenu d'un journal d'accès
Les journaux d'accès apparaissent sous forme de valeur dans le champ Données de journal. Cette valeur est une donnée au format JSON comportant les champs suivants :
Champ | Exemple | Description |
---|---|---|
httpMethod | GET | Méthode HTTP dérivée de la ligne de demande. |
requestUri | /example/ | URI de demande dérivé de la ligne de demande. |
serverProtocol | HTTP/1.1 | Protocole HTTP dérivé de la ligne de demande. |
bodyBytesSent | 45 | Taille totale de la réponse (en octets) envoyée au client. |
gatewayId | ocid1.apigateway.oc1.iad.<unique_ID> | OCID de la passerelle d'API pour le déploiement d'API qui traite la demande. |
httpUserAgent | Apache-HttpClient/4.5.9 (Java/1.8.0_252) | Agent utilisateur HTTP pour la demande. |
message | GET /example/ HTTP/1.1 | Ligne de demande reçue de la part du client. |
opcRequestId | FF7F0B8A32246FC7526AE45A2FA8D5CE/ A408784281BF81B0EE23596CE57CA93C/ C06F7DDDFC7C505FAA0566D8F2FE0BB2 |
Valeur de l'en-tête HTTP opc-request-id ou ID de demande généré en interne si aucun ID n'a été précisé dans la demande. |
remoteAddr | 138.1.55.172 | Adresse IP du client à l'origine de la demande. |
httpReferrer | https://www.example.com | URL de renvoi, le cas échéant. |
requestDuration | 0.016 | Temps total (en secondes, avec une précision à la milliseconde) entre le moment où la passerelle commence à recevoir une demande du client et l'envoi d'une réponse au client. |
status | 404 | Code de statut de la réponse de la passerelle. |
Exemple de journal d'accès
{
"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
}
Journal d'exécution de déploiement d'API
Les journaux d'exécution de déploiement d'API enregistrent des informations sur le traitement au sein de la passerelle d'API pour un routage individuel, afin d'aider au dépannage et à la surveillance. Chaque entrée du journal d'exécution contient des informations (heure de réception de la demande, niveau de gravité du message de journalisation, code de message, etc.). Pour obtenir la liste complète des champs, reportez-vous à Contenu d'un journal d'exécution.
Contenu d'un journal d'exécution
Par défaut, les informations sur le niveau de journalisation sont activées. Cette valeur est une donnée au format JSON comportant les champs suivants :
Champ | Exemple | Description |
---|---|---|
code | request.loopDetected | Code abrégé de l'événement de journalisation rencontré lors de l'exécution de la demande. Pour obtenir la liste complète des codes de message, reportez-vous au tableau Codes de journal. |
gatewayId | ocid1.apigateway.oc1.iad.<unique_ID> | OCID de la passerelle d'API pour le déploiement d'API qui traite la demande. |
functionId | ocid1.fnfunc.oc1.iad.<unique_ID> | OCID de la fonction appelée par la passerelle d'API. Ce champ est uniquement présent pour les back-ends de fonction. |
level | WARN | Niveau de journalisation de l'entrée du journal d'exécution : INFO, WARN ou ERROR. |
message | Une boucle de demande a été détectée : les demandes pour cette passerelle sont redirigées vers cette passerelle. | Message d'exécution émis lors du traitement de la demande. |
opcRequestId | FF7F0B8A32246FC7526AE45A2FA8D5CE/ A408784281BF81B0EE23596CE57CA93C/ C06F7DDDFC7C505FAA0566D8F2FE0BB2 |
Valeur de l'en-tête HTTP opc-request-id ou ID de demande généré en interne si aucun ID n'a été précisé dans la demande. |
configuredLimit | 5 | Nombre de demandes à autoriser par configuredUnit. Limite de taux ou quota. |
configuredUnit | MINUTES | Période pendant laquelle autoriser le nombre de demandes indiqué par configuredLimit. Pour les limites de taux, "SECOND". Pour le quota, "MINUTE", "DAY", "HOUR", "WEEK" ou "MONTH". |
entitlementName | Entitlement1 | Nom de l'habilitation utilisée par la demande pour accéder au déploiement d'API. |
limitingKey | <timestamp>/ocid1.apigatewayusageplan.oc1.iad.<unique_ID>/<entitlement-name>/ocid1.apigatewaysubscriber.oc1.iad.<unique_ID> | Pour calculer l'utilisation à des fins de limite de taux et de quota, les demandes ayant la même clé sont comptées ensemble. |
limitingResourceId | ocid1.apigatewayusageplan.oc1.iad.<unique_ID> | OCID du plan d'utilisation utilisé pour accéder au déploiement d'API. |
limitingResourceName | Gold-Usage-Plan | Nom du plan d'utilisation utilisé pour accéder au déploiement d'API. |
secretId | ocid1,secret.oc1, iad,<unique_ID> | OCID d'une clé secrète de coffre que la passerelle d'API tente d'extraire. |
secretVersion | 1 | Numéro de version d'une clé secrète de coffre que la passerelle d'API tente d'extraire. |
subscriberId | ocid1,apigatewaysubscriber.oc1, iad,<unique_ID> | OCID de l'abonné. |
subscriberName | Abonné premium | Nom d'affichage de l'abonné. |
Codes de journal
Code de journal | Description |
---|---|
authentication.idpCallFailed | Une erreur est survenue lors de l'appel du fournisseur d'identités OAuth2. |
authentication.idpCallSuccess | Le fournisseur d'identités OAuth2 a été appelé. |
authentication.idpTokenExpiryNonNumeric | Le fournisseur d'identités OAuth2 n'a pas renvoyé d'expiration valide. |
authentication.validationFailurePolicyOAuth | La stratégie d'échec de validation OAuth2 a été déclenchée. |
authentication.validationFailurePolicyOAuthStepFailed | Une erreur est survenue lors de l'exécution des étapes de stratégie d'échec de validation OAuth2. |
authorization.unauthorizedRequest | Echec de l'autorisation pour la demande. |
customAuthentication.authenticationFailed | L'authentification personnalisée a échoué. |
customAuthentication.cacheMiss | La réponse d'autorisation personnalisée est introuvable dans le cache. |
customAuthentication.failedFunctionInvocation | Echec de l'appel d'Oracle Functions. |
customAuthentication.successfulAuthentication | L'authentification personnalisée a été effectuée. |
customAuthentication.successfulFunctionInvocation | Appel réussi d'Oracle Functions. |
customAuthentication.unexpectedResponse | Réponse inattendue de la part d'Oracle Functions. |
dynamicAuthentication.authenticationServerMatched | La valeur de variable de contexte sélectionnée correspond à l'une des règles du serveur d'authentification. |
dynamicAuthentication.defaultAuthenticationServerMatched | La valeur de variable de contexte sélectionnée ne correspond à aucune des règles du serveur d'authentification, mais un serveur d'authentification par défaut a été spécifié afin d'être utilisé pour l'authentification. |
dynamicAuthentication.jwtTokenInvalid | La variable de contexte sélectionnée était request.auth[claimName], mais un jeton JWT non valide a été envoyé avec la demande. |
dynamicAuthentication.jwtTokenNotFound | La variable de contexte sélectionnée était request.auth[claimName], mais aucun jeton JWT n'a été envoyé avec la demande. |
dynamicAuthentication.noAuthenticationServerMatched | La valeur de variable de contexte sélectionnée ne correspond à aucune des règles du serveur d'authentification et aucun serveur d'authentification par défaut n'a été spécifié. |
dynamicRouting.backendMatched | La demande correspondait à une règle back-end et a été acheminée vers le back-end associé. |
dynamicRouting.backendRejected | La demande a échoué car la demande ne correspondait pas à une règle back-end et aucune règle par défaut n'a été définie. |
dynamicRouting.defaultBackendMatched | La demande ne correspondait pas à une règle back-end. Elle a donc été acheminée vers le back-end associé à la règle par défaut. |
functionBackend.badGateway | "Bad Gateway" reçu lors de l'appel de la fonction dans OCI Functions |
functionBackend.badRequestHeaderValue | Valeur incorrecte pour l'en-tête de demande. |
functionBackend.badRequestHeaders | En-tête de demande incorrect. |
functionBackend.badResponse | La fonction a renvoyé une réponse erronée. Ceci indique une réponse mal formée de la fonction. |
functionBackend.internalServiceError | Erreur de service interne lors de l'appel de la fonction dans OCI Functions |
functionBackend.notFoundOrNotAuthorized | Echec de l'appel de la fonction dans OCI Functions. Cause : 404 à partir du service OCI Functions. |
functionBackend.rateLimited | Taux limité lors de l'appel de la fonction dans OCI Functions |
functionBackend.serviceUnavailable | Service OCI Functions non disponible. |
functionBackend.successfulRequest | Appel de fonction réussi dans OCI Functions |
functionBackend.timeout | L'appel de fonction dans OCI Functions a expiré. |
headerTransformation.badHeaderValue | Valeur incorrecte pour l'en-tête de demande. |
headerTransformation.missingSetValues | Valeur manquante pour la stratégie de transformation définie. |
headerTransformation.protectedHeaderTransformed | La stratégie a tenté de transformer un en-tête protégé. |
httpBackend.formedBackendUrl | L'URL back-end HTTP a été formée dynamiquement à l'aide de variables de contexte. |
httpBackend.requestError | Une erreur est survenue lors de l'envoi de la demande au back-end HTTP. |
httpBackend.requestSent | Demande envoyée au back-end HTTP. |
httpBackend.responseBodyError | Une erreur est survenue lors de la lecture du corps de réponse à partir du back-end HTTP. |
httpBackend.responseReceived | Réponse reçue de la part du back-end HTTP. |
httpBackend.urlInvalid | L'URL de back-end HTTP n'est pas valide. |
jwtAuthentication.authenticationFailed | L'authentification JWT a échoué. |
jwtAuthentication.badJsonWebKeySet | L'ensemble de clés Web JSON n'est pas valide. |
jwtAuthentication.loadingJsonWebKeySet | Chargement de l'ensemble de clés Web JSON. |
jwtAuthentication.successfulAuthentication | L'authentification JWT a été effectuée. |
logoutBackend.invalidAuthentication | Non-concordance du chemin de déconnexion. |
logoutBackend.logoutError | Une erreur est survenue dans le back-end de déconnexion OAuth2. |
logoutBackend.redirectError | L'URL de réacheminement après déconnexion n'était pas autorisée. |
mutualTls.clientCertificateInvalid | Le certificat client était manquant ou non valide. |
mutualTls.clientCertificateSanInvalid | La validation des SAN contenus dans le certificat client a échoué. |
queryParameterTransformation.badParameterValue | Valeur incorrecte pour le paramètre de requête de demande. |
rateLimiting.requestDenied | La demande a été refusée par la stratégie de limitation de débit. |
rateLimiting.requestPermitted | La demande a été autorisée par la stratégie de limitation de débit. |
request.bodyTooLarge | Le corps de la requête était trop grand. |
request.clientCertConversionFailed | Le certificat client n'a pas pu être converti en valeur de chaîne. |
request.clientEof | Une demande n'a pas pu être lue en raison d'une erreur client. |
request.clientTimeout | Une demande n'a pas pu être lue en raison d'un délai d'attente client. |
request.internalServiceError | Erreur interne du service. |
request.loopDetected | Une condition de boucle de demande a été détectée. Les demandes de la passerelle sont alors redirigées vers celle-ci, créant ainsi un cycle. |
request.possibleLoopDetected | Une condition possible de boucle de demande a été détectée. Les demandes de la passerelle sont alors redirigées vers celle-ci, créant ainsi un cycle. |
request.serviceUnavailable | La passerelle ne peut actuellement pas traiter la demande. |
requestValidation.validationError | La validation de la demande a échoué. |
requestValidation.validationPermitted | La demande a réussi une stratégie de validation. |
responseCache.backendResponseStorageAborted | La réponse du back-end n'a pas été stockée dans le cache. |
responseCache.backendResponseStoredInCache | La réponse du back-end a été stockée dans le cache. |
responseCache.lookupAborted | Le cache des réponses n'a pas été utilisé. |
responseCache.lookupResultNotFound | Réponse introuvable dans le cache. |
responseCache.lookupResultSuccess | Une réponse a été lue dans le cache. |
secretsClient.fetchFailure | Echec de l'extraction de la clé secrète client à partir du service de clé secrète. |
secretsClient.fetchSuccess | La clé secrète client a été extraite du service de clé secrète. |
secretsClient.unexpectedResponse | Réponse inattendue du service de clé secrète lors de l'extraction de la clé secrète du client. |
tokenAuthentication.authenticationFailed | Echec de l'authentification du jeton. |
tokenAuthentication.badDiscoveryEndpointResponse | La réponse de l'adresse de repérage distant n'est pas valide. |
tokenAuthentication.badIntrospectionResponse | La réponse d'introspection de jeton n'est pas valide. |
tokenAuthentication.badJsonWebKeySet | L'ensemble de clés Web JSON n'est pas valide. |
tokenAuthentication.loadingDiscoveryEndpointResponse | Chargement du document de repérage distant. |
tokenAuthentication.loadingJsonWebKeySet | Chargement de l'ensemble de clés Web JSON. |
tokenAuthentication.successfulAuthentication | Authentification par jeton réussie. |
usagePlans.eligibleNotEntitled | Le déploiement d'API n'est pas la cible d'une habilitation dans un plan d'utilisation, même si la spécification de déploiement d'API inclut une stratégie de demande de plan d'utilisation qui spécifie un jeton client. |
usagePlans.requestBreachedButAllowed | La demande a été autorisée, même si le nombre maximal de demandes spécifié par une habilitation de plan d'utilisation a été dépassé. |
usagePlans.requestPermitted | La demande d'un abonné au plan d'utilisation a été autorisée. |
usagePlans.requestRejeté | La demande d'un abonné au plan d'utilisation a été rejetée. |
Exemples de journaux d'exécution
- Type : Demande
- Scénario : détection de boucle de demande
- Description : une condition de boucle de demande a été détectée. Les demandes de la passerelle sont alors redirigées vers celle-ci, créant ainsi un cycle.
- Exemple :
{ "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", }