504 Gateway Timeout from Backend Server

Estás viendo la documentación de Apigee Edge.
Ir a la documentación de Apigee X.
info

Síntoma

La aplicación cliente recibe un código de estado HTTP 504 con el mensaje "Gateway Timeout" en respuesta a las llamadas a la API.

Esta respuesta de error indica que el cliente no recibió una respuesta oportuna de Apigee Edge o del servidor de backend durante la ejecución de una llamada a la API.

Mensaje de error

La aplicación cliente recibe el siguiente código de respuesta:

HTTP/1.1 504 Gateway Timeout

Este código puede ir seguido de un mensaje de error similar al siguiente:

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

¿Qué causa los tiempos de espera de la puerta de enlace?

La ruta típica para una solicitud a la API realizada a través de Apigee Edge es Cliente -> Router -> Procesador de mensajes -> Servidor de backend, como se muestra en la siguiente figura:

Ruta de acceso de la solicitud a la API

La aplicación cliente, los routers y los procesadores de mensajes se configuran con valores de tiempo de espera adecuados. Apigee Edge espera una respuesta para cada solicitud a la API dentro de un período según los valores de tiempo de espera. Si no se recibe la respuesta dentro del período especificado, se muestra una respuesta 504 Gateway Timeout.

Causas posibles

En Apigee Edge, la causa típica de una respuesta 504 Gateway Timeout del servidor de backend es la siguiente:

Causa Descripción Instrucciones para solucionar problemas para
El servidor de backend responde con 504 Gateway Timeout El servidor de backend agota el tiempo de espera y muestra una respuesta 504 Gateway Timeout al Message Processor. Usuarios de la nube pública y privada de Edge

El servidor de backend responde con 504 Gateway Timeout

El servidor de backend puede responder con un código de respuesta HTTP 504 Gateway Timeout.

Diagnóstico

En esta sección, se explica cómo diagnosticar correctamente un 504 Gateway Timeout. Se enumeran los procedimientos para los usuarios de la nube pública y privada.

Procedimiento 1: Usa Trace (usuarios de la nube pública y privada)

  1. Habilita Trace en la IU de Apigee para la API afectada.
  2. Envía una solicitud al servidor de backend.
  3. Si la solicitud a la API con errores muestra una respuesta 504 del servidor de backend en Trace, la causa del 504 Gateway Timeout es el servidor de backend.
  4. Para determinar el tiempo de respuesta, haz clic en la fase Response received from target server en Trace. En el ejemplo que se muestra, el tiempo transcurrido es de 60004 ms:

    Detalles de la fase en la IU

    La sección Detalles de la fase proporciona información adicional:

    • Destaca la respuesta 504 Gateway Timeout recibida del servidor de backend.
    • En la sección Contenido de la respuesta, se muestra el cuerpo completo de la respuesta del servidor de backend. Como se mencionó anteriormente, el formato y el contenido de la carga útil de la respuesta pueden diferir según la implementación del servidor de backend.
    • La sección Encabezado de respuesta > Servidor puede indicar de dónde se originó la respuesta.
  5. Para ver los datos de Analytics y confirmar el diagnóstico, haz clic en la fase Analytics Data Recorded en Trace, como se muestra en la siguiente figura:

    Detalles del análisis del registro

    En la sección Encabezados de respuesta de Detalles de la fase, se muestran los valores de X-Apigee-fault-code y X-Apigee-fault-source, como se muestra en la siguiente figura:

    Detalles de la fase de análisis en la IU

    Si estos campos contienen los valores que se muestran en la siguiente tabla, la respuesta de error 504 se origina del servidor de backend:

    Encabezados de respuesta Valor
    X-Apigee-fault-source objetivo
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. Verifica el encadenamiento de proxies. Sigue estos pasos para determinar si el servidor de backend invoca otro proxy en Apigee:
    1. Vuelve a la fase Request sent to target server y haz clic en el Show Curl botón para ver el alias de host del servidor de backend.
    2. Si el alias de host del servidor de backend apunta a un alias de host virtual, el encadenamiento de proxies está en su lugar. Repite los pasos anteriores para cada proxy encadenado para diagnosticar la causa de la respuesta de error 504 Gateway Timeout. Los tiempos de espera de la puerta de enlace 504 que ocurren en proxies encadenados en otras etapas de el ciclo de solicitud/respuesta se pueden diagnosticar con esta guía.
    3. Si el alias de host del servidor de backend apunta al servidor de backend, continúa con Solución.

