Artículo
· 31 dic, 2023 Lectura de 5 min

Tutorial sobre cómo analizar las solicitudes y respuestas recibidas y procesadas en los pods de WebGateway

csp-log-tutorial

Requisitos previos

Aseguraos de tener git instalado.

Creé una carpeta git dentro del directorio mgr de IRIS. Hice clic derecho en la carpeta git y elegí "Git Bash Here" en el menú contextual.

git clone https://github.com/oliverwilms/csp-log-tutorial.git

Clonad mi repositorio de GitHub csp-log-tutorial si queréis probarlo vosotros mismos.

En este tutorial, describiré cómo intento utilizar los archivos access.log y CSP.log en los pods de WebGateway para rastrear las solicitudes y respuestas.

Mi equipo trabaja con contenedores IRIS que se ejecutan en la plataforma de contenedores Red Hat OpenShift (Kubernetes) en AWS. Implementamos tres pods con el WebGateway que reciben solicitudes a través de un Balanceador de carga de red (Network Load Balancer). Las solicitudes se procesan en una producción de Interoperabilidad que se ejecuta en tres pods de computación. Usamos una producción como banco de mensajes que se ejecuta en pods de datos replicados (mirrored) como un lugar para revisar todos los mensajes procesados por cualquier pod de computación.

Probamos nuestras interfaces usando pods de alimentación para enviar muchos mensajes de solicitud al Balanceador de carga de red. Enviamos 100 000 mensajes y probamos cuánto tiempo llevaría procesar todos los mensajes en el banco de mensajes y registrar las respuestas en los alimentadores. El recuento de mensajes almacenados en el banco de mensajes y las respuestas recibidas por los alimentadores coinciden con el número de mensajes entrantes.

Recientemente nos pidieron que probáramos la tolerancia ante fallos de los pods y de la Zona de Disponibilidad. Borramos pods individuales con o sin fuerza y periodo de gracia. Simulamos un fallo en la zona de disponibilidad al negar todo el tráfico entrante y saliente a una subred (una de las tres zonas de disponibilidad) a través de la consola de AWS mientras los alimentadores envían muchos mensajes de solicitud al Balanceador de carga de red. Ha sido bastante difícil contabilizar todos los mensajes enviados por los alimentadores.

El otro día, mientras un alimentador enviaba 5 000 mensajes, simulamos el fallo de la Zona de disponibilidad. El alimentador recibió 4 933 respuestas. El banco de mensajes almacenó 4 937 mensajes.

Almacenamos access.log y CSP.log en el directorio de datos de los pods de WebGateway. Añadimos esta línea al Dockerfile de nuestra imagen de WebGateway:

RUN sed -i 's|APACHE_LOG_DIR=/var/log/apache2|APACHE_LOG_DIR=/irissys/data/webgateway|g' /etc/apache2/envvars

Configuramos el Nivel de Registro de Eventos (Event Log Level) en Web Gateway en Ev9r.!

captura de pantalla

Creé los subdirectorios data0, data1 y data2 para nuestros tres pods de webgateway. Copié los archivos CSP.log y access.log de nuestros tres pods de webgateway almacenados en volúmenes persistentes:

oc cp iris-webgateway-0:/irissys/data/webgateway/access.log data0/access.log
oc cp iris-webgateway-1:/irissys/data/webgateway/access.log data1/access.log
oc cp iris-webgateway-2:/irissys/data/webgateway/access.log data2/access.log
oc cp iris-webgateway-0:/irissys/data/webgateway/CSP.log data0/CSP.log
oc cp iris-webgateway-1:/irissys/data/webgateway/CSP.log data1/CSP.log
oc cp iris-webgateway-2:/irissys/data/webgateway/CSP.log data2/CSP.log

Termino con tres subdirectorios, cada uno conteniendo archivos access.log y CSP.log.

Contamos el número de solicitudes procesadas en cualquier pod de webgateway usando este comando:

cat access.log | grep InComingOTW | wc -l

Contamos el número de solicitudes y respuestas registradas en CSP.log usando este comando:

cat CSP.log | grep InComingOTW | wc -l

Normalmente esperamos el doble de líneas en CSP.log en comparación con access.log. A veces encontramos más líneas en CSP.log que el doble esperado de líneas en access.log. Recuerdo haber visto menos líneas de las esperadas en CSP.log en comparación con lo que había en access.log al menos una vez. Sospechamos que esto se debió a una respuesta 500 registrada en access.log, que no se registró en CSP.log, correctamente porque el pod de webgateway se terminó.

¿Cómo puedo analizar muchas líneas de solicitudes y explicar lo sucedido?

Creé las clases persistentes otw.wgw.apache y otw.wgw.csp para importar líneas desde access.log y CSP.log. access.log contiene una línea por solicitud e incluye el estado de la respuesta. CSP.log contiene líneas separadas para solicitudes y respuestas.

Abrid el terminal de IRIS e importad las clases en el directorio src desde el repositorio csp-log-tutorial que habíamos clonado anteriormente:

Set src="C:\InterSystems\IRISHealth\mgr\git\csp-log-tutorial\src"
Do $system.OBJ.LoadDir(src,"ck",,1)

Si no tenéis vuestro propio archivo CSP.log para analizar, podéis importar el que se proporciona en el repositorio csp-log-tutorial:

Set pFile="C:\InterSystems\IRISHealth\mgr\git\csp-log-tutorial\wg2_20230314_CSP.log"
Do ##class(otw.wgw.csp).ImportMessages(pFile,.pLines,.pFilter,1)

pLines y pFilter son parámetros de salida que no son tan importantes en este momento. pImport controla si el Extent se elimina antes de importar los datos.

Después de importar los datos podemos ejecutar consultas SQL como esta:

SELECT count(*) FROM otw_wgw.csp where wgEvent='WebGateway.ProcessRequest'

Si el recuento devuelto es un número impar, indica que hay un desajuste entre las solicitudes y las respuestas.

Podemos ejecutar la siguiente consulta para identificar los nombres de archivo en las solicitudes que no tienen una respuesta coincidente:

select zFilename, count(*) from otw_wgw.csp group by zFilename having count(*) = 1

Tened en cuenta que utilizo el método CalcFilename para establecer la propiedad zFilename antes de guardar una línea importada del archivo CSP.log.

También incluí un archivo access.log de muestra, que podemos importar así:
Si no tenéis vuestro propio archivo CSP.log para analizar, podéis importar el que se proporciona en el repositorio csp-log-tutorial:

Set pFile="C:\InterSystems\IRISHealth\mgr\git\csp-log-tutorial\wg2_20230314_access.log"
Do ##class(otw.wgw.apache).ImportMessages(pFile,.pLines,.pFilter,1)

Podemos ejecutar esta consulta para obtener el recuento de mensajes relacionados con este tutorial:

SELECT count(*) FROM otw_wgw.apache where Text like '%tutorial%'

¿Qué más me gustaría hacer si encuentro tiempo?

Me gustaría combinar los datos de las tablas apache y csp y posiblemente incluir datos recogidos de los pods de computación.

Creo que puedo utilizar los datos de access.log para determinar cuándo hubo una interrupción en un pod de webgateway.

Comentarios (0)1
Inicie sesión o regístrese para continuar