504 Tempo limite do gateway do servidor de back-end

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

Sintoma

O aplicativo cliente recebe o código de status HTTP 504 com a mensagem "Tempo limite do gateway" em resposta a chamadas de API.

Essa resposta de erro indica que o cliente não recebeu uma resposta em tempo hábil do Apigee Edge ou do servidor de back-end durante a execução de uma chamada de API.

Mensagem de erro

O aplicativo cliente recebe o seguinte código de resposta:

HTTP/1.1 504 Gateway Timeout

Esse código pode ser seguido por uma mensagem de erro semelhante a esta:

<html>
<head><title>504 Gateway Timeout</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Timeout</h1></center>
</body>
</html>

O que causa os tempos limite de gateway?

O caminho típico para uma solicitação de API feita pelo Apigee Edge é Client -> Roteador -> Processador de mensagens -> Servidor de back-end, como mostra a figura abaixo:

Caminho da solicitação de API

O aplicativo cliente, os roteadores e os processadores de mensagens estão configurados com valores de tempo limite adequados. O Apigee Edge espera uma resposta para cada solicitação de API dentro de um período com base nos valores de tempo limite. Se a resposta não for recebida dentro do período especificado, uma resposta de tempo limite do gateway 504 será retornada.

Causas possíveis

No Apigee Edge, a causa típica de uma resposta "504" de tempo limite de gateway do servidor de back-end é:

Causa Descrição Instruções para solução de problemas
O servidor de back-end responde com o tempo limite do gateway 504 O servidor de back-end atinge o tempo limite e retorna uma resposta de tempo limite de gateway 504 para o processador de mensagens. Usuários de nuvem pública e privada de borda

O servidor de back-end responde com tempo limite do gateway 504

O servidor de back-end pode responder com o código de resposta HTTP 504 Tempo limite do gateway.

Diagnóstico

Esta seção explica como diagnosticar corretamente um tempo limite de gateway 504. Os procedimentos para regulamentos particulares e Os usuários da nuvem pública são listados.

Procedimento no 1: como usar o Trace (usuários da nuvem privada e pública)

  1. Ative o Trace na interface da Apigee para a API afetada.
  2. Enviar uma solicitação ao servidor de back-end.
  3. Se a solicitação de API com falha mostrar uma resposta 504 do servidor de back-end no Trace, a causa do tempo limite do gateway 504 é o servidor de back-end.
  4. Para determinar o tempo de resposta, clique em Resposta recebida do servidor de destino. no Trace. No exemplo mostrado, o tempo decorrido é de 60.004 ms:

    detalhes da fase da UI

    A seção "Detalhes da fase" oferece mais informações:

    • Ela destaca a resposta 504 Gateway Timeout recebida do servidor de back-end.
    • A seção Conteúdo da resposta exibe todo o corpo da resposta do servidor de back-end. Como observado anteriormente, o formato e o conteúdo do payload da resposta podem ser diferentes com base na implementação do servidor de back-end.
    • O campo Cabeçalho de resposta > Server pode indicar a origem da resposta.
  5. Para visualizar dados do Google Analytics e confirmar o diagnóstico, clique em Dados do Google Analytics registrados no Trace, conforme mostrado na figura abaixo:

    detalhes de análise do trace

    A seção Cabeçalhos de resposta de "Detalhes da fase" exibe os valores dos X-Apigee-fault-code e X-Apigee-fault-source, conforme mostrado Figura abaixo:

    detalhes da fase de análise da UI

    Se esses campos contiverem os valores mostrados na tabela abaixo, a resposta de erro 504 terá origem do servidor de back-end:

    Cabeçalhos de resposta Valor
    X-Apigee-fault-source target
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. Procurar encadeamento de proxy. Siga estas etapas para determinar se o servidor de back-end está invocando outro proxy na Apigee:
    1. Navegue de volta para a fase Solicitação enviada ao servidor de destino e clique no Botão Mostrar curl para ver o alias do host do servidor de back-end.
    2. Se o alias de host do servidor de back-end apontar para um alias de host virtual, o encadeamento de proxy estará lugar Repita as etapas acima para cada proxy encadeado para diagnosticar a causa do gateway 504 Resposta de erro de tempo limite. 504 Tempos limite de gateway que ocorrem em proxies encadeados em outros estágios do o ciclo de solicitação/resposta pode ser diagnosticado usando neste manual.
    3. Se o alias de host do servidor de back-end apontar para o servidor de back-end, prossiga para Resolução.

