Detalles del gateway de API
Detalles de registro para logs de gateway de API.
Recursos
- Despliegue de la API
Categorías de log
Valor de API (ID): | Consola (nombre mostrado) | Descripción |
---|---|---|
Acceso | Logs de acceso | Logs de acceso para un despliegue de API. |
Ejecución | Logs de ejecución | Logs de ejecución para un despliegue de API. |
Disponibilidad
El registro de acceso/ ejecución del gateway de API está disponible en todas las regiones de los dominios comerciales.
Log de acceso de despliegue de API
Los logs de acceso de despliegue de API registran un resumen de todas las solicitudes y respuestas que pasan por el gateway de API y coinciden con una ruta en el despliegue de API. Cada entrada del log de acceso contiene información sobre la solicitud y la respuesta (hora a la que se recibió la solicitud, protocolo del servidor, estado de la respuesta, etc.). Para obtener la lista completa de campos, consulte Contenido de un log de acceso.
Contenido de un log de acceso
Los logs de acceso aparecen como un valor en el campo Datos de log. Este valor son datos con formato JSON con los siguientes campos:
Campo | Ejemplo | Descripción |
---|---|---|
httpMethod | GET | Método HTTP derivado de la línea de solicitud. |
requestUri | /example/ | URI de solicitud derivado de la línea de solicitud. |
serverProtocol | HTTP/1.1 | Protocolo HTTP derivado de la línea de solicitud. |
bodyBytesSent | 45 | Tamaño total de la respuesta (en bytes) enviada al cliente. |
gatewayId | ocid1.apigateway.oc1.iad.<unique_ID> | OCID del gateway de API para el despliegue de API que sirve a la solicitud. |
httpUserAgent | Apache-HttpClient/4.5.9 (Java/1.8.0_252) | Agente de usuario HTTP para la solicitud. |
message | GET /example/ HTTP/1.1 | Línea de solicitud recibida del cliente. |
opcRequestId | FF7F0B8A32246FC7526AE45A2FA8D5CE/ A408784281BF81B0EE23596CE57CA93C/ C06F7DDDFC7C505FAA0566D8F2FE0BB2 |
Valor de la cabecera HTTP opc-request-id o un identificador de solicitud generado internamente si no se ha especificado ninguno en la solicitud. |
remoteAddr | 138.1.55.172 | Dirección IP del cliente de solicitud |
httpReferrer | https://www.example.com | Dirección URL de la referencia, si está presente. |
requestDuration | 0.016 | Tiempo total (en segundos, con precisión de milisegundos), desde el momento en que el gateway empieza a recibir la solicitud del cliente hasta completa el envío de una respuesta al cliente. |
status | 404 | Código de estado de la respuesta del gateway. |
Log de acceso de ejemplo
{
"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
}
Log de ejecución de despliegue de API
Los logs de ejecución de despliegue de API registran información sobre el procesamiento en el gateway de API para una ruta individual, con el fin de ayudar con la solución de problemas y la supervisión. Cada entrada del log de ejecución contiene información (hora a la que se recibió la solicitud, nivel para indicar la gravedad del mensaje de log, un código de mensaje, etc.). Para obtener la lista completa de campos, consulte Contenido de un log de ejecución.
Contenido de un log de ejecución
Por defecto, la información de nivel de log está activada. Este valor son datos con formato JSON con los siguientes campos:
Campo | Ejemplo | Descripción |
---|---|---|
code | request.loopDetected | Código corto del evento de registro detectado durante la ejecución de la solicitud. Para obtener la lista completa de códigos de mensaje, consulte la tabla "Códigos de log" Códigos de log. |
gatewayId | ocid1.apigateway.oc1.iad.<unique_ID> | OCID de gateway de API para el despliegue de API que sirve a la solicitud. |
functionId | ocid1.fnfunc.oc1.iad.<unique_ID> | OCID de la función que ha llamado el gateway de API. Este campo solo está presente para backends de función. |
level | WARN | Nivel de log para la entrada del log de ejecución, ya sea INFO, WARN o ERROR. |
message | A request loop has been detected - requests for this gateway are being directed back to this gateway. | Mensaje de ejecución emitido durante el procesamiento de la solicitud. |
opcRequestId | FF7F0B8A32246FC7526AE45A2FA8D5CE/ A408784281BF81B0EE23596CE57CA93C/ C06F7DDDFC7C505FAA0566D8F2FE0BB2 |
Valor de la cabecera HTTP opc-request-id o un identificador de solicitud generado internamente si no se ha especificado ninguno en la solicitud. |
configuredLimit | 5 | Número de solicitudes que se permiten por configuredUnit. El límite de cuota o la cuota. |
configuredUnit | MINUTO | Período en el que se permite el número de solicitudes especificado por configuredLimit. Para los límites de tipo, "SEGUNIO". Para la cuota, "MINUTE", "DAY", "HOUR", "WEEK" o "MONTH". |
entitlementName | Entitlement1 | Nombre del derecho que utiliza la solicitud para acceder al despliegue de API. |
limitingKey | <registro de hora>/ocid1.apigatewayusageplan.oc1.iad.<unique_ID>/<nombre de entidad>/ocid1.apigatewaysubscriber.oc1.iad.<unique_ID> | Para calcular el uso a efectos de límite de cuota y cuota, las solicitudes con la misma clave se cuentan juntas. |
limitingResourceId | ocid1.apigatewayusageplan.oc1.iad.<unique_ID> | OCID del plan de uso utilizado para acceder al despliegue de API. |
limitingResourceName | Plan de uso de oro | Nombre del plan de uso utilizado para acceder al despliegue de API. |
secretId | ocid1.secret.oc1.iad.<unique_ID> | OCID de un secreto de almacén que el gateway de API está intentando recuperar. |
secretVersion | 1 | Número de versión de un secreto de almacén que el gateway de API está intentando recuperar. |
subscriberId | ocid1.apigatewaysubscriber.oc1.iad.<unique_ID> | OCID del suscriptor. |
subscriberName | Suscriptor de prima | Nombre mostrado del suscriptor. |
Códigos de log
Código de log | Descripción |
---|---|
authentication.idpCallFailed | Se ha producido un error al llamar al proveedor de identidad OAuth2. |
authentication.idpCallSuccess | Se ha llamado correctamente al proveedor de identidad OAuth2. |
authentication.idpTokenExpiryNonNumeric | El proveedor de identidad OAuth2 no ha devuelto una caducidad válida. |
authentication.validationFailurePolicyOAuth | Se ha disparado la política de fallo de validación OAuth2. |
authentication.validationFailurePolicyOAuthStepFailed | Se ha producido un error al realizar los pasos de la política de fallo de validación OAuth2. |
author.unauthorizedRequest | Fallo de autorización de la solicitud. |
customAuthentication.authenticationFailed | Fallo de autenticación personalizada. |
customAuthentication.cacheMiss | No se ha encontrado la respuesta del autorizador personalizado en la caché. |
customAuthentication.failedFunctionInvocation | Fallo al llamar a la función de Oracle. |
customAuthentication.successfulAuthentication | La autenticación personalizada se ha realizado correctamente. |
customAuthentication.successfulFunctionInvocation | Se ha llamado correctamente a la función de Oracle. |
customAuthentication.unexpectedResponse | Respuesta inesperada de la función de Oracle. |
dynamicAuthentication.authenticationServerMatched (Fin de creación) | El valor de variable de contexto seleccionado coincide con una de las reglas del servidor de autenticación. |
dynamicAuthentication.defaultAuthenticationServerMatched (Fin de creación) | El valor de variable de contexto seleccionado no coincide con ninguna de las reglas del servidor de autenticación, pero se ha especificado un servidor de autenticación por defecto que se ha utilizado para la autenticación. |
dynamicAuthentication.jwtTokenInvalid (Fin de creación) | La variable de contexto seleccionada era request.auth[claimName], pero se envió un token de JWT no válido con la solicitud. |
dynamicAuthentication.jwtTokenNotFound (Fin de creación) | La variable de contexto seleccionada es request.auth[claimName], pero no se ha enviado ningún token de JWT con la solicitud. |
dynamicAuthentication.noAuthenticationServerMatched (Fin de creación) | El valor de variable de contexto seleccionado no coincide con ninguna de las reglas del servidor de autenticación y no se ha especificado ningún servidor de autenticación por defecto. |
dynamicRouting.backendMatched (Fin de creación) | La solicitud coincidió con una regla de backend y se enrutó al backend asociado. |
dynamicRouting.backendRejected (Fin de creación) | Se produjo un fallo en la solicitud porque la solicitud no coincide con una regla de backend y no se definió ninguna regla por defecto. |
dynamicRouting.defaultBackendMatched (Fin de creación) | La solicitud no coincide con una regla de backend, por lo que se ha direccionado al backend asociado a la regla por defecto. |
functionBackend.badGateway | Se ha recibido "Bad Gateway" al llamar a la función en OCI Functions |
functionBackend.badRequestHeaderValue | Valor incorrecto para la cabecera de solicitud. |
functionBackend.badRequestHeaders | Cabecera de solicitud incorrecta. |
functionBackend.badResponse | La función devolvió una respuesta defectuosa. Esto indica una respuesta incorrecta formada de la función. |
functionBackend.internalServiceError | Error de servicio interno al llamar a la función en OCI Functions |
functionBackend.notFoundOrNotAuthorized | Fallo al llamar a la función en OCI Functions debido a 404 del servicio OCI Functions. |
functionBackend.rateLimited | Ratio limitado al llamar a la función en OCI Functions |
functionBackend.serviceUnavailable | Servicio OCI Functions no disponible. |
functionBackend.successfulRequest | Llamada correcta de la función en OCI Functions |
functionBackend.timeout | Timeout de llamada de función en OCI Functions. |
headerTransformation.badHeaderValue | Valor incorrecto para la cabecera de solicitud. |
headerTransformation.missingSetValues | Falta un valor para la política de transformación definida. |
headerTransformation.protectedHeaderTransformed | La política ha intentado transformar una cabecera protegida. |
httpBackend.formedBackendUrl | La URL de backend HTTP se ha formado dinámicamente mediante variables de contexto. |
httpBackend.requestError | Se ha producido un error al realizar la solicitud al backend HTTP. |
httpBackend.requestSent | Solicitud enviada al backend HTTP. |
httpBackend.responseBodyError | Se ha producido un error al leer el cuerpo de respuesta del backend HTTP. |
httpBackend.responseReceived | Respuesta recibida del backend HTTP. |
httpBackend.urlInvalid | La URL de backend HTTP no es válida. |
jwtAuthentication.authenticationFailed | Fallo de autenticación de JWT. |
jwtAuthentication.badJsonWebKeySet | El juego de claves web JSON no es válido. |
jwtAuthentication.loadingJsonWebKeySet | Se está cargando el juego de claves web JSON. |
jwtAuthentication.successfulAuthentication | La autenticación de JWT se ha realizado correctamente. |
logoutBackend.invalidAuthentication | La ruta de desconexión no coincide. |
logoutBackend.logoutError | Se ha producido un error en el backend de desconexión OAuth2. |
logoutBackend.redirectError | No se permite la URL de redirección posterior a la desconexión. |
mutualTls.clientCertificateInvalid | Falta el certificado de cliente o no es válido. |
mutualTls.clientCertificateSanInvalid | Falló la validación de las SAN incluidas en el certificado de cliente. |
queryParameterTransformation.badParameterValue | Valor incorrecto para el parámetro de consulta de solicitud. |
rateLimiting.requestDenied | La política de limitación de frecuencia ha denegado la solicitud. |
rateLimiting.requestPermitted | La política de limitación de frecuencia permitió la solicitud. |
request.bodyTooLarge | El cuerpo de la solicitud era demasiado grande. |
request.clientCertConversionFailed | El certificado de cliente no se ha podido convertir en un valor de cadena. |
request.clientEof | No se pudo leer una solicitud debido a un error del cliente. |
request.clientTimeout | No se pudo leer una solicitud debido al timeout del cliente. |
request.internalServiceError | Error interno del servicio. |
request.loopDetected | Se ha detectado una condición de bucle de solicitud, en la que las solicitudes para el gateway se redireccionan a sí mismas creando un ciclo. |
request.possibleLoopDetected | Se ha detectado una posible condición de bucle de solicitud, en la que las solicitudes para el gateway se redireccionan a sí mismas creando un ciclo. |
request.serviceUnavailable | La puerta de enlace no puede actualmente dar servicio a la solicitud. |
requestValidation.validationError | La solicitud ha fallado en una política de validación. |
requestValidation.validationPermitted | La solicitud ha pasado una política de validación. |
responseCache.backendResponseStorageAborted | La respuesta de backend no se ha almacenado en la caché. |
responseCache.backendResponseStoredInCache | La respuesta de backend se ha almacenado en la caché. |
responseCache.lookupAborted | No se ha utilizado la caché de respuesta. |
responseCache.lookupResultNotFound | No se ha encontrado una respuesta en la caché. |
responseCache.lookupResultSuccess | Se ha leído una respuesta de la caché. |
secretsClient.fetchFailure | Fallo al recuperar el secreto de cliente del servicio de secretos. |
secretsClient.fetchSuccess | Se ha recuperado correctamente el secreto de cliente del servicio de secretos. |
secretsClient.unexpectedResponse | Respuesta inesperada del servicio de secretos al recuperar el secreto de cliente. |
tokenAuthentication.authenticationFailed | Fallo de autenticación del token. |
tokenAuthentication.badDiscoveryEndpointResponse | La respuesta de punto final de detección remota no es válida. |
tokenAuthentication.badIntrospectionResponse | La respuesta de introspección de token no es válida. |
tokenAuthentication.badJsonWebKeySet | El juego de claves web JSON no es válido. |
tokenAuthentication.loadingDiscoveryEndpointResponse | Cargando el documento de detección remota. |
tokenAuthentication.loadingJsonWebKeySet | Se está cargando el juego de claves web JSON. |
tokenAuthentication.successfulAuthentication | Autenticación de token correcta. |
usePlans.eligibleNotEntitled | El despliegue de API no es el destino de un derecho en ningún plan de uso, aunque la especificación de despliegue de API incluya una política de solicitud de plan de uso que especifique un token de cliente. |
usePlans.requestBreachedButAllowed | Se permitió la solicitud, aunque se excedió el número máximo de solicitudes especificado por un derecho de plan de uso. |
usePlans.requestPermitted | Se permitió la solicitud de un suscriptor del plan de uso. |
usePlans.requestReject | Se rechazó la solicitud de un suscriptor de plan de uso. |
Logs de ejecución de ejemplo
- Tipo: solicitud
- Escenario: bucle de solicitud detectado
- Descripción: se ha detectado una condición de bucle de solicitud, en la que las solicitudes para el gateway se redireccionan a sí mismas creando un ciclo.
- Ejemplo:
{ "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", }