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