Informations détaillées sur le service de passerelle d'API

Détails de journalisation pour les journaux du service de passerelle d'API.

Ressources

  • Déploiement d'API

Catégories de journaux

Valeur d'API (ID) : Console (Nom d'affichage) Description
Access Access Logs Journaux d'accès pour un déploiement d'API.
Execution Execution Logs Journaux d'exécution pour un déploiement d'API.

Disponibilité

La journalisation d'accès/exécution du service de passerelle d'API est disponible dans toutes les régions des domaines commerciaux.

Journaux d'accès de déploiement d'API

Les journaux d'accès de déploiement d'API enregistrent un sommaire de chaque demande et réponse qui passent par la passerelle d'API, correspondant à une route du déploiement d'API. Chaque entrée d'un journal d'accès contient des informations sur la demande et la réponse (heure de réception de la demande, protocole de serveur, statut de la réponse, etc.). Pour la liste complète des champs, voir 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 du journal. Cette valeur est constituée de données au format JSON avec 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 traitant 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 du client.
opcRequestId FF7F0B8A32246FC7526AE45A2FA8D5CE/

A408784281BF81B0EE23596CE57CA93C/

C06F7DDDFC7C505FAA0566D8F2FE0BB2

Valeur de l'en-tête HTTP opc-request-id ou d'un ID demande généré en interne si aucun n'a été spécifié dans la demande.
remoteAddr 138.1.55.172 Adresse IP du client demandeur.
httpReferrer https://www.example.com URL de la recommandation, le cas échéant.
requestDuration 0.016 Temps total écoulé (en secondes, avec une précision de milliseconde), entre le moment où la passerelle commence à recevoir une demande du client et termine 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 une route individuelle, 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 du journal, code de message, etc.). Pour la liste complète des champs, voir Contenu d'un journal d'exécution.

Contenu d'un journal d'exécution

