Guía de registros para probadores / Sudo Null IT News

Desde hace casi cuatro años exploro el maravilloso mundo del testing en el departamento de sistemas corporativos de LANIT. El último año y medio lo he dedicado a proyectos fintech, por lo que trabajar con registros se ha convertido en parte de mi proceso de trabajo. En esta guía, le presentaré puntos clave que le ayudarán a comprender mejor los registros y a utilizar las herramientas de registro de forma más eficaz.

Por razones obvias, no puedo mostrar cómo trabajo con los registros del proyecto. Sin embargo, traté de no convertir mi guía en una teoría completa y miré los registros desde el lado práctico, de forma clara y con ejemplos.

¿Qué es el registro y el registro?

En cualquier situación poco clara, ¡mira los registros!

Permítanme recordarles brevemente qué son los registros y el registro. registro Es un archivo con registros de eventos ocurridos en el sistema. Es como una caja negra en un avión, sólo para programas: si algo sucede, se registra información en los archivos de registro que ayuda a rastrear el comportamiento de los procesos en el sistema. A menudo se consideran los registros del servidor.

Iniciar sesión — el proceso de generar registros, es decir, registrar y estructurar información sobre el funcionamiento del sistema en archivos de registro separados para que pueda acceder a ellos rápidamente.

Los registros registran información diversa: desde la velocidad de la aplicación (tiempo de respuesta) hasta datos sobre errores, excepciones y problemas.

Los registros son útiles cuando…

De hecho, todo depende del objetivo de las pruebas, de los niveles de acceso a los stands y de las capacidades de los sistemas de registro.

Registros configurados y acceso a ellos para el evaluador. agilizará el análisis de incidencias en producciónya que la descripción del problema muchas veces es incompleta o poco clara a la hora de reproducir el defecto.

Mientras probamos varias integraciones es mejor tener acceso a los registros de los servicios involucrados, ya que fallo o falla puede ocurrir en algún nivel o etapa del proceso, seguimiento que sin profundizar en los registros puede ser problemático. Por ejemplo, es posible que el frente no nos diga nada sobre el error y simplemente no obtenga datos de un servicio adyacente. Aquí es donde los troncos acuden al rescate.

Para pruebas funcionales unitarias y clásicas También debes prestar atención a los registros. es posible rastrear errores que no son obvios o no se relacionan directamente con el caso, que estamos viendo, o el que aparece error en la interacción con el servicio interno o externoen lo que quizás no se haya pensado al elaborar una lista de verificación o casos de prueba para una tarea.

¿En qué caso debería solicitar registros o buscarlos?

Imaginemos una situación: marca un campo en el frente que, cuando hace clic en un botón, recibe el tipo de cambio actual de un servicio de terceros. Presionaste el botón y no pasó nada.

Cuando vuelves a hacer clic, pero con DevTools abierto, ves que la solicitud para obtener el tipo de cambio falla con el error 422. No hay detalles en DevTools por error. En este caso, vaya a los registros. Allí podemos descubrir que la solicitud falló con un error 422, ya que el backend solo procesa valores menores a 100 en este campo y el servicio de terceros nos envía una respuesta, por ejemplo, 120.

¿Qué información puede ver un evaluador en los registros?

  • Solicitudes y respuestas, códigos de estado,

  • ejecución de operaciones, secuencia de eventos,

  • excepciones (mecanismos que manejan situaciones atípicas y no dejan de funcionar),

  • seguimiento de pila (una lista de métodos que se llamaron antes de que ocurriera la excepción en la aplicación),

  • mensajes de error o datos insuficientes,

  • realizar determinadas operaciones, utilizar recursos (por ejemplo, procesador, memoria).

¿Qué tipos de registros existen?

Para comprender en qué etapa ocurrió el error y a qué registro acceder, los registros se dividen en los siguientes tipos.

  1. Sistema

Son creados por el sistema operativo y contienen información sobre su funcionamiento, incluido el inicio y la finalización de procesos, errores del sistema de archivos y otros eventos. ellos ayudan monitorear el rendimiento de las aplicaciones a nivel del sistema operativo e identificar problemas relacionados con la configuración o la interacción con otras aplicaciones.

  1. Registros de aplicaciones

