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.
functionCode FunctionInvokeSyslogUnavailable Code fourni par OCI Functions pour définir de manière unique l'erreur de la fonction. Ce champ est uniquement présent pour les back-ends de fonction.
functionMessage Adresse Syslog indisponible Message fourni par OCI Functions pour décrire l'erreur de la fonction. Ce champ est uniquement présent pour les back-ends de fonction.
functionStatusCode 502 Code de statut HTTP renvoyé par OCI Functions. Ce champ est uniquement présent pour les back-ends de fonction.
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.

Codes de journal

Code de journal Description Fonctionnalité associée
httpBackend.timeout La demande au back-end HTTP a expiré. Back-end HTTP
httpBackend.dnsResolutionFailed Echec de la résolution de l'URL de back-end HTTP.
httpBackend.sslHandshakeFailed Echec de l'établissement de liaison SSL avec le back-end HTTP.
httpBackend.successfulRequest Demande transmise au back-end HTTP.
httpBackend.responseReceived Réponse reçue de la part du back-end HTTP.
httpBackend.requestSent Demande envoyée au back-end HTTP.
functionBackend.successfulRequest Appel de fonction réussi dans OCI Functions. Back-end des fonctions OCI
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.badGateway "Bad Gateway" reçu lors de l'appel de la fonction dans OCI Functions.
functionBackend.timeout L'appel de la fonction dans OCI Functions a expiré.
functionBackend.internalServiceError Erreur de service interne lors de l'appel de la fonction dans OCI Functions.
specification.badVariableReference La variable de contexte n'a pas pu être résolue. Spécification incorrecte lors de l'exécution
specification.invalidAuthenticationPolicy Stratégie d'authentification non valide.
specification.badTransformationPolicy Stratégie de transformation incorrecte.
specification.badHeaderTransformationPolicy Stratégie de transformation d'en-tête incorrecte.
specification.badQueryParameterTransformationPolicy Stratégie de transformation de paramètre de requête incorrecte.
request.internalServiceError Erreur interne du service. Traitement de la demande
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.headersTruncated Les en-têtes de demande ont été tronqués.
request.queryParametersTruncated Les paramètres de requête de demande ont été tronqués.
authorization.unauthorizedRequest Echec de l'autorisation pour la demande. Autorisation de la demande
authorization.scopeCheckFailed Echec de la vérification de la portée de la demande.
customAuthentication.successfulFunctionInvocation Appel réussi d'Oracle Functions. Authentification personnalisée
customAuthentication.failedFunctionInvocation Echec de l'appel d'Oracle Functions.
customAuthentication.successfulAuthentication L'authentification personnalisée a été effectuée.
customAuthentication.authenticationFailed L'authentification personnalisée a échoué.
customAuthentication.unexpectedResponse Réponse inattendue de la part d'Oracle Functions.
jwtAuthentication.successfulAuthentication L'authentification JWT a été effectuée. Authentification JWT
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.
headerTransformation.badHeaderValue Valeur incorrecte pour l'en-tête de demande. Transformations d'en-tête
headerTransformation.protectedHeaderTransformed La stratégie a tenté de transformer un en-tête protégé.
headerTransformation.protectedElementTransformed La stratégie a tenté de transformer un élément protégé.
headerTransformation.missingSetValues Valeur manquante pour la stratégie de transformation définie.
queryParameterTransformation.badParameterValue Valeur incorrecte pour le paramètre de requête de demande. Transformation de paramètre de requête
queryParameterTransformation.protectedElementTransformed La stratégie a tenté de transformer un élément protégé.
queryParameterTransformation.missingSetValues Valeur manquante pour la stratégie de transformation définie.
requestValidation.validationError La validation de la demande a échoué. Validation de la demande
usagePlans.requestPermitted 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 une habilitation de plan d'utilisation a été dépassé.
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.
dynamicRouting.backendMatched La demande correspondait à une règle back-end et a été acheminée vers le back-end associé. Routage back-end dynamique
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.
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. Sélection du serveur d'authentification dynamique
dynamicAuthentication.authenticationServerMatched La valeur de variable de contexte sélectionnée correspond à l'une des règles du serveur d'authentification.
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é.
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.jwtTokenInvalid 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 La stratégie d'échec de validation n'est pas un type défini. Authentification basée sur les demandes

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