504 Tempo limite do gateway do servidor de back-end

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Sintoma

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

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

Mensagem de erro

O aplicativo cliente recebe este 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 do gateway?

O caminho típico para uma solicitação de API feita pelo Apigee Edge é Cliente -> Roteador -> Processador de mensagens -> Servidor de back-end, conforme mostrado na figura abaixo:

Caminho da solicitação de API

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

Causas possíveis

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

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

O servidor de back-end está respondendo com o erro 504 de tempo limite do gateway

O servidor de back-end pode responder com um código de resposta HTTP de tempo limite de gateway 504.

Diagnóstico

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

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

  1. Ative o Trace na IU 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 será o servidor de back-end.
  4. Para determinar o tempo de resposta, clique na fase Resposta recebida do servidor de destino no Trace. No exemplo mostrado, o tempo decorrido é de 60.004 ms:

    detalhes da fase da interface

    A seção Detalhes da fase fornece informações adicionais:

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

    detalhes de análise do trace

    A seção Response Headers dos detalhes da fase exibe os valores de X-Apigee-fault-code e X-Apigee-fault-source, conforme mostrado na figura abaixo:

    detalhes da fase de análise da interface

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

    Cabeçalhos de resposta Valor
    X-Apigee-fault-source destino
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. Verifique o encadeamento de proxy. Siga estas etapas para determinar se o servidor de back-end está invocando outro proxy na Apigee:
    1. Volte para a fase Solicitação enviada para o servidor de destino e clique no botão Mostrar curl para visualizar 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á em vigor. Repita as etapas acima para cada proxy encadeado para diagnosticar a causa da resposta de erro "504 Gateway Timeout". 504 Os tempos limite de gateway que ocorrem em proxies encadeados em outros estágios do ciclo de solicitação/resposta podem ser diagnosticados usando este manual.
    3. Se o alias do host do servidor de back-end apontar para o servidor de back-end, acesse Resolução.

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

Chame o servidor de back-end diretamente para confirmar o mesmo comportamento de resposta de tempo limite de 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 transmitir ao servidor de back-end como parte da solicitação.
  2. Se o serviço de back-end estiver acessível publicamente, será possível usar 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 comando curl, Postman ou qualquer outro cliente REST para invocar a API do servidor de back-end diretamente do processador de mensagens.
  4. Se o serviço de back-end retornar uma resposta 504 de tempo limite do gateway, prossiga para Resolução.

Procedimento no 3: verificar os registros de acesso do NGINX (apenas 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 é particularmente útil se o problema tiver ocorrido no passado, for intermitente ou não puder ser capturado no Trace. Use estas etapas para verificar os registros de acesso do NGINX:

  1. Use este comando para ver os registros de acesso do NGINX:
    /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 determinar se as solicitações ainda estão falhando com uma resposta de erro 504.
  3. Se houver respostas de erro 504, determine se a resposta de erro se origina do servidor de back-end.
  4. A figura abaixo mostra o exemplo de uma entrada de registro do NGINX mostrando uma resposta de erro 504 causada pelo servidor de destino:

    registros de nginx de amostra

    Se os campos X-Apigee-fault-source e X-Apigee-fault-code contiverem os valores mostrados na tabela abaixo, a resposta 504 será originada do servidor de back-end:

    Cabeçalhos de resposta Valor
    X-Apigee-fault-source destino
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. Confira o proxy de API afetado para verificar o encadeamento de proxy, ou seja, se o endpoint de destino/servidor de back-end 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 da resposta de erro 504 Gateway Timeout. 504 Os tempos limite de gateway que ocorrem em proxies encadeados em outros estágios podem ser diagnosticados usando este manual.
  6. Se não houver encadeamento de proxy e a resposta de erro 504 for originada do servidor de back-end, prossiga para Resolução.

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

O Monitoramento de APIs permite isolar áreas com problemas rapidamente para diagnosticar erros, desempenho e latência, bem como a origem deles, como apps de desenvolvedores, proxies de API, destinos de back-end ou a plataforma da API.

Consulte um exemplo de cenário que demonstra como solucionar problemas de 5xx com suas APIs usando o API Monitoring. Por exemplo, configure um alerta para notificar os administradores quando o número de códigos de status 504 exceder um determinado limite.

Resolução

Usando os procedimentos de diagnóstico descritos acima, você pode trabalhar com a equipe do servidor 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 de proxy da API
  • Completar o comando curl usado para reproduzir a resposta de erro 504
  • Arquivo de rastreamento com solicitações de API que recebem uma resposta de erro "504 Tempo limite do gateway"

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

  • Concluir a mensagem de erro 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 Gateway Timeout
  • 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