Son creados por la propia aplicación y contienen información sobre su funcionamiento: mensajes de error, advertencias e información sobre las acciones realizadas. Estos registros ayudan identificar y corregir errores en la aplicación, así como comprender su estado interno y secuencia de acciones.

  1. Registros del servidor

Contiene información sobre solicitudes al servidor y otros eventos que ocurren en el servidor. Registros del servidor monitorear la interacción de la aplicación con el servidor, identificar problemas con el rendimiento y el procesamiento de solicitudes.

  1. Registros de base de datos

Contiene información sobre la ejecución de consultas de bases de datos, cambios de datos y otros eventos. Estos registros ayudan a rastrear ejecutar consultas, identificar problemas de rendimiento e integridad de datos.

Además, para facilitar el procesamiento, los registros se dividen en subtipos:

  • sistémicorelacionados con eventos del sistema,

  • servidorresponsable del proceso de acceso al servidor,

  • postaltrabajando con envíos,

  • registros de bases de datosque reflejan los procesos de acceso a las bases de datos,

  • autorización y autenticaciónque son responsables del proceso de inicio y cierre de sesión del sistema, restauración del acceso, etc.

Pros y contras del software del sistema con la capacidad de registrar y visualizar registros

Entonces, analizamos qué son los registros, el registro y los tipos de registros. Aquí me gustaría destacar las tres herramientas más comunes en proyectos entre nuestros empleados, que brindan la oportunidad de trabajar con registros e información adicional sobre errores y eventos. A menudo se encuentran en una forma renombrada (la mayoría de estos productos son de código abierto), pero en esencia son las mismas herramientas, solo que rediseñadas y adaptadas a los requisitos del producto.

Así que no se devane los sesos buscando enlaces específicos a herramientas. Con un 99% de probabilidad, tus compañeros te proporcionarán enlaces para tus proyectos, ya que el software estará en recursos internos o puede que ya esté preinstalado en una máquina virtual (en el caso de los bancos). La página de proyectos puede resultar útil porque allí hay documentación oficial. Pero aún así, es más útil para los desarrolladores que para los evaluadores.

1. Openshift: una herramienta para implementar, gestionar y escalar aplicaciones en contenedores*

¿Para qué usarlo?

Para registros más detallados. Útil si no puede encontrar el registro exacto asociado con un error. En este caso, podemos tomar el registro de Openshift, dejar solo el período de tiempo que coincida con el evento que buscamos y transferirlo al desarrollador.

Ventajas:

  • gestionar contenedores a través de una interfaz web,

  • seguimiento y gestión de recursos,

  • conveniente desglose de registros e información por servicio,

  • Posibilidad de reinicio puntual de los servicios.

Contras:

Referencia de cambio abierto

2. Kafka es una herramienta para procesar y transmitir datos en streaming.

¿Para qué usarlo?

Vea e inserte mensajes manualmente en temas de Kafka si el proyecto los utiliza. Vea mensajes en temas, por ejemplo, para comprobar que todos los datos se transfirieron a los mensajes o que corresponden al mapeo. Insertar mensajes manualmente es útil para simular integraciones de bancos de pruebas o usarlos como marcadores de posición.

Ventajas:

  • los mensajes se almacenan en colas durante mucho tiempo,

  • funcionalidad incorporada para formatear respuestas para el tipo de mensaje (Json, xml, etc.).

Contras:

Referencia de Kafka aquí y aquí

3. Kibana: una herramienta para visualizar y analizar datos de Elasticsearch

Elasticsearch es un sistema de búsqueda y gestión de datos abierto y distribuido. Permite indexar, almacenar, buscar y analizar grandes cantidades de información en tiempo real. Elasticsearch almacena los registros que genera Kibana.

¿Para qué usarlo?

Capture registros de manera conveniente con filtrado flexible. Por ejemplo, casi todas las solicitudes tienen una identificación de seguimiento. También se lo conoce como traceid, un identificador de solicitud único en el sistema de seguimiento que le permite rastrear en detalle el historial de ejecución de solicitudes. Se puede encontrar en la página principal de solicitud en DevTools. Al buscar esta identificación en Kibana, solo se mostrarán los registros asociados con este evento. Kibana también es conveniente para filtrar registros por servicios individuales.

