Estás viendo la documentación de Apigee Edge.
Ve a la
Documentación de Apigee X. información
Síntoma
La aplicación cliente recibe un código de estado HTTP de 502 Bad Gateway
con el
el código ECONNRESET
como respuesta a las llamadas a la API en Edge Microgateway.
Mensaje de error
El cliente verá el siguiente código de respuesta:
HTTP/1.1 502 Bad Gateway
La respuesta incluirá el siguiente mensaje de error:
{"message":"socket hang up","code":"ECONNRESET"}
Causas posibles
Causa | Descripción | Instrucciones de solución de problemas aplicables para |
---|---|---|
Tiempo de espera de keep-alive configurado de forma incorrecta | Los tiempos de espera de mantenimiento de disponibilidad están configurados de forma incorrecta entre Edge Microgateway y el servidor de destino. | Usuarios perimetrales de nubes públicas y privadas |
El servidor de destino cierra la conexión de forma prematura | El servidor de destino cierra la conexión de forma prematura mientras Edge Microgateway envía la carga útil de la solicitud. | Usuarios perimetrales de nubes públicas y privadas |
Pasos comunes de diagnóstico
- Revisa los registros de Edge Microgateway:
/var/tmp/edgemicro-`hostname`-*.log
- Realiza una búsqueda para ver si hay algún error
502
con el códigoECONNRESET
durante un período específico (si el problema ocurrió en el pasado) o si hay solicitudes Sigue fallando con502
.2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test] [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684] [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
- Si tienes el nivel de registro establecido en
warn
oinfo
, también habrá un mensaje[warn]
que incluya el nombre de host y el puerto del servidor de destino en la . En este ejemplo, esX.X.X.X:8080
, y esto se puede usar más tarde para capturar untcpdump
.2021-06-23T03:52:24.109Z [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup] [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware] [targetRequest error][GET][][socket hang up][ECONNRESET][395]
- El código de error
[socket hang up][ECONNRESET]
indica que el servidor de destino cerró la conexión con Edge Microgateway. Esto se puede buscar en los registros para determinar con qué frecuencia ocurre.
Causa: Tiempo de espera de keep-alive configurado de forma incorrecta
Diagnóstico
- Siga los pasos de la sección Pasos comunes del diagnóstico y verifique si recibió el
Error
[socket hang up][ECONNRESET]
. Si es así, investiga más con la ayuda de
tcpdump
, como se explica a continuación:
Cómo usar tcpdump
- Captura un
tcpdump
entre Edge Microgateway y el servidor de backend en el sistema operativo host de Edge Microgateway con el siguiente comando:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- Analiza el
tcpdump
capturado:Resultado de muestra de tcpdump: ( ver imagen más grande)
En el
tcpdump
de ejemplo anterior, puedes ver lo siguiente:- En el paquete 250288, el cliente envía una solicitud
POST
. - En el paquete 250371, el servidor responde con
200 OK
. - En el paquete 250559, el cliente envía un
ACK.
. - En el paquete 250560, el servidor envía
Continuation
. mensaje. - En el paquete 250561, el cliente envía un
ACK.
. - En el paquete 262436, el servidor envía un
FIN, ACK
al que el cliente inicie el cierre de la conexión. Tengan en cuenta que son cinco segundos después del paquete anterior (250561). - En el paquete 262441, el cliente envía otro
POST
. para cada solicitud. Sin embargo, esto falla porque el servidor ya inició el cierre del conexión. Responde con unRST
en el paquete 262441
La misma conexión se reutilizó al menos una vez en este ejemplo, pero en la solicitud final, el servidor inicia un cierre de la conexión después de cinco segundos de inactividad, que sucede al mismo tiempo que el cliente envía una nueva solicitud. Esta sugiere que el tiempo de espera de keep-alive del servidor de backend probablemente sea más corto o igual a el valor establecido en el cliente. Para validarlo, consulta Compara el tiempo de espera de keep-alive en Edge Microgateway y en el servidor de backend.
- En el paquete 250288, el cliente envía una solicitud
Compara los tiempos de espera de keep-alive
- Edge Microgateway no tiene una propiedad específica de tiempo de espera de keep-alive. Sí determinadas por el sistema operativo donde se ejecuta. Algunos ejemplos comunes son Windows, contenedores de Linux y Docker.
- Es posible que esté personalizado en el sistema operativo. Verifica con tu administrador del sistema. De forma predeterminada, los sistemas operativos Linux tienen un sistema keep-alive predeterminado tiempo de espera de dos horas.
- A continuación, verifica la propiedad de tiempo de espera keep-alive configurada en tu servidor de backend. Veamos digamos que tu servidor de backend está configurado con un valor de 10 segundos.
- Si determinas que el valor del tiempo de espera keep-alive en el sistema operativo es
mayor que el valor de la propiedad de tiempo de espera keep-alive en el servidor de backend, como en
ejemplo anterior, esa es la causa de los errores
502
.
Solución
Asegúrate de que la propiedad de tiempo de espera keep-alive siempre sea más baja en el sistema operativo en el que Edge Microgateway está en ejecución en comparación con el del servidor de backend.
- Determina el valor establecido para el tiempo de espera keep-alive en el servidor de backend.
- Configura un valor adecuado para la propiedad de tiempo de espera keep-alive en las operaciones de modo que la propiedad de tiempo de espera keep-alive sea menor que el valor establecido en el backend servidor web siguiendo los pasos correspondientes a tu sistema operativo.
Práctica recomendada
Se recomienda que los componentes downstream siempre tengan un tiempo de espera de keep-alive menor
que los configurados en los servidores ascendentes para evitar este tipo de condiciones de carrera y
502
de errores. Cada salto descendente debe ser menor que cada salto upstream. En Edge
Microgateway, se recomienda usar los siguientes lineamientos:
El tiempo de espera de keep-alive en la aplicación cliente o el balanceador de cargas debe ser menor que el Tiempo de espera de keep-alive de Edge Microgateway.
Para configurar el tiempo de espera de keep-alive en Edge Microgateway, agrega el Valor
keep_alive_timeout
para tu archivo~/.edgemicro/org-env-config.yaml
.edgemicro: keep_alive_timeout: 65000
- El tiempo de espera de mantenimiento del sistema operativo de Edge Microgateway debe ser inferior al objetivo tiempo de espera de keep-alive del servidor.
- Si tienes otros saltos delante o detrás de Edge Microgateway, se debe aplicar la misma regla si se aplican. Siempre debes dejarlo como responsabilidad del cliente final del cierre. la conexión con el upstream.
Causa: El servidor de destino cierra la conexión de forma prematura
Diagnóstico
- Siga las instrucciones que se explican en la sección Pasos comunes del diagnóstico y verifique si se cumple alguna de las siguientes condiciones:
recibió el error
[socket hang up][ECONNRESET]
. - Si es así, investiga más con la ayuda de
tcpdump
, como se explica a continuación.El mensaje de error
[targetRequest error][GET][][socket hang up][ECONNRESET]
En el ejemplo anterior, indica que este error se produjo mientras Edge Microgateway estaba enviando la solicitud al servidor backend (de destino). Es decir, Edge Microgateway envió el archivo al servidor de backend y estaba esperando respuesta. Sin embargo, el backend el servidor finalizó la conexión de forma abrupta antes de que Edge Microgateway recibiera una respuesta. - Revisa los registros del servidor de backend y fíjate si hay algún error o información que pueda que hicieron que el servidor backend finalizara la conexión de forma abrupta. Si encuentras errores o Luego, ve a Solución y corrige el problema según corresponda. en tu servidor de backend.
- Si no encuentras ningún error ni información en tu servidor de backend, recopila la
Resultado de
tcpdump
en el servidor de Edge Microgateway:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- Analiza el
tcpdump
capturado:Resultado de muestra de tcpdump: ( ver imagen más grande)
En el
tcpdump
de ejemplo anterior, puedes ver lo siguiente:- En el paquete 4, Edge Microgateway envió una solicitud
GET
al destino servidor. - En el paquete 5, el servidor de destino respondió con
ACK
para confirmar el para cada solicitud. - Sin embargo, en el paquete 6, en lugar de responder con una carga útil de respuesta, el destino
el servidor envía un
FIN, ACK
que inicia el cierre de la conexión. - En los paquetes 7 en adelante, la conexión se cierra mutuamente. Dado que la conexión fue
cerrado antes de enviar la respuesta, Edge Microgateway devolverá el HTTP
502
error al cliente. - Ten en cuenta que la marca de tiempo del paquete 8,
2021-06-23T03:52:24.110Z
, corresponde a la marca de tiempo en la que se registró el error en Edge Microgateway. los registros del sistema operativo. Las marcas de tiempo en los archivos de registro y entcpdump
suelen para correlacionar los errores con los paquetes reales.
Solución
Soluciona el problema en el servidor de backend de manera adecuada.
Si el problema persiste y necesitas asistencia para solucionarlo
502 Bad Gateway Error
o sospechas que se trata de un problema en Edge Microgateway, ve a Se debe recopilar información de diagnóstico.Se debe recopilar información de diagnóstico
Si el problema persiste, incluso después de seguir las instrucciones anteriores, reúne la siguiente información de diagnóstico y, luego, comunícate con el equipo de asistencia de Apigee Edge:
- Archivos de registro: La carpeta predeterminada es
/var/tmp
, pero se puede anular en el archivoconfig.yaml
principal (logging > dir parameter
). Sí se recomienda cambiarlog > level
ainfo
antes de proporcionar los archivos de registro al equipo de asistencia de Apigee. - Archivo de configuración: La configuración principal de Edge Microgateway se encuentra en
Archivo YAML en la carpeta predeterminada de Edge Microgateway,
$HOME/.edgemicro
. Hay una archivo de configuración predeterminado llamadodefault.yaml
y, luego, uno para cada entornoORG-ENV-config.yaml
Sube este archivo para la organización afectada y el entorno
- En el paquete 4, Edge Microgateway envió una solicitud