Quiero solucionar los errores HTTP 504 que recibo como ELB_504 en los registros de acceso del equilibrador de carga de aplicación o en las métricas de Amazon CloudWatch. O bien, que recibo cuando me conecto a mi servicio a través de un equilibrador de carga de aplicación.
Descripción corta
Un error HTTP 504 significa que se ha agotado el tiempo de espera de una puerta de enlace o un proxy. Los errores HTTP 504 del equilibrador de carga de aplicación pueden producirse por los siguientes motivos:
- El equilibrador de carga no pudo establecer una conexión con el destino antes de que expirara el tiempo de espera de la conexión (10 segundos).
- El equilibrador de carga estableció una conexión con el destino, pero el destino no respondió antes de que transcurriera el tiempo de espera.
- La ACL de la red de la subred no permite el tráfico desde los destinos a los nodos del equilibrador de carga de los puertos efímeros (1024-65535).
- El objetivo devuelve un valor de encabezado Content-Length que es mayor que el cuerpo de la entidad. Se agotó el tiempo de espera del equilibrador de carga esperando los bytes que faltan.
- El objetivo es una función de AWS Lambda y el servicio no respondió antes de que expirara el tiempo de espera de la conexión.
Resolución
Comprobación del tiempo de espera de inactividad del equilibrador de carga
Cuando la instancia de backend no responde a una solicitud dentro del período de tiempo de espera de inactividad configurado, pueden producirse errores HTTP 504 del equilibrador de carga. De forma predeterminada, el tiempo de espera del equilibrador de carga de aplicación es de 60 segundos.
Si las métricas de CloudWatch están activadas, compruebe las métricas de CloudWatch para el equilibrador de carga de aplicación. La métrica HTTPCode_ELB_5XX muestra que el error 504 se originó en el equilibrador de carga. Si no hay puntos de datos de la métrica HTTPCode_ELB_504_Count, los errores 504 los devuelven los servidores de aplicaciones, no el equilibrador de carga.
Compruebe los valores máximos y medios de la métrica TargetResponseTime de CloudWatch. El valor de tiempo de espera muestra el tiempo transcurrido desde que se recibió la solicitud del equilibrador de carga del objetivo.
Para solucionar este problema:
Modifique el tiempo de espera de inactividad del equilibrador de carga para que la solicitud HTTP se complete dentro del período de tiempo de espera de inactividad.
Alternativa:
Modifique la aplicación para responder más rápido a la solicitud HTTP. Asegúrese de que la aplicación no tarde más en responder que el tiempo de espera de inactividad configurado.
(Opcional) Para determinar la causa del tiempo de respuesta lento, añada los siguientes filtros personalizados en los registros de las aplicaciones de los servidores web de backend:
Servicio web de Apache
a- Apache : %D in log format
Servicio web de NGINX
b- Nginx: $request_time and $upstream_response_timein log format
Servidor web IIS
c- IIS: "time-taken" in log format
Servidor web de Apache Tomcat
d- Apache Tomcat Access logs: %D in log format
Comprobar si el equilibrador de carga permite el tráfico con objetivos registrados
Compruebe los grupos de seguridad de red asociados al equilibrador de carga y a los objetivos del backend. Asegúrese de que los grupos de seguridad de la red permitan el tráfico entre sí en ambas direcciones en los puertos de tráfico y comprobación de estado. Compruebe que la ACL de la red de la subred permita el tráfico desde los objetivos a los nodos del equilibrador de carga de los puertos efímeros (1024-65535).
Nota: Se recomienda usar las siguientes reglas de grupos de seguridad para el equilibrador de carga de aplicación.
Si revisa la métrica TargetConnectionErrorCount de CloudWatch con la estadística de suma, verá puntos de datos positivos. Esta métrica representa el número de conexiones que no se han establecido correctamente entre el equilibrador de carga y el objetivo.
Para obtener más información, consulte Configuración del tiempo de espera de inactividad mediante la consola.
Comprobar que la función de Lambda responde antes de que venza el tiempo de espera de la conexión
Si su objetivo es una función de Lambda, compruebe la duración de la métrica de rendimiento con las estadísticas máximas para comprobar la cantidad de tiempo que se procesa el evento. Para obtener más información, consulte Métricas de rendimiento.
Información relacionada
HTTP 504: Tiempo de espera de la puerta de enlace agotado
¿Cómo puedo solucionar los problemas de latencia alta en mi equilibrador de carga de aplicación en Elastic Load Balancing?
¿Cómo puedo solucionar los problemas de configuración de la autenticación en mi equilibrador de carga de aplicación?
¿Cómo puedo solucionar los errores 504 devueltos al utilizar un equilibrador de carga clásico?