Ventajas:

  • interfaz intuitiva para crear paneles e informes,

  • Grandes posibilidades para filtrar y agregar datos,

  • integración con Elasticsearch para un análisis eficiente de grandes volúmenes de registros,

  • Divide cómodamente los troncos en diferentes partes, cortando las partes innecesarias.

Contras:

Cajas de arena de demostración – enlace

Referencia – aquí

Vale la pena entender que las herramientas enumeradas se pueden utilizar juntas. Cada uno proporciona su propio resumen de los registros, que en conjunto permiten al evaluador formarse una imagen general de lo que está sucediendo y concluir si hay un error o no. Pero sigamos comparando las herramientas en términos de facilidad de uso con el registro.

Openshift le permitirá ver registros más detallados en su forma más pura, como un lienzo continuo de texto. Sí, tendrás que jugar con ellos adicionalmente, pero allí se puede extraer la cantidad máxima de piezas.

Kafka no se puede llamar directamente una herramienta de registro, pero los mensajes que se transmiten entre temas a menudo contienen mucha información útil. A veces devuelven un error. O muestran que el mensaje carece de atributos. Esto es importante durante las comprobaciones de integración.

Kibana está bastante equilibrado en términos de facilidad de uso con registro en comparación con otras herramientas. Es fácil de aprender y, si profundiza, le brindará muchas oportunidades. Un Kibana configurado correctamente le permitirá encontrar rápidamente la información que necesita. Por ejemplo, es conveniente detectar eventos por su traceid. Una gran cantidad de opciones de visualización y filtros, junto con una interfaz intuitiva, son lo ideal aquí.

Herramientas adicionales: Es bastante conveniente trabajar con un registro clásico, como en Openshift, en Notepad++. Maneja fácilmente incluso registros muy largos, tiene muchas teclas de acceso rápido para una edición rápida y una búsqueda adecuada. Los mensajes de Kafka también se ven en Notepad++. Hay complementos que dan formato a los mensajes (por ejemplo, json o xml) en un formato legible.

Vale la pena señalar que Notepad++ sólo está disponible para Windows. Para quienes usan Linux: Vim o Emacs, alternativas para MacOS: VSCode, Zed, SublimeText, etc.

Por dónde empezar antes de trabajar con registros

Desde comprender qué tan importante se registrará la información en los archivos de registro. Esto está determinado por los niveles de registro. La mayoría de las herramientas para trabajar con registros utilizan los siguientes niveles estándar.

  • RASTRO – nivel más bajo de detalle. Se utiliza para registrar la información más detallada sobre la ejecución del programa (valores de variables, pasos de ejecución del algoritmo, etc.). Generalmente no se recomienda utilizar este nivel en producción debido a la gran cantidad de datos registrados.

  • DEPURAR – se utiliza para registrar información de depuración que ayuda a identificar y corregir errores en el código del programa. Este nivel es útil durante el desarrollo y las pruebas de aplicaciones.

  • INFORMACIÓN — se utiliza para registrar información básica sobre el funcionamiento del programa (iniciar y detener servicios, iniciar y finalizar tareas, etc.). Este nivel se utiliza a menudo para monitorear el rendimiento de la aplicación en producción.

  • ADVERTIR – se utiliza para registrar advertencias sobre posibles problemas o situaciones anormales que no son críticas, pero que requieren atención. Por ejemplo, los datos son incorrectos, pero la aplicación sigue funcionando.

  • ERROR – se utiliza para registrar mensajes de error que provocaron que la aplicación no funcionara correctamente o causara problemas graves. Este nivel de registro suele requerir atención inmediata.

  • FATAL — quizás el nivel más alto de tala. Se utiliza para registrar errores críticos que resultaron en fallas de la aplicación o consecuencias graves. Este nivel de registro indica la necesidad de reiniciar la aplicación o el sistema.

¿Qué es importante tener en cuenta al elegir un nivel de registro?

