Esta é a documentação do Apigee Edge.
Acesse
Documentação da Apigee X. informações
Sintoma
O aplicativo cliente recebe um código de status HTTP de 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 em tempo hábil do Apigee Edge ou o 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 Time-out
Ao chamar esse proxy usando cURL ou um navegador da Web, talvez você receba o seguinte erro:
<!DOCTYPE html> <html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
O que causa os tempos limite?
O caminho típico de uma solicitação de API pela plataforma de borda é Cliente > Roteador > Enviar mensagem Processador > Backend Server conforme mostrado na figura a seguir:
Todos os componentes no fluxo de ambiente de execução do Apigee Edge, incluindo clientes, roteadores, mensagens
Os processadores e os servidores de back-end são configurados com valores de tempo limite padrão adequados para
verifique se as solicitações de API não demoram muito para serem concluídas. Se algum dos componentes
não recebem a resposta do componente upstream dentro do período especificado no
configuração de tempo limite, o componente específico atingirá o tempo limite e normalmente retornará uma
504 Gateway Timeout
erro.
Este playbook descreve como resolver problemas e resolver um erro 504
causado quando
tempo limite do roteador.
Tempo limite no roteador
O tempo limite padrão configurado em roteadores no Apigee Edge é de 57 segundos. Este é o máximo tempo que um proxy de API pode ser executado a partir do momento em que a solicitação de API é recebida no Edge até a resposta é enviada de volta, incluindo a resposta de back-end e todas as políticas que são executadas. O tempo limite padrão pode ser substituído nos roteadores/hosts virtuais, conforme explicado na Como configurar o tempo limite de E/S nos roteadores.
Causas possíveis
No Edge, as causas típicas do erro 504 Gateway Timeout
causado pela
O tempo limite do roteador é:
Causa | Descrição | Instruções de solução de problemas aplicáveis para |
---|---|---|
Configuração de tempo limite incorreta no roteador | Isso acontece quando o roteador está configurado com um tempo limite de E/S incorreto. | Usuários de nuvem pública e privada de borda |
Etapas comuns do diagnóstico
Use uma das seguintes ferramentas/técnicas para diagnosticar esse erro:
- Monitoramento de APIs
- Registros de acesso do NGINX
Monitoramento de APIs
Para diagnosticar o erro usando a API Monitoring:
- Navegue até o menu Analisar > Monitoramento de APIs > Investigar.
- Filtre por
5xx
erros e selecione o período. - Relacione o Código de status com o Time.
-
Clique na célula específica que mostra
504
erros para consultar mais detalhes sobre esses erros, conforme mostrado abaixo:Exemplo mostrando erros 504
- No painel à direita, clique em View logs.
Na janela Registros de tráfego, observe os seguintes detalhes de alguns erros
504
:- Solicitação:fornece o método de solicitação e o URI usados para fazer as chamadas.
- Tempo de resposta:fornece o tempo total decorrido da solicitação.
No exemplo acima,
- A solicitação está apontando para
GET /test-timeout
. - O tempo de resposta é de
57.001
segundos. Isso indica que o roteador expirou antes que o processador de mensagens pudesse responder, pois o valor está muito próximo para o tempo limite padrão de E/S definido no roteador, que é 57 segundos.
Também é possível acessar todos os registros com a API Monitoring GET logs. Por exemplo, ao consultar os registros de
org
,env
,timeRange
, estatus
, pode ser possível fazer o download de todos os registros de transações em que o tempo limite do cliente.Como a API Monitoring define o proxy como
-
(não definido) para esses504
erros, você pode usar a API (Logs API) para receber o proxy associado do host virtual e do caminho.For example :
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
- Revise o Tempo de resposta para ver outros erros
504
e verifique para verificar se o Tempo de resposta é consistente (valor de tempo limite de E/S definido no roteador que é de 57 segundos) entre todos os erros504
.
Registros de acesso do NGINX
Para diagnosticar o erro usando registros de acesso do NGINX:
- Verifique os registros de acesso do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Pesquise se há erros
504
durante um período específico (se o problema tiver acontecido no passado) ou se houver alguma solicitação que ainda esteja falhando com504
: - Observe as seguintes informações para alguns erros
504
:- Tempo de resposta
- URI da solicitação
Neste exemplo, vemos as seguintes informações:
-
Tempo da solicitação:
57.001
segundos. Isso indica que o O roteador expirou após 57.001 segundos. - Solicitação:
GET /test-timeout
- Alias do host:
myorg-test.apigee.net
-
Verifique se o Tempo de solicitação é o mesmo que o tempo limite de E/S configurados no roteador/host virtual. Se sim, isso significa que o roteador expirou antes que o O processador de mensagens não respondeu no período.
No exemplo de entrada de registro de acesso do NGINX mostrado acima, o campo Request O tempo de
57.001
segundos está muito próximo do tempo limite padrão de E/S definido no roteador. Isso indica claramente que o Roteador atingiu o tempo limite antes que a mensagem O processador pode responder. - Determine o proxy de API para o qual a solicitação foi feita usando o caminho base no Campo Request .
Causa: configuração de tempo limite incorreta no roteador
Diagnóstico
- Determine se os erros
504
são causados porque o tempo limite do roteador expirou antes o processador de mensagens poderá responder. Você pode fazer isso verificando se o Tempo de resposta em Monitoramento da API/Tempo de solicitação no roteador (ambos os campos) representam as mesmas informações,mas são chamadas por nomes diferentes) é o mesmo que o Tempo limite de E/S configurado no roteador/host virtual e nos campos Fault Source, Fault Proxy e Código de falha definidos como-
usando a API Monitoring ou o acesso NGINX registros, conforme explicado nas Etapas comuns de diagnóstico. -
Verifique se o valor de tempo limite de E/S configurado no roteador ou no host virtual específico está menor em comparação ao configurado no processador de mensagens ou no proxy de API específico.
Para isso, siga as etapas desta seção.
Como verificar o tempo limite de E/S em hosts virtuais
interface do Edge
Para verificar o tempo limite do host virtual usando a interface do Edge, faça o seguinte:
- Faça login na interface do Edge.
- Acesse Administrador > Hosts virtuais.
- Selecione um Ambiente específico no qual você está tendo o problema de tempo limite.
- Selecione o host virtual específico em que você quer verificar o valor do tempo limite de E/S.
- Em Propriedades, veja o valor Tempo limite de leitura do proxy em segundos.
No exemplo acima, o Tempo limite de leitura do proxy está configurado com o valor
120
Isso significa que o tempo limite de E/S configurado nesse host virtual é de 120 segundos.
APIs de gerenciamento
Você também pode verificar o Tempo limite de leitura do proxy usando as seguintes APIs de gerenciamento:
-
Execute o Consiga a API virtual host para receber a configuração
virtualhost
, conforme mostrado abaixo:Usuário da nuvem pública
curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Usuário da nuvem privada
curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Em que:
ORGANIZATION_NAME é o nome da organização.
ENVIRONMENT_NAME é o nome do ambiente;
VIRTUALHOST_NAME é o nome do host virtual.
-
Verifique o valor configurado para a propriedade
proxy_read_timeout
Exemplo de definição de host virtual
{ "hostAliases": [ "api.myCompany,com", ], "interfaces": [], "listenOptions": [], "name": "secure", "port": "443", "retryOptions": [], "properties": { "property": [ { "name": "proxy_read_timeout", "value": "120" } ] }, "sSLInfo": { "ciphers": [], "clientAuthEnabled": "false", "enabled": "true", "ignoreValidationErrors": false, "keyAlias": "myCompanyKeyAlias", "keyStore": "ref://myCompanyKeystoreref", "protocols": [] }, "useBuiltInFreeTrialCert": false }
No exemplo acima,
proxy_read_timeout
está configurado com um valor de120
. Isso significa que o tempo limite de E/S configurado neste host virtual é 120 segundos.
Como verificar o tempo limite de E/S no arquivo route.properties
- Faça login em uma máquina roteador.
- Pesquise a propriedade
proxy_read_timeout
na/opt/nginx/conf.d
e verifique se ele foi definido com o novo valor. da seguinte forma:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
Verifique o valor definido para a propriedade
proxy_read_timeout
no sistema virtual de configuração do host.Exemplo de resultado do comando grep
/opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57; /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
No exemplo de saída acima, observe que a propriedade
proxy_read_timeout
tem foi definido com o novo valor57
no0-default.conf
, que é o de configuração do host virtual padrão. Isso indica que o tempo limite de E/S foi configurado para 57 segundos no roteador para o host virtual default. Se você tiver vários hosts virtuais, você verá as informações de cada um deles. Descubra o valor deproxy_read_timeout
para o host virtual específico usado para criar a API. chamadas que falharam com504
erros.
Como verificar o tempo limite de E/S no proxy de API
Confira o tempo limite de E/S nas seguintes guias:
- Endpoint de destino do proxy de API
- Política Service callout do proxy de API
Conferir o tempo limite de E/S no endpoint de destino do proxy de API
- Na interface do Edge, selecione o proxy de API específico em que você quer visualizar a E/S valor de tempo limite.
- Selecione o endpoint de destino específico que você quer verificar.
- Veja a propriedade
io.timeout.millis
com um valor adequado no Elemento<HTTPTargetConnection>
noTargetEndpoint
configuração do Terraform.Por exemplo, o tempo limite de E/S no código a seguir está definido como 120 segundos:
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
Ver o tempo limite de E/S na política Service callout do proxy de API
- Na interface do Edge, selecione o proxy de API específico em que você quer visualizar a nova E/S de tempo limite para a política Service callout.
- Selecione a política ServiceCall específica que você quer verificar.
-
Veja o elemento
<Timeout>
com um valor apropriado abaixo do<ServiceCallout>
.Por exemplo, o tempo limite de E/S do código a seguir será de 120 segundos:
<Timeout>120000</Timeout>
Como verificar o tempo limite de E/S nos processadores de mensagens
- Faça login na máquina do processador de mensagens.
-
Pesquise a propriedade
HTTPTransport.io.timeout.millis
na/opt/apigee/edge-message-processor/conf
usando o seguinte comando:grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
Exemplo de saída
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- No exemplo de saída acima, observe que a propriedade
HTTPTransport.io.timeout.millis
foi definido com o valor55000
emhttp.properties
Isso indica que o tempo limite de E/S foi configurado com sucesso para 55 segundos no processador de mensagens.
Depois de determinar o tempo limite configurado no roteador e no processador de mensagens, verifique se o O roteador/host virtual foi configurado com um valor de tempo limite menor em comparação ao da Proxy de API/processador de mensagens.
Anote os valores definidos em todas as camadas, conforme mostrado na tabela abaixo:
Tempo limite no roteador (segundos) | Tempo limite no host virtual (segundos) | Tempo limite no processador de mensagens (segundos) | Tempo limite no proxy de API (segundos) |
---|---|---|---|
57 | - | 55 | 120 |
Neste exemplo,
- O valor padrão de 57 segundos é configurado no roteador.
- O valor de tempo limite não está definido no host virtual específico. Ou seja, ele usará o o valor padrão de 57 segundos configurado no próprio roteador.
- No Processador de mensagens, o valor padrão de 55 segundos é configurado.
- No entanto, um valor de 120 segundos é configurado em um proxy de API específico.
O valor de tempo limite mais alto é configurado somente no proxy de API, mas o roteador ainda
configurado em 57 segundos. Assim, o roteador expira em 57 segundos, enquanto a mensagem
O processador/back-end ainda está processando sua solicitação. Isso faz com que o roteador responda com
504 Gateway Timeout
ao aplicativo cliente.
Resolução
Realize as etapas a seguir para configurar o tempo limite de E/S adequado no roteador e nas mensagens Processador para resolver esse problema.
- Consulte Práticas recomendadas para configurar o tempo limite de E/S e entender quais valores de tempo limite devem ser definidos em diferentes componentes envolvidos no fluxo de solicitação de API pelo Apigee Edge.
- No exemplo acima, se você verificar que é preciso definir um valor de tempo limite mais alto
porque o servidor de back-end exige mais tempo, e você aumentou o tempo limite
do processador de mensagens para 120 segundos, depois defina um valor de tempo limite maior para
exemplo:
123 seconds
no roteador. Para evitar o impacto em todos os proxies de API devido ao novo valor de tempo limite, defina o valor de123 seconds
somente no host virtual específico usado no proxy de API específico. - Siga as instruções Configurar o tempo limite de E/S nos roteadores para definir o tempo limite no host virtual.