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",
     }