Contexto y finalidad de la tala. Elija un nivel que proporcione un nivel de detalle suficiente, pero que no sobrecargue los archivos de registro con información innecesaria.

Por ejemplo, durante el desarrollo y las pruebas, es apropiado utilizar un nivel de registro más detallado. Mientras que en la producción se debe adoptar un enfoque más cuidadoso y evitar el exceso de detalles.

Además de elegir el nivel de registro, también es importante registrar suficiente información sobre el contexto del evento (hora, ubicación, código de llamada, etc.). Esto le ayuda a comprender mejor por qué ocurren los problemas y los hace más fáciles de depurar y analizar.

Por ejemplo, necesita realizar pruebas de integración de dos servicios con sus colegas. Digamos que el servicio espera un mensaje de sus colegas sobre los detalles de la transacción, para luego poder procesarla y escribirla en la base de datos.

En este caso llevarás el máximo detalle de los registros para que si ocurre algún error puedas ver sus causas. Por ejemplo, podemos ver qué campo no fue procesado por el servicio de nuestra parte o qué valor no se registró en la base de datos.

Cómo leer registros y otros puntos clave de la organización de registro que un evaluador debe conocer

Veamos dos ejemplos de patrones de registro comunes. Puede encontrarlos en OpenShift o Kibana. A partir de ellos intentaré explicar qué hay en los logs y qué significa cada fragmento.

Ejemplo 1

Tomemos una breve lista de eventos:

2023-02-15 10:23:45 (INFO) OBTENER /api/users/123456
2023-02-15 10:24:02 (ERROR) PUBLICACIÓN /api/iniciar sesión
2023-02-15 10:25:12 (ADVERTENCIA) OBTENER /api/products?category=electronics

Averigüemos qué se esconde debajo de todo esto:

2023-02-15 10:23:45: esta es la fecha y hora del evento. En este caso, el hecho ocurrió el 15 de febrero de 2023 a las 10 horas 23 minutos 45 segundos.

(INFORMACIÓN), (ERROR), (ADVERTENCIA): Estos son los niveles de registro o tipos de eventos:

  • (INFORMACIÓN): mensaje informativo. En este caso, se trata de una solicitud exitosa para obtener datos del usuario.

  • (ERROR): mensaje de error. En este caso, se trata de un error cuando el usuario intenta iniciar sesión.

  • (ADVERTIR): advertencia. En este caso, se trata de una advertencia sobre la recepción de datos sobre productos de la categoría electrónica.

OBTENER /api/users/123456, ENVIAR /api/iniciar sesión, OBTENER /api/products?category=electrónica: Estos son métodos HTTP y URL de solicitud.

OBTENER /api/users/123456: solicitud para obtener datos sobre el usuario con identificador 123456 ENVIAR /api/iniciar sesión: solicitud de inicio de sesión del usuario.

OBTENER /api/products?category=electrónica: Solicite una lista de productos con la categoría electrónica.

En este ejemplo, el registro de backend contiene información sobre varias solicitudes HTTP, incluido su tipo, URL y nivel de gravedad del evento (información, error, advertencia).

Ejemplo 2

Tomemos una lista más grande de eventos:

2023-02-15T10:23:45.123456Z (DEBUG) (Thread-1) com.example.Application: Iniciando el proceso de inicialización de la aplicación
2023-02-15T10:24:02.987654Z (ERROR) (Thread-5) com.example.Controller: Error al procesar la solicitud para /api/users/123456
java.lang.NullPointerException: el ID de usuario es nulo
en com.example.Service.getUserById(Service.java:78)
en com.example.Controller.getUserDetails(Controller.java:56)
en com.example.Controller.handleRequest(Controller.java:32)
en sun.reflect.GeneratedMethodAccessor42.invoke (Fuente desconocida)
en sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
en java.lang.reflect.Method.invoke(Method.java:498)
. . .
2023-02-15T10:25:12.345678Z (INFO) (Thread-8) com.example.Application: El proceso de inicialización de la aplicación se completó correctamente

Vamos a solucionarlo. Aquí el registro contiene información:

