504 Tempo limite do gateway do servidor de back-end

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

Sintoma

O aplicativo cliente recebe um código de status HTTP 504 com a mensagem "Gateway Timeout" em resposta a chamadas de API.

Essa resposta de erro indica que o cliente não recebeu uma resposta oportuna 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 à abaixo:

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

O que causa tempos limite de 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 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 de tempo limite do gateway 504 do servidor de back-end é:

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

Servidor de back-end respondendo com tempo limite do gateway 504

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

Diagnóstico

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

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

  1. Ative Trace na interface da Apigee para a API afetada.
  2. Envie uma solicitação para o 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 60004 ms:

    detalhes da fase na interface

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

    • Ela destaca a resposta Tempo limite do gateway 504 recebida do servidor de back-end.
    • A seção Conteúdo da resposta mostra o corpo completo da resposta do servidor de back-end. Como observado anteriormente, o formato e o conteúdo do payload de resposta podem variar com base na implementação do servidor de back-end.
    • A seção Cabeçalho de resposta > Servidor pode indicar de onde a resposta se originou.
  5. Para conferir 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 Cabeçalhos de resposta dos detalhes da fase mostra os valores de X-Apigee-fault-code e X-Apigee-fault-source, conforme mostrado na figura abaixo:

    Detalhes da fase de análise na interface

    Se esses campos contiverem os valores mostrados na tabela abaixo, a resposta de erro 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
  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 ao servidor de destino e clique no Mostrar Curl botão para conferir o alias do host do servidor de back-end.
    2. Se o alias do 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 de tempo limite do gateway 504. Os tempos limite do gateway 504 que ocorrem em proxies encadeados em outras fases 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 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 transmitir ao servidor de back-end como parte da solicitação.
  2. Se o serviço de back-end for acessível publicamente, use o comando curl, o Postman ou qualquer outro cliente REST e invoque 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 comando, o 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 de tempo limite do gateway 504, acesse Resolução.

Procedimento 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 é especialmente útil se o problema ocorreu no passado, é intermitente ou não pode ser capturado no Trace. Siga estas etapas para verificar os registros de acesso do NGINX:

  1. Confira 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 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 é originada do servidor de back-end.
  4. A figura abaixo é um exemplo de entrada de registro do NGINX que mostra uma resposta de erro 504 causada pelo servidor de destino:

    Exemplo de registros do nginx

    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. Analise o proxy de API afetado para verificar o encadeamento de proxy ou seja, 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 da resposta de erro de tempo limite do gateway 504. Os tempos limite do gateway 504 que ocorrem em proxies encadeados em outras fases 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, acesse Resolução.

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

O Monitoramento de APIs permite isolar as áreas problemáticas rapidamente para diagnosticar problemas de erro, desempenho e latência e a origem delas, como aplicativos de desenvolvedor, proxies de API, destinos de back-end ou a plataforma de API.

Siga um cenário de amostra que demonstra como solucionar problemas 5xx com suas APIs usando o Monitoramento de APIs. Por exemplo, configure um alerta para notificar os administradores quando o número de códigos de status 504 exceder um limite específico.

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 tempos limite em balanceadores de carga na frente dos servidores de destino.

Coletar informações de diagnóstico

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

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

  • Nome da organização
  • Nome do ambiente
  • Nome do proxy de 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ê for um 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 uma resposta de erro de tempo limite do gateway 504
  • 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