Procedimiento 2: Invoca la API del servidor de backend directamente (usuarios de la nube pública y privada)

Llama al servidor de backend directamente para confirmar el mismo comportamiento de respuesta 504 Gateway Timeout que se produce cuando la solicitud se realiza a través de Apigee Edge.

  1. Asegúrate de tener todos los encabezados, parámetros de consulta y credenciales necesarios para pasar al servidor de backend como parte de la solicitud.
  2. Si el servicio de backend es de acceso público, puedes usar el curl comando, Postman o cualquier otro cliente de REST y, luego, invocar la API del servidor de backend directamente.
  3. Si solo se puede acceder al servidor de backend desde los Message Processors, usa el curl comando, Postman o cualquier otro cliente de REST para invocar la API del servidor de backend directamente desde el Message Processor.
  4. Si el servicio de backend muestra una respuesta 504 Gateway Timeout, continúa con Solución.

Procedimiento 3: Verifica los registros de acceso de NGINX (solo para usuarios de la nube privada)

Los registros de acceso de NGINX pueden ayudar a determinar si el servidor de backend envió la respuesta de error 504. Esto es particularmente útil si el problema ocurrió en el pasado, es intermitente o no se puede capturar en Trace. Sigue estos pasos para verificar los registros de acceso de NGINX:

  1. Visualiza los registros de acceso de NGINX con este comando:
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. Verifica las respuestas de error 504 para el proxy de API afectado. Puedes verificar un período específico, si el problema ocurrió en el pasado o determinar si las solicitudes aún fallan con una respuesta de error 504.
  3. Si hay alguna respuesta de error 504, determina si la respuesta de error se origina en el servidor de backend.
  4. La siguiente figura es un ejemplo de una entrada de registro de NGINX que muestra una respuesta de error 504 causada por el servidor de destino:

    Registros de muestra de nginx

    Si los campos X-Apigee-fault-source y X-Apigee-fault-code contienen los valores que se muestran en la siguiente tabla, la respuesta 504 se origina en el servidor de backend:

    Encabezados de respuesta Valor
    X-Apigee-fault-source objetivo
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. Revisa el proxy de API afectado para verificar el encadenamiento de proxies es decir, el servidor de backend o el extremo de destino invoca otro proxy en Apigee. Si el proxy de API usa el encadenamiento de proxies , repite los pasos anteriores para cada proxy encadenado para diagnosticar la causa de la respuesta de error 504 Gateway Timeout. Los tiempos de espera de la puerta de enlace 504 que ocurren en proxies encadenados en otras etapas se pueden diagnosticar con esta guía.
  6. Si no hay encadenamiento de proxies y la respuesta de error 504 se origina en el servidor de backend, continúa con Solución.

Procedimiento 4: Usa la supervisión de API (solo para usuarios de la nube pública)

La supervisión de API te permite aislar las áreas con problemas rápidamente para diagnosticar problemas de errores, rendimiento y latencia, y su fuente, como apps para desarrolladores, proxies de API, destinos de backend o la plataforma de API.

Sigue un ejemplo que muestra cómo solucionar problemas de 5xx con tus APIs mediante la supervisión de API. Por ejemplo, configura una alerta para notificar a los administradores cuando la cantidad de códigos de estado 504 supere un umbral determinado.

Solución

Con los procedimientos de diagnóstico descritos anteriormente, puedes trabajar con el equipo del servidor de backend para solucionar el problema en el servidor de backend. Esto puede incluir el ajuste de los tiempos de espera en los servidores de backend o tiempos de espera en cualquier balanceador de cargas delante de los servidores de destino.

Recopila información de diagnóstico

Si el problema persiste, comparte la siguiente información de diagnóstico con Asistencia de Apigee.

Si eres usuario de la nube pública, proporciona la siguiente información:

  • Nombre de la organización
  • Nombre del entorno
  • Nombre del proxy de API
  • Comando curl completo que se usó para reproducir la respuesta de error 504
  • Archivo de seguimiento con solicitudes a la API que reciben una respuesta de error 504 Gateway Timeout

Si eres usuario de la nube privada, proporciona la siguiente información:

  • Mensaje de error completo observado para las solicitudes con errores
  • Nombre del entorno
  • Paquete de proxy de API
  • Archivo de seguimiento con solicitudes a la API que reciben una respuesta de error 504 Gateway Timeout
  • Registros de acceso de NGINX
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  • Registros del Message Processor
    /opt/apigee/var/log/edge-message-processor/logs/system.log