2023-02-15T10:23:45.123456Z: fecha y hora del evento en formato ISO 8601 con milisegundos y zona horaria.

(DEPURACIÓN), (ERROR), (INFORMACIÓN): niveles de registro.

(Hilo-1), (Hilo-5), (Hilo-8): el nombre del hilo en el que ocurrió el evento. Un hilo es el número de ruta por el que se ejecutan los procesos. Son necesarios para distribuir uniformemente la carga. Conocer el flujo es útil para, por ejemplo, captar un mensaje en el flujo deseado de un tema de Kafka.

com.ejemplo.Aplicación, com.ejemplo.Controlador, com.ejemplo.Servicio: nombre completo de la clase** o componente*** que llamó al registro.

**Una clase es una plantilla de código que crea un objeto.

***El componente es un elemento de software destinado a un uso repetido y puede distribuirse para su uso en otras secciones de código y otros programas en forma de código compilado.

Iniciando el proceso de inicialización de la aplicación, Error al procesar la solicitud para /api/users/123456, El proceso de inicialización de la aplicación se completó correctamente: mensaje de evento o descripción de error.

java.lang.NullPointerException: el ID de usuario es nulo: pila de llamadas y descripción de excepción. Luego la propia pila de llamadas de Java, indicando los métodos y clases que provocaron el error.

Al final, la hora en que se completó la inicialización de la aplicación. Este registro, en comparación con el primero, contiene información más detallada, que incluye:

  • fecha y hora del evento en milisegundos,

  • nivel de registro,

  • nombre del hilo,

  • clase o componente

  • mensaje de evento o error, pila de llamadas y descripción de excepción.

Puntos clave de la organización maderera que un evaluador debe conocer

Característica 1: rotación de archivos

Imaginemos que se establece el registro de datos del sistema. Por ejemplo, escribimos niveles en la aplicación: depuración, información, advertencia, error. Elegimos archivos de texto normales como mecanismo de grabación y los registros se recopilan de forma segura en un lugar separado. Ahora es el momento de ocuparnos de la rotación de registros.

Rotación de archivos de registro — se trata de archivar registros y al mismo tiempo eliminar archivos antiguos y reemplazarlos por archivos recién creados. Mientras se realiza la rotación, los registros se ordenan y se eliminan aquellos archivos a los que ya no es necesario acceder.

Es útil que un evaluador comprenda qué es la rotación. Especialmente por primera vez en el proyecto. Por ejemplo, puedes encontrarte con una situación en la que te piden que mires un ejemplo antiguo, pero no encuentras su mención y comienzas a devanarte los sesos. Y aquí es útil saber el período de rotación del registro, porque la información sobre ese evento podría haberse borrado.

Además, a veces no es posible emular rápidamente un evento que requiere espera. Por ejemplo, crea una solicitud y espera dos semanas para recibir una respuesta. Han pasado dos semanas y tiene un error asociado con esta solicitud, para averiguar los motivos por los que necesita consultar los registros o Kafka de hace dos semanas. Y la rotación de archivos cuesta una semana. En este caso, en el banco de pruebas, si los recursos lo permiten, se puede pedir a los desarrolladores que aumenten temporalmente la rotación.

Característica 2: filtrado

Es importante poder filtrar el flujo de información que contienen los registros. Atributos básicos por los que puedes filtrar el log.

  1. El servicio al que probablemente se relaciona el error.

Los registros a menudo se desglosan por servicio y, al probar una tarea, podemos verificar con el desarrollador a qué servicio está asociada. A continuación, mire el registro en el servicio deseado.

  1. TraceId u otro identificador de evento (si lo hubiera).

Esto le permitirá obtener información sobre el error y los eventos relacionados sin complicaciones innecesarias.

  1. Las fechas no son ideales, pero son un filtro que funciona.

Por ejemplo, cuando abrimos DevTools, vimos que la solicitud produjo un error. Los detalles de la solicitud incluyen el tiempo exacto hasta el milisegundo en el que devolvió una respuesta de error. Y utilizando esta información, puede realizar búsquedas adicionales.

  1. A veces puede encontrar la información necesaria en el registro ingresando la solicitud que se envió en la búsqueda.

  2. En los registros, puede buscar eventos por ID de cuenta de prueba (si, por supuesto, es individual).

