Los proxies sidecar inyectados en las cargas de trabajo interceptan y enrutan el tráfico según las directivas configuradas. Cada proxy añade una pequeña cantidad de tiempo de procesamiento, aunque esta sobrecarga es insignificante para el procesamiento simultáneo cuando los nodos cuentan con recursos adecuados.
Cuando la latencia de respuesta es mayor a la esperada, los campos de tiempo en los registros de acceso ayudan a aislar la causa. El proceso consta de dos pasos:
Identificar qué componente en la ruta de la solicitud introduce la latencia.
Determinar si la causa raíz es una transmisión de red lenta o un procesamiento lento en el upstream.
Requisitos previos
Antes de empezar, asegúrese de que:
El registro de acceso está habilitado para su instancia de ASM. Para obtener más información, consulte Enable access log collection.
Puede recuperar los registros del proxy sidecar al ejecutar
kubectl logs <pod-name> -c istio-proxy -n <namespace>.
Funcionamiento de los campos de tiempo en los registros de acceso
Cada componente del plano de datos (proxy sidecar o gateway) registra campos de tiempo en su entrada de registro de acceso. Estos campos miden diferentes segmentos del ciclo de vida de la solicitud:
Request lifecycle at a single data plane component
Downstream Data plane component Upstream
(client) (sidecar proxy / gateway) (service)
| | |
|-------- request_duration -------->| |
| (start -> last byte received | |
| from downstream) | |
| |-------- request_tx_duration ----->|
| | (start -> last byte sent |
| | to upstream) |
| | |
| |<--- response_duration ------------|
| | (start -> first byte received |
| | from upstream) |
| | |
|<-------- response_tx_duration ---| |
| (first byte received from | |
| upstream -> last byte sent | |
| to downstream) | |
| | |
|<===================== duration =================================>|
(start -> last byte out)
|
Campo |
Qué mide |
Desde |
Hasta |
|
|
Ciclo completo de solicitud-respuesta |
Inicio de la solicitud |
Último byte enviado al downstream |
|
|
Solicitud completa recibida del downstream |
Inicio de la solicitud |
Último byte de la solicitud recibido del downstream |
|
|
Solicitud completa transmitida al upstream |
Inicio de la solicitud |
Último byte de la solicitud enviado al upstream |
|
|
Tiempo hasta el primer byte de respuesta del upstream |
Inicio de la solicitud |
Primer byte de respuesta recibido del upstream |
|
|
Respuesta completa entregada al downstream |
Primer byte de respuesta recibido del upstream |
Último byte de respuesta enviado al downstream |
Comparación de ejemplo de registros de acceso
El siguiente ejemplo muestra los campos de tiempo del sidecar del lado del cliente y del sidecar del lado del servidor para la misma solicitud. La comparación de valores entre ambos lados ayuda a identificar con precisión dónde ocurre la latencia.
|
Campo |
Sidecar del lado del cliente |
Sidecar del lado del servidor |
Interpretación |
|
|
250 ms |
30 ms |
El componente del lado del cliente representa la mayor parte de la latencia. |
|
|
5 ms |
2 ms |
La solicitud se recibió rápidamente en ambos lados. |
|
|
200 ms |
3 ms |
El proxy del lado del cliente tardó mucho en reenviar la solicitud al upstream, lo que sugiere problemas de red entre los dos sidecars. |
|
|
220 ms |
25 ms |
La diferencia coincide con una transmisión lenta de la solicitud desde el lado del cliente. |
|
|
30 ms |
5 ms |
La entrega de la respuesta fue relativamente rápida en ambos lados. |
Paso 1: Identificación del componente que introduce la latencia
Revise el campo duration en el registro de acceso de cada componente a lo largo de la ruta de la solicitud. Este valor representa el tiempo total que el componente dedicó a recibir la solicitud, reenviarla al upstream, esperar la respuesta y enviarla de vuelta al downstream.
Compare los valores de duration entre los componentes de la ruta de solicitud:
Comience en el punto de entrada (gateway o primer proxy sidecar) y anote su valor de
duration.-
Verifique el valor de
durationdel siguiente componente en el upstream.Si el valor de
durationdel componente upstream se encuentra dentro del rango esperado, el componente actual es la fuente del exceso de latencia.Si el valor de
durationdel componente upstream también es mayor al esperado, avance un salto más hacia el upstream y repita la comparación.
Continúe hasta encontrar el componente donde la latencia desciende a niveles normales. El componente inmediatamente posterior (downstream) a este es el que introduce el exceso de latencia.
Paso 2: Determinación de la causa raíz
Una vez identificado el componente, examine sus campos de registro de acceso para distinguir entre dos causas raíz: transmisión de red lenta y procesamiento lento en el upstream.
Transmisión de red lenta
Revise request_duration y request_tx_duration:
**Valor alto de
request_duration**: El componente tardó mucho en recibir la solicitud del nodo downstream, lo que indica problemas de red entre dicho nodo y este componente (proxy sidecar o gateway).**Valor alto de
request_tx_duration**: El componente tardó mucho en reenviar la solicitud al servicio upstream, lo que indica problemas de red entre este componente y el servicio upstream.
En solicitudes HTTP con cuerpo, el componente lee y reenvía el cuerpo simultáneamente en lugar de almacenarlo por completo antes de reenviarlo. Como resultado, un valor alto derequest_durationsuele provocar un valor proporcionalmente alto derequest_tx_duration. Si solorequest_tx_durationes alto mientras querequest_durationes normal, significa que la solicitud se recibió rápidamente pero se reenvió lentamente al servicio upstream.
Revise conjuntamente request_duration y response_tx_duration para detectar problemas en la ruta de respuesta:
Si **tanto
request_durationcomoresponse_tx_duration** son altos, la respuesta se leyó lentamente del servicio upstream o se reenvió lentamente al nodo downstream.
Procesamiento lento en el upstream
Compare response_duration y request_tx_duration:
La diferencia entre estos dos valores aproxima el tiempo que el servicio upstream dedicó a procesar la solicitud:
Upstream processing time ≈ response_duration - request_tx_duration
Una diferencia grande indica que el servicio upstream tarda en procesar la solicitud o que existe una alta latencia de red entre el componente y el servicio upstream.
Referencia rápida: patrones de campos y causas probables
|
Patrón de campo |
Causa probable |
Siguiente paso |
|
Valor alto de |
Red lenta entre el downstream y el componente actual |
Compruebe la red del nodo downstream, la pérdida de paquetes y el ancho de banda. |
|
Solo valor alto de |
Red lenta entre el componente actual y el upstream |
Verifique la ruta de red hacia el upstream y la resolución DNS. |
|
Valor alto de |
Red downstream lenta (efecto en cascada por streaming del cuerpo) |
Enfóquese en la ruta de red del downstream. |
|
Valor alto de |
Lectura lenta de respuesta del upstream o reenvío lento al downstream |
Compruebe la red de la ruta de respuesta y el estado del servicio upstream. |
|
Valor alto de |
Procesamiento lento en el upstream o alta latencia de red hacia el upstream |
Analice el perfil del servicio upstream y verifique el uso de recursos en el upstream. |
|
Valor alto de |
Entrega lenta de respuesta al downstream |
Verifique el tamaño de la respuesta y la capacidad de la red downstream. |