Par défaut, les informations de niveau de journalisation sont activées. Cette valeur est constituée de données au format JSON avec 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 la liste complète des codes de message, voir le tableau Codes de journal.
gatewayId ocid1.apigateway.oc1.iad.<unique_ID> OCID de la passerelle d'API pour le déploiement d'API traitant la demande.
functionId ocid1.fnfunc.oc1.iad.<unique_ID> OCID de la fonction appelée par la passerelle d'API. Ce champ est présent uniquement pour les fonctions du serveur dorsal.
level WARN Niveau de journal de l'entrée du journal d'exécution : INFO, WARN ou ERROR.
message A request loop has been detected - requests for this gateway are being directed back to this gateway. 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 d'un ID demande généré en interne si aucun n'a été spécifié dans la demande.
configuredLimit 5 Nombre de demandes à autoriser par configuredUnit. Limite de taux ou quota.
configuredUnit MINUTE Période pour laquelle autoriser le nombre de demandes spécifié par configuredLimit. Pour les limites de taux, "SECOND". Pour les quotas, "MINUTE", "DAY", "HOUR", "WEEK" ou "MONTH".
entitlementName Entitlement1 Nom du droit utilisé 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 chambre forte que la passerelle d'API tente d'extraire.
secretVersion 1 Numéro de version d'une clé secrète de chambre forte 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 s'est produite 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 retourné d'expiration valide.
authentication.validationFailurePolicyOAuth La politique d'échec de validation OAuth2 a été déclenchée.
authentication.validationFailurePolicyOAuthStepFailed Une erreur s'est produite lors de l'exécution des étapes de la politique d'échec de validation OAuth2.
authorization.unauthorizedRequest Échec de l'autorisation pour la demande.
customAuthentication.authenticationFailed Échec de l'authentification personnalisée.
customAuthentication.cacheMiss La réponse de l'approbateur personnalisé est introuvable dans la mémoire cache.
customAuthentication.failedFunctionInvocation Échec de l'appel de la fonction d'Oracle Functions.
customAuthentication.successfulAuthentication Authentification personnalisée réussie.
customAuthentication.successfulFunctionInvocation Appel réussi de la fonction d'Oracle Functions.
customAuthentication.unexpectedResponse Réponse inattendue de la fonction d'Oracle Functions.
dynamicAuthentication.authenticationServerMatched<! [CDATA[ ]]> La valeur de la variable de contexte sélectionnée correspond à l'une des règles du serveur d'authentification.
dynamicAuthentication.defaultAuthenticationServerMatched<! [CDATA[ ]]> La valeur de la 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é pour être utilisé pour l'authentification.
dynamicAuthentication.jwtTokenInvalid<! [CDATA[ ]]> 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<! [CDATA[ ]]> La variable de contexte sélectionnée était request.auth[claimName] mais aucun jeton JWT n'a été envoyé avec la demande.
dynamicAuthentication.noAuthenticationServerMatched<! [CDATA[ ]]> La valeur de la 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<! [CDATA[ ]]> La demande correspondait à une règle dorsale et a été acheminée vers l'élément dorsal associé.
dynamicRouting.backendRejected<! [CDATA[ ]]> La demande a échoué, car elle ne correspondait pas à une règle dorsale et aucune règle par défaut n'a été définie.
dynamicRouting.defaultBackendMatched<! [CDATA[ ]]> La demande ne correspondait pas à une règle dorsale. Elle a donc été acheminée vers l'élément dorsal associé à la règle par défaut.
functionBackend.badGateway "Passerelle incorrecte" reçue lors de l'appel de la fonction dans le service des fonctions pour OCI
functionBackend.badRequestHeaderValue Valeur incorrecte pour l'en-tête de demande.
functionBackend.badRequestHeaders En-tête de demande incorrect.
functionBackend.badResponse La fonction a retourné une réponse erronée. Cela indique une réponse incorrecte de la fonction.
functionBackend.internalServiceError Erreur de service interne lors de l'appel de la fonction dans le service des fonctions pour OCI
functionBackend.notFoundOrNotAuthorized Échec de l'appel de la fonction dans le service des fonctions pour OCI. Cause : 404 à partir du service des fonctions pour OCI.
functionBackend.rateLimited Taux limité lors de l'appel de la fonction dans le service des fonctions pour OCI
functionBackend.serviceUnavailable Service du service des fonctions pour OCI non disponible.
functionBackend.successfulRequest Appel de fonction réussi dans le service des fonctions pour OCI
functionBackend.timeout Temporisation de l'appel de la fonction dans le service des fonctions pour OCI.
headerTransformation.badHeaderValue Valeur incorrecte pour l'en-tête de demande.
headerTransformation.missingSetValues Valeur manquante pour la politique de transformation de jeu.
headerTransformation.protectedHeaderTransformed La politique a tenté de transformer un en-tête protégé.
httpBackend.formedBackendUrl L'URL dorsale HTTP a été formée dynamiquement à l'aide de variables de contexte.
httpBackend.requestError Une erreur s'est produite lors de l'envoi de la demande au serveur dorsal HTTP.
httpBackend.requestSent Demande envoyée au serveur dorsal HTTP.
httpBackend.responseBodyError Une erreur s'est produite lors de la lecture du corps de la réponse à partir du serveur dorsal HTTP.
httpBackend.responseReceived Réponse reçue du serveur dorsal HTTP.
httpBackend.urlInvalid L'URL dorsale HTTP n'est pas valide.
jwtAuthentication.authenticationFailed Échec de l'authentification JWT.
jwtAuthentication.badJsonWebKeySet Jeu de clés Web JSON non valide.
jwtAuthentication.loadingJsonWebKeySet Chargement du jeu de clés Web JSON.
jwtAuthentication.successfulAuthentication Authentification JWT réussie.
logoutBackend.invalidAuthentication Non-concordance du chemin de déconnexion.
logoutBackend.logoutError Une erreur est survenue dans le serveur dorsal de déconnexion OAuth2.
logoutBackend.redirectError L'URL de redirection après déconnexion n'était pas autorisée.
mutualTls.clientCertificateInvalid Le certificat du client était manquant ou non valide.
mutualTls.clientCertificateSanInvalid Échec de la validation des SAN contenus dans le certificat client.
queryParameterTransformation.badParameterValue Valeur incorrecte pour le paramètre d'interrogation de demande.
rateLimiting.requestDenied La demande a été refusée par la politique de limitation de débit.
rateLimiting.requestPermitted La demande a été autorisée par la politique de limitation de débit.
request.bodyTooLarge Le corps de la demande était trop volumineux.
request.clientCertConversionFailed Le certificat client n'a pas pu être converti en valeur de chaîne.
request.clientEof Impossible de lire une demande en raison d'une erreur de client.
request.clientTimeout Impossible de lire une demande en raison d'une temporisation du client.
request.internalServiceError Erreur de service interne.
request.loopDetected Une condition de boucle de demande a été détectée, entraînant le réacheminement des demandes de la passerelle vers elle-même en créant un cycle.
request.possibleLoopDetected Une condition possible de boucle de demande a été détectée, entraînant le réacheminement des demandes de la passerelle vers elle-même en créant un cycle.
request.serviceUnavailable La passerelle ne peut actuellement pas traiter la demande.
requestValidation.validationError La demande a échoué à une politique de validation.
requestValidation.validationPermitted La demande a réussi une politique de validation.
responseCache.backendResponseStorageAborted La réponse du serveur dorsal n'a pas été stockée dans la mémoire cache.
responseCache.backendResponseStoredInCache La réponse du serveur dorsal a été stockée dans la mémoire cache.
responseCache.lookupAborted Le cache de réponses n'a pas été utilisé.
responseCache.lookupResultNotFound Réponse introuvable dans la mémoire cache.
responseCache.lookupResultSuccess Une réponse a été lue à partir du cache.
secretsClient.fetchFailure Échec 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 client.
tokenAuthentication.authenticationFailed Échec de l'authentification par jeton.
tokenAuthentication.badDiscoveryEndpointResponse La réponse du point d'extrémité de détection distant n'est pas valide.
tokenAuthentication.badIntrospectionResponse La réponse d'introspection de jeton n'est pas valide.
tokenAuthentication.badJsonWebKeySet Jeu de clés Web JSON non valide.
tokenAuthentication.loadingDiscoveryEndpointResponse Chargement du document de détection à distance.
tokenAuthentication.loadingJsonWebKeySet Chargement du jeu 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'un droit dans aucun plan d'utilisation, même si la spécification de déploiement d'API inclut une politique 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 un droit de plan d'utilisation a été dépassé.
usagePlans.requestPermis 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.

Exemple de journal d'exécution

  • Type : Demande
  • Scénario : Boucle de demande détectée
  • Description : Une condition de boucle de demande a été détectée, entraînant le réacheminement des demandes de la passerelle vers elle-même en créant 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",
     }