Cómo configurar Kafkatool, Kibana, Openshift para un análisis de registros y un diagnóstico de errores efectivos

Kafkatool

Digamos que te has conectado a Kafka por primera vez. Hay dos puntos que vale la pena conocer aquí. Al principio, es posible que no comprenda por qué el mensaje se muestra en este formato y por qué no hay un mensaje detallado en la parte inferior.

En las propiedades del tema, cambie los valores clave a Cadena. Esto se hace para mostrar el valor del mensaje como texto legible en lugar de una matriz de bytes.

A continuación, haga clic en el botón en la parte superior. Revela una interfaz adicional en la parte inferior donde puedes ver los mensajes. Para un formato conveniente, también puede elegir cómo mostrar la respuesta. Kafkatool lo ajustará automáticamente según el tipo de mensaje.

kibana

La siguiente captura de pantalla es un ejemplo de una interfaz de monitoreo de servicios. El camino hacia él varía según el proyecto, pero tiene el mismo aspecto. Es útil saber cómo encontrarlo, ya que en ocasiones algunos errores pueden deberse a que el servicio no esté disponible. La escala de Salud muestra el estado del servicio. Las métricas adicionales a la derecha muestran la latencia y otra información. De nuevo, todo cambia según el proyecto.

Esta captura de pantalla es un ejemplo de una interfaz típica de visualización de registros en Kibana. La barra de búsqueda que vemos es simplemente el milagro que te ayudará a encontrar la información que necesitas. La integración de Elasticsearch le permite filtrar información de manera flexible combinando diferentes consultas. Por ejemplo, puede solicitar un filtro por ID de evento y agregar un filtro para un servicio específico para filtrar los innecesarios. Elasticsearch es una herramienta compleja e interesante. Hay una gran cantidad de guías decentes en su base de datos en Internet.

Es importante mencionar que Kibana también te permite personalizar las columnas de información que se muestran. Por ejemplo, puede ocultar columnas innecesarias con información que probablemente sea más útil para los desarrolladores para la depuración.

turno abierto

Y ya que analizamos las otras herramientas, prestaremos un poco de atención a Openshift. Como mencionamos en la sección “Pros y contras del software del sistema…”, aquí en términos de registros obtenemos registros detallados en su forma más pura. Filtros mínimos, texto máximo. Además de la posibilidad de descargar el registro completo en formato txt durante un período de tiempo determinado. Y luego es más conveniente borrarlo en Notepad ++.

Finalmente, diré sobre las vainas. Un Pod en OpenShift es uno o más contenedores implementados juntos en el mismo host. Lo más probable es que lo único que hagamos con ellos sea reiniciarlos. A veces esto puede ayudar si, por ejemplo, los mensajes ya no llegan al tema de Kafka o se atascan en algún momento. Los compañeros desarrolladores de un proyecto sugirieron la mejor manera de reiniciar rápidamente un pod: eliminarlo. Se recreará y reiniciará automáticamente.

Conclusión

  1. Los registros son archivos que ayudan a acelerar el análisis de problemas en producción y rastrear errores durante todo tipo de pruebas funcionales, desde la unidad hasta la integración.

  2. Para comprender en qué etapa ocurrió el error y a qué registro se debe acceder, es importante centrarse en la clasificación de los registros de errores del servidor.

  3. Openshift te permitirá ver los registros secos, los más detallados. Kafka a veces devuelve un error o faltan atributos. Kibana es la herramienta de registro óptima entre las dos primeras: es conveniente capturar eventos mediante traceid.

  4. Según la importancia que se registrará la información en los archivos de registro, existen niveles de registro, cuya elección es importante según el nivel de detalle y el contexto del evento (hora, ubicación, código de llamada, etc.).

  5. Además de leer registros, son útiles funciones como la rotación y el filtrado de archivos.

Espero que la guía le permita aplicar las recomendaciones para comprender mejor los registros.

Artículos que se utilizaron en la guía y que puedes estudiar:

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *