Detalhes do Serviço API Gateway
Detalhes de log para logs do API Gateway.
Recursos
- Implantação da API
Categoria de Log
| Valor da API (ID): | Console (Nome para Exibição) | Descrição | 
|---|---|---|
| Acesso | Logs de Acesso | Logs de acesso para uma implantação de API. | 
| Execução | Logs de Execução | Logs de execução para uma implantação de API. | 
Disponibilidade
O log de Acesso/Execução do serviço API Gateway está disponível em todas as regiões dos realms comerciais.
Log de Acesso à Implantação de API
Os logs de acesso de implantação de API registram um resumo de cada solicitação e resposta que passa pelo gateway de API, correspondendo a uma rota na implantação de API. Cada entrada do log de acesso contém informações sobre a solicitação e a resposta (hora em que a solicitação foi recebida, o protocolo do servidor, o status da resposta e assim por diante). Para obter a lista completa de campos, consulte Conteúdo de um Log de Acesso.
Conteúdo de um Log de Acesso
Os logs de acesso aparecem como um valor no campo Dados de Log. Este valor corresponde a dados formatados em JSON com os seguintes campos:
| Campo | Exemplo | Descrição | 
|---|---|---|
| httpMethod | GET | Método HTTP derivado da linha de solicitação. | 
| requestUri | /exemplo/ | URI da solicitação derivado da linha da solicitação. | 
| serverProtocol | HTTP/1.1 | Protocolo HTTP derivado da linha de solicitação. | 
| bodyBytesSent | 45 | Tamanho total da resposta (em bytes) enviada para o cliente. | 
| gatewayId | ocid1.apigateway.oc1.iad.<unique_ID> | OCID do serviço API Gateway para a implantação de API que atende à solicitação. | 
| httpUserAgent | Apache-HttpClient/4.5.9 (Java/1.8.0_252) | Agente do usuário HTTP da solicitação. | 
| message | GET /exemplo/ HTTP/1.1 | Linha de solicitação recebida do cliente. | 
| opcRequestId | FF7F0B8A32246FC7526AE45A2FA8D5CE/ A408784281BF81B0EE23596CE57CA93C/ C06F7DDDFC7C505FAA0566D8F2FE0BB2 | Valor do cabeçalho HTTP opc-request-id ou um ID de solicitação gerado internamente se nenhum for especificado na solicitação. | 
| remoteAddr | 138.1.55.172 | Endereço IP do cliente solicitante. | 
| httpReferrer | https://www.example.com | O URL da referência, se presente. | 
| requestDuration | 0.016 | Tempo total gasto (em segundos, com precisão de milissegundo), a partir do momento em que o gateway começa a receber a solicitação do cliente, até que ele conclua o envio de uma resposta ao cliente. | 
| status | 404 | Código de status da resposta do gateway. | 
Log de Acesso de Amostra
{
    "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 Execução de Implantação de API
Os logs de execução de implantação de API registram informações sobre processamento no gateway de API para uma rota individual, a fim de ajudar na solução de problemas e no monitoramento. Cada entrada do log de execução contém informações (hora em que a solicitação foi recebida, nível para denotar a severidade da mensagem de log, um código de mensagem e assim por diante). Para obter a lista completa de campos, consulte Conteúdo de um Log de Execução.
Conteúdo de um Log de Execução
Por padrão, as informações de Nível de Log estão ativadas. Este valor corresponde a dados formatados em JSON com os seguintes campos:
| Campo | Exemplo | Descrição | 
|---|---|---|
| code | request.loopDetected | Código curto para o evento de registro em log encontrado durante a execução da solicitação. Para obter a lista completa de códigos de mensagem, consulte a tabela "Códigos de Log" Códigos de Log. | 
| gatewayId | ocid1.apigateway.oc1.iad.<unique_ID> | OCID do gateway de API para a implantação de API que atende à solicitação. | 
| functionId | ocid1.fnfunc.oc1.iad.<unique_ID> | OCID da função que o gateway de API chamou. Esse campo só está presente para backends de função. | 
| level | WARN | Nível de log para a entrada do log de execução, seja INFO, WARN ou ERROR. | 
| message | A request loop has been detected - requests for this gateway are being directed back to this gateway. | Mensagem de execução emitida durante o processamento da solicitação. | 
| opcRequestId | FF7F0B8A32246FC7526AE45A2FA8D5CE/ A408784281BF81B0EE23596CE57CA93C/ C06F7DDDFC7C505FAA0566D8F2FE0BB2 | Valor do cabeçalho HTTP opc-request-id ou um ID de solicitação gerado internamente se nenhum for especificado na solicitação. | 
| configuredLimit | 5 | Número de solicitações a serem permitidas por configuredUnit. O limite de taxa ou a cota. | 
| configuredUnit | MINUTO | Período para permitir o número de solicitações especificadas por configuredLimit. Para limites de taxa, "SECOND". Para cota, "MINUTE", "DAY", "HOUR", "WEEK" ou "MONTH". | 
| entitlementName | Entitlement1 | Nome do direito que a solicitação está usando para acessar a implantação de API. | 
| limitingKey | <timestamp>/ocid1.apigatewayusageplan.oc1.iad.<unique_ID>/<nome do elemento>/ocid1.apigatewaysubscriber.oc1.iad.<unique_ID> | Para calcular o uso para fins de limite de taxa e cota, as solicitações com a mesma chave são contadas juntas. | 
| limitingResourceId | ocid1.apigatewayusageplan.oc1.iad.<unique_ID> | OCID do plano de uso usado para acessar a implantação de API. | 
| limitingResourceName | Ouro-Uso-Plano | Nome do plano de uso usado para acessar a implantação de API. | 
| secretId | ocid1.secret.oc1.Iad.<unique_ID> | OCID de um segredo do vault que o gateway de API está tentando recuperar. | 
| secretVersion | 1 | Número da versão de um segredo do vault que o gateway de API está tentando recuperar. | 
| subscriberId | ocid1.apigatewaysubscriber.oc1.Iad.<unique_ID> | OCID do assinante. | 
| subscriberName | Prêmio-assinante | Nome de exibição do assinante. | 
Códigos de Log
| Código de Log | Descrição | 
|---|---|
| authentication.idpCallFailed | Ocorreu um erro ao chamar o Provedor de Identidades OAuth2. | 
| authentication.idpCallSuccess | O Provedor de Identidades OAuth2 foi chamado com sucesso. | 
| authentication.idpTokenExpiryNonNumeric | O Provedor de Identidades OAuth2 não retornou uma expiração válida. | 
| authentication.validationFailurePolicyOAuth | A Política de Falha de Validação OAuth2 foi acionada. | 
| authentication.validationFailurePolicyOAuthStepFailed | Ocorreu um erro ao executar as etapas da Política de Falha de Validação OAuth2. | 
| authorization.unauthorizedRequest | Falha na autorização para a solicitação. | 
| customAuthentication.authenticationFailed | Falha de Autenticação Personalizada. | 
| customAuthentication.cacheMiss | A resposta do autorizador personalizado não foi encontrada no cache. | 
| customAuthentication.failedFunctionInvocation | Falha ao chamar o Oracle Functions. | 
| customAuthentication.successfulAuthentication | Autenticação Personalizada bem-sucedida. | 
| customAuthentication.successfulFunctionInvocation | Oracle Functions chamado com sucesso. | 
| customAuthentication.unexpectedResponse | Resposta inesperada do Oracle Functions. | 
| dynamicAuthentication.authenticationServerMatched | O valor da variável de contexto selecionada correspondeu a uma das regras do servidor de autenticação. | 
| dynamicAuthentication.defaultAuthenticationServerMatched | O valor da variável de contexto selecionada não corresponde a nenhuma das regras do servidor de autenticação, mas um servidor de autenticação padrão foi especificado para que fosse usado para autenticação. | 
| dynamicAuthentication.jwtTokenInvalid | A variável de contexto selecionada era request.auth[claimName], mas um token JWT inválido foi enviado com a solicitação. | 
| dynamicAuthentication.jwtTokenNotFound | A variável de contexto selecionada era request.auth[claimName], mas nenhum token JWT foi enviado com a solicitação. | 
| dynamicAuthentication.noAuthenticationServerMatched | O valor da variável de contexto selecionada não corresponde a nenhuma das regras do servidor de autenticação e nenhum servidor de autenticação padrão foi especificado. | 
| dynamicRouting.backendMatched | A solicitação correspondeu a uma regra de back-end e foi roteada para o back-end associado. | 
| dynamicRouting.backendRejected | A solicitação falhou porque a solicitação não correspondeu a uma regra de backend e nenhuma regra padrão foi definida. | 
| dynamicRouting.defaultBackendMatched | A solicitação não correspondeu a uma regra de backend e, portanto, foi roteada para o backend associado à regra padrão. | 
| functionBackend.badGateway | Recebido o "Bad Gateway" ao chamar a função no OCI Functions | 
| functionBackend.badRequestHeaderValue | Valor inválido para o cabeçalho da solicitação. | 
| functionBackend.badRequestHeaders | Cabeçalho de solicitação inválido. | 
| functionBackend.badResponse | A função retornou uma resposta incorreta. Isso indica uma resposta formada inadequada da função. | 
| functionBackend.internalServiceError | Erro de serviço interno ao chamar a função no OCI Functions | 
| functionBackend.notFoundOrNotAuthorized | Falha ao chamar a função no OCI Functions em decorrência de 404 do serviço OCI Functions. | 
| functionBackend.rateLimited | Taxa limitada ao chamar a função no OCI Functions | 
| functionBackend.serviceUnavailable | Serviço do OCI Functions indisponível. | 
| functionBackend.successfulRequest | Chamada bem-sucedida de função no OCI Functions | 
| functionBackend.timeout | A chamada de função no OCI Functions atingiu o tempo limite. | 
| headerTransformation.badHeaderValue | Valor inválido para o cabeçalho da solicitação. | 
| headerTransformation.missingSetValues | Valor ausente para a política de transformação de conjunto. | 
| headerTransformation.protectedHeaderTransformed | A política tentou transformar um cabeçalho protegido. | 
| httpBackend.formedBackendUrl | O URL de backend HTTP foi formado dinamicamente usando variáveis de contexto. | 
| httpBackend.requestError | Ocorreu um erro ao fazer a solicitação para o backend HTTP. | 
| httpBackend.requestSent | Solicitação enviada para o backend HTTP. | 
| httpBackend.responseBodyError | Erro ao ler o corpo da resposta do backend HTTP. | 
| httpBackend.responseReceived | Resposta recebida do backend HTTP. | 
| httpBackend.urlInvalid | O URL do backend HTTP não é válido. | 
| jwtAuthentication.authenticationFailed | Falha na Autenticação JWT. | 
| jwtAuthentication.badJsonWebKeySet | O JSON Web Key Set não é válido. | 
| jwtAuthentication.loadingJsonWebKeySet | Carregando o JSON Web Key Set. | 
| jwtAuthentication.successfulAuthentication | Autenticação JWT bem-sucedida. | 
| logoutBackend.invalidAuthentication | Incompatibilidade de caminho de logout. | 
| logoutBackend.logoutError | Erro no Backend de Log-out do OAuth2. | 
| logoutBackend.redirectError | O URL de redirecionamento pós-log-out não foi permitido. | 
| mutualTls.clientCertificateInvalid | O certificado do cliente estava ausente ou era inválido. | 
| mutualTls.clientCertificateSanInvalid | As SANs contidas no certificado do cliente falharam na validação. | 
| queryParameterTransformation.badParameterValue | Valor inválido para o parâmetro de consulta da solicitação. | 
| rateLimiting.requestDenied | A solicitação foi negada pela política de limitação de taxa. | 
| rateLimiting.requestPermitted | A solicitação foi permitida pela política de limitação de taxa. | 
| request.bodyTooLarge | O corpo da solicitação era muito grande. | 
| request.clientCertConversionFailed | O certificado do cliente não pôde ser convertido em um valor de string. | 
| request.clientEof | Não foi possível ler uma solicitação devido a um erro do cliente. | 
| request.clientTimeout | Não foi possível ler uma solicitação devido a um timeout do cliente. | 
| request.internalServiceError | Erro de serviço interno. | 
| request.loopDetected | Foi detectada uma condição de loop de solicitação, pela qual as solicitações do gateway estão sendo redirecionadas para ele mesmo, criando um ciclo. | 
| request.possibleLoopDetected | Foi detectada uma possível condição de loop de solicitação, pela qual as solicitações do gateway estão sendo redirecionadas para ele mesmo, criando um ciclo. | 
| request.serviceUnavailable | No momento, o gateway não pode atender à solicitação. | 
| requestValidation.validationError | Falha na solicitação de uma política de validação. | 
| requestValidation.validationPermitted | A solicitação passou em uma política de validação. | 
| responseCache.backendResponseStorageAborted | A resposta de back-end não foi armazenada no cache. | 
| responseCache.backendResponseStoredInCache | A resposta de back-end foi armazenada no cache. | 
| responseCache.lookupAborted | O cache de resposta não foi usado. | 
| responseCache.lookupResultNotFound | Não foi encontrada uma resposta no cache. | 
| responseCache.lookupResultSuccess | Uma resposta foi lida no cache. | 
| secretsClient.fetchFailure | Falha ao extrair o segredo do cliente do serviço de segredo. | 
| secretsClient.fetchSuccess | Segredo do cliente extraído com sucesso do serviço secreto. | 
| secretsClient.unexpectedResponse | Resposta inesperada do serviço de segredo ao extrair o segredo do cliente. | 
| tokenAuthentication.authenticationFailed | Falha na autenticação do token. | 
| tokenAuthentication.badDiscoveryEndpointResponse | A resposta do ponto final de descoberta remota não é válida. | 
| tokenAuthentication.badIntrospectionResponse | A resposta de introspecção de token não é válida. | 
| tokenAuthentication.badJsonWebKeySet | O JSON Web Key Set não é válido. | 
| tokenAuthentication.loadingDiscoveryEndpointResponse | Carregando o documento de descoberta remota. | 
| tokenAuthentication.loadingJsonWebKeySet | Carregando o JSON Web Key Set. | 
| tokenAuthentication.successfulAuthentication | Autenticação de token bem-sucedida. | 
| usePlans.eligibleNotEntitled | A implantação de API não é o destino de um direito em nenhum plano de uso, embora a especificação de implantação de API inclua uma política de solicitação de plano de uso que especifique um token do cliente. | 
| usePlans.requestBreachedButAllowed | A solicitação foi permitida, embora o número máximo de solicitações especificado por um direito ao plano de uso tenha sido excedido. | 
| usagePlans.requestPermitido | Foi permitida a solicitação de um assinante de plano de uso. | 
| usePlans.requestRejeitado | A solicitação de um assinante do plano de uso foi rejeitada. | 
Logs de Execução de Amostra
- Tipo: Solicitação
- Cenário: Loop de Solicitação Detectado
- Descrição: Foi detectada uma condição de loop de solicitação, pela qual as solicitações do gateway estão sendo redirecionadas para ele mesmo, criando um ciclo.
- Exemplo:{ "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", }