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.
functionCode FunctionInvokeSyslogUnavailable Code fourni par le service des fonctions pour OCI pour définir de manière unique l'erreur de la fonction. Ce champ est présent uniquement pour les fonctions du serveur dorsal.
functionMessage Syslog endpoint unavailable Message fourni par le service des fonctions pour OCI pour décrire l'erreur de la fonction. Ce champ est présent uniquement pour les fonctions du serveur dorsal.
functionStatusCode 502 Code de statut HTTP retourné par le service des fonctions pour OCI. Ce champ est présent uniquement pour les fonctions du serveur dorsal.
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.

Codes de journal

Code de journal Description Fonction connexe
httpBackend.timeout La demande au serveur dorsal HTTP a expiré. Serveur dorsal HTTP
httpBackend.dnsResolutionFailed Échec de la résolution de l'URL du serveur dorsal HTTP.
httpBackend.sslHandshakeFailed Échec de l'établissement d'une liaison SSL avec le serveur dorsal HTTP.
httpBackend.successfulRequest Demande réussie au serveur dorsal HTTP.
httpBackend.responseReceived Réponse reçue du serveur dorsal HTTP.
httpBackend.requestSent Demande envoyée au serveur dorsal HTTP.
functionBackend.successfulRequest Appel de fonction réussi dans le service des fonctions pour OCI. Service dorsal du 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.badGateway Réception d'une "passerelle incorrecte" lors de l'appel de la fonction dans le service des fonctions pour OCI.
functionBackend.timeout Appel de fonction dans OCI Functionstimed out.
functionBackend.internalServiceError Erreur de service interne lors de l'appel de la fonction dans le service des fonctions pour OCI.
specification.badVariableReference Impossible de résoudre la variable de contexte. Spécification incorrecte à l'exécution
specification.invalidAuthenticationPolicy Politique d'authentification non valide.
specification.badTransformationPolicy Politique de transformation incorrecte.
specification.badHeaderTransformationPolicy Politique de transformation d'en-tête incorrecte.
specification.badQueryParameterTransformationPolicy Politique de transformation de paramètre d'interrogation incorrecte.
request.internalServiceError Erreur de service interne. Traitement de demande
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.headersTruncated Les en-têtes de demande ont été tronqués.
request.queryParametersTruncated Les paramètres d'interrogation de demande ont été tronqués.
authorization.unauthorizedRequest Échec de l'autorisation pour la demande. Autorisation de demande
authorization.scopeCheckFailed Échec de la vérification de la portée de la demande.
customAuthentication.successfulFunctionInvocation Appel réussi de la fonction d'Oracle Functions. Authentification personnalisée
customAuthentication.failedFunctionInvocation Échec de l'appel de la fonction d'Oracle Functions.
customAuthentication.successfulAuthentication Authentification personnalisée réussie.
customAuthentication.authenticationFailed Échec de l'authentification personnalisée.
customAuthentication.unexpectedResponse Réponse inattendue de la fonction d'Oracle Functions.
jwtAuthentication.successfulAuthentication Authentification JWT réussie. Authentification JWT
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.
headerTransformation.badHeaderValue Valeur incorrecte pour l'en-tête de demande. Transformation d'en-tête
headerTransformation.protectedHeaderTransformed La politique a tenté de transformer un en-tête protégé.
headerTransformation.protectedElementTransformed La politique a tenté de transformer un élément protégé.
headerTransformation.missingSetValues Valeur manquante pour la politique de transformation de jeu.
queryParameterTransformation.badParameterValue Valeur incorrecte pour le paramètre d'interrogation de demande. Transformations de paramètre d'interrogation
queryParameterTransformation.protectedElementTransformed La politique a tenté de transformer un élément protégé.
queryParameterTransformation.missingSetValues Valeur manquante pour la politique de transformation de jeu.
requestValidation.validationError La demande a échoué à une politique de validation. Validation de demande
usagePlans.requestPermis La demande d'un abonné au plan d'utilisation a été autorisée. Plans d'utilisation
usagePlans.requestRejeté La demande d'un abonné au plan d'utilisation a été rejetée.
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.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.
dynamicRouting.backendMatched<! [CDATA[ ]]> La demande correspondait à une règle dorsale et a été acheminée vers l'élément dorsal associé. Acheminement dorsal dynamique
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.
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. Sélection du serveur d'authentification dynamique
dynamicAuthentication.authenticationServerMatched<! [CDATA[ ]]> La valeur de la variable de contexte sélectionnée correspond à l'une des règles du serveur d'authentification.
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é.
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.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.
authentication.validationFailurePolicyInvalid<! [CDATA[ ]]> Le type de la politique d'échec de validation n'est pas défini. Authentification basée sur une demande

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