Procedimento no 2: invocar a API do servidor de back-end diretamente (usuários da nuvem pública e privada)

Chame o servidor de back-end diretamente para confirmar o mesmo comportamento de resposta de tempo limite do gateway 504 encontrado quando a solicitação é feita pelo Apigee Edge.

  1. Verifique se você tem todos os cabeçalhos, parâmetros de consulta e credenciais necessários para passados para o servidor de back-end como parte da solicitação.
  2. Se o serviço de back-end estiver acessível publicamente, use o comando curl. Postman ou qualquer outro cliente REST e invocar a API do servidor de back-end diretamente.
  3. Se o servidor de back-end só puder ser acessado pelos processadores de mensagens, use o curl , Postman ou qualquer outro cliente REST para invocar a API do servidor de back-end diretamente da Processador de mensagens
  4. Se o serviço de back-end retornar uma resposta de tempo limite de gateway 504, prossiga para Resolução.

Procedimento no 3: verificar os registros de acesso do NGINX (somente usuários da nuvem privada)

Os registros de acesso do NGINX podem ajudar a determinar se a resposta de erro 504 foi enviada pelo servidor de back-end. Isso é útil principalmente se o problema ocorreu no passado, é intermitente ou não pode ser identificado no Trace. Siga estas etapas para verificar os registros de acesso do NGINX:

  1. Visualize os registros de acesso do NGINX usando este comando:
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. Verifique se há respostas de erro 504 para o proxy de API afetado. É possível verificar um período específico, se o problema ocorreu no passado ou se as solicitações ainda estão falhando com uma resposta de erro 504.
  3. Se houver alguma resposta de erro 504, determine se a resposta de erro é originada do servidor de back-end.
  4. A figura abaixo é um exemplo de entrada de registro NGINX que mostra uma resposta de erro 504 causada pelo servidor de destino:

    exemplos de registros nginx

    Se os campos X-Apigee-fault-source e X-Apigee-fault-code contiverem o valores mostrados na tabela abaixo, a resposta 504 tem origem no servidor de back-end:

    Cabeçalhos de resposta Valor
    X-Apigee-fault-source target
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. Analise o proxy de API afetado para verificar o encadeamento de proxy. Por exemplo, o servidor de back-end/endpoint de destino está invocando outro proxy na Apigee. Se o proxy de API estiver usando encadeamento de proxy , repita as etapas acima para cada proxy encadeado para diagnosticar a causa do tempo limite do gateway 504. resposta de erro. 504 Tempos limite de gateway que ocorrem em proxies encadeados em outros estágios podem ser diagnosticados usando este playbook.
  6. Se não houver encadeamento de proxy, e a resposta de erro 504 tem origem no servidor de back-end. acesse Resolução.

Procedimento no 4: como usar o monitoramento de APIs (somente usuários da nuvem pública)

O API Monitoring permite isolar o problema rapidamente para diagnosticar problemas de erro, desempenho e latência, além das origens deles, como apps para desenvolvedores, Proxies de API, destinos de back-end ou a plataforma de API.

Veja um exemplo de cenário que demonstra como resolver problemas 5xx com suas APIs usando a API Monitoring. Por exemplo: configurar um alerta para notificar os administradores quando o número de códigos de status 504 exceder um determinado limite;

Resolução

Ao usar os procedimentos de diagnóstico descritos acima, é possível trabalhar com a equipe de servidores de back-end para corrigir o problema no servidor de back-end. Isso pode incluir o ajuste de tempos limite nos servidores de back-end ou em qualquer balanceador de carga na frente dos servidores de destino.

Coletar informações de diagnóstico

Se o problema persistir, compartilhe as informações de diagnóstico a seguir com o suporte da Apigee.

Se você é usuário da nuvem pública, forneça as seguintes informações:

  • Nome da organização
  • Nome do ambiente
  • Nome do proxy da API
  • Comando curl completo usado para reproduzir a resposta de erro 504
  • Arquivo de rastreamento com solicitações de API que recebem uma resposta de erro de tempo limite do gateway 504

Se você é usuário da nuvem privada, forneça as seguintes informações:

  • Mensagem de erro completa observada para as solicitações com falha
  • Nome do ambiente
  • Pacote de proxy de API
  • Arquivo de rastreamento com solicitações de API que recebem a resposta de erro 504 Tempo limite do gateway
  • Registros de acesso do NGINX
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  • Registros do processador de mensagens
    /opt/apigee/var/log/edge-message-processor/logs/system.log