Ir para o conteúdo

Como soluciono erros 504 que eu recebo quando uso um Application Load Balancer?

6 minuto de leitura
0

Quero solucionar o erro ELB_504 que recebo nos meus logs de acesso do Application Load Balancer ou nas métricas do Amazon CloudWatch. Ou eu recebo um erro HTTP 504 quando me conecto ao meu serviço por meio de um Application Load Balancer.

Breve descrição

Um erro HTTP 504 ocorre quando um gateway ou proxy atinge o tempo limite. Os erros HTTP 504 do Application Load Balancer podem ocorrer pelos seguintes motivos:

  • O balanceador de carga não conseguiu estabelecer uma conexão com o destino antes que o tempo limite de conexão de 10 segundos expirasse.
  • O balanceador de carga se deparou com um tempo limite de handshake SSL quando se conectou a um destino.
    Observação: não é possível ajustar o tempo limite de 10 segundos do handshake SSL.
  • O balanceador de carga estabeleceu uma conexão com o destino, mas ele não respondeu antes que o tempo limite de inatividade terminasse.
  • O destino retornou um valor de cabeçalho Content-Length maior que o corpo da entidade e o balanceador de carga atingiu o tempo limite.
  • O tráfego intenso fez com que os destinos respondessem mais lentamente.
  • O destino é uma função do AWS Lambda e o serviço não respondeu antes do tempo limite de conexão expirar.

Resolução

Verifique se seu balanceador de carga permite tráfego com destinos registrados

Verifique a métrica TargetConnectionErrorCount do CloudWatch com a estatística Sum. Se você vir pontos de dados positivos em vez de 0, então há problemas de conexão entre o balanceador de carga e o destino.

Para resolver esses problemas, verifique os grupos de segurança de rede associados ao balanceador de carga e aos destinos de backend. Certifique-se de que os grupos de segurança de rede permitam o tráfego entre o balanceador de carga e os destinos em ambas as direções nas portas de tráfego e de verificação de integridade. Confirme se a lista de controle de acesso à rede (ACL da rede) da sub-rede permite o tráfego dos destinos para os nós do balanceador de carga nas portas efêmeras (1024-65535).

Observação: é uma prática recomendada usar regras específicas de grupo de segurança para seu Application Load Balancer.

Verifique as métricas do seu balanceador de carga

Para entender por que seus destinos estão marcados como Não íntegros, verifique as CloudWatch Metrics para seu Application Load Balancer. Se não houver dados da métrica HTTPCode_ELB_504_Count, os servidores da sua aplicação retornaram os erros 504, não o balanceador de carga. Verifique se o valor máximo da métrica TargetResponseTime frequentemente excede o valor do tempo limite, pois essa configuração pode causar erros 504.

Além disso, verifique as seguintes métricas de utilização de CPU e memória em seus destinos com base no tipo de recurso:

  • Para o Amazon Elastic Compute Cloud (Amazon EC2), verifique a métrica CPUUtilization. As instâncias do EC2 não enviam métricas de memória para o CloudWatch por padrão, mas é possível enviar uma métrica de memória personalizada.
  • Para tarefas do Amazon ECS, verifique as métricas CPUUtilization e MemoryUtilization. Se o valor de qualquer uma delas for 1 (100%), a tarefa deixará de responder.
  • Para funções do Lambda, verifique a métrica Duration. Se Duration durar mais do que o valor do tempo limite de inatividade do balanceador de carga, você receberá uma mensagem de erro Gateway timeout.

Aumente a disponibilidade do seu recurso

Se seus destinos tiverem uso intenso de CPU, eles podem deixar de responder.

Para resolver esse problema, aumente os seguintes recursos para seus destinos:

Atualize o código da sua aplicação para ser mais eficiente ao responder às solicitações HTTP. Certifique-se de que a aplicação não demore mais tempo para responder do que o tempo limite de inatividade configurado. Por padrão, o tempo limite de inatividade de um Application Load Balancer é de 60 segundos. Se necessário, aumente o tempo limite de inatividade do seu balanceador de carga.

Observação: é uma prática recomendada aumentar o valor do tempo limite de inatividade somente quando o destino tem um número grande de operações de computação para concluir. Caso contrário, é uma prática recomendada otimizar o uso dos seus recursos nos destinos.

Escale seus destinos com base em sua demanda

Para escalar os destinos com base em sua demanda, realize as seguintes ações para sua configuração:

Observação: quando você invoca uma função do Lambda, a função escala automaticamente.

Verifique suas dependências externas

Quando uma aplicação usa uma arquitetura de microsserviços, dependências externas, como bancos de dados ou APIs, isso afeta o tempo de resposta do destino.

Verifique se há problemas nas seguintes dependências externas comuns:

  • Para bancos de dados do Amazon Relational Database Service (Amazon RDS), verifique as métricas ReadLatency, WriteLatency e DatabaseConnections do CloudWatch.
  • Para filas do Amazon Simple Queue Service (Amazon SQS), verifique as métricas ApproximateAgeOfOldestMessage e NumberOfMessagesDelayed do CloudWatch.
  • Para buckets do Amazon Simple Storage Service (Amazon S3), verifique as métricas FirstByteLatency, TotalRequestLatency, 4xxErrors e 5xxErrors do CloudWatch.
  • Para os serviços de autenticação do Amazon Cognito, verifique a métrica TokenRefreshSuccesses do CloudWatch e verifique se há erros ThrottlingException.

Para identificar a origem de um gargalo de desempenho, realize as seguintes ações:

Use o Compute Optimizer para evitar problemas futuros

Use o AWS Compute Optimizer para obter insights sobre o seu uso dos recursos do Amazon EC2, Amazon ECS e Lambda. O Compute Optimizer detecta quando o seu uso de recursos está muito alto para te ajudar a evitar atingir os tempos limite. Ele também fornece as práticas recomendadas sobre como otimizar seus workloads.

Informações relacionadas

HTTP 504: Gateway timeout (HTTP 504: limite de tempo do gateway)

Como soluciono problemas de alta latência no meu Application Load Balancer no Elastic Load Balancing?

Como soluciono problemas de autenticação no meu Application Load Balancer?

Como soluciono problemas de erros 504 retornados ao usar um Classic Load Balancer?

AWS OFICIALAtualizada há 2 anos