Articulo de referencia

Rastreo (software)

El rastreo en ingeniería de software se refiere al proceso de capturar y registrar información sobre la ejecución de un programa de software. Esta información suele ser utilizad...

El rastreo en ingeniería de software se refiere al proceso de capturar y registrar información sobre la ejecución de un programa de software. Esta información suele ser utilizada por los programadores para fines de depuración y, además, dependiendo del tipo y detalle de la información contenida en un registro de rastreo, por administradores de sistemas experimentados o personal de soporte técnico y por herramientas de monitoreo de software para diagnosticar problemas comunes con el software. [ 1 ] El rastreo es una preocupación transversal .

No siempre existe una distinción clara entre el rastreo y otras formas de registro , salvo que el término rastreo casi nunca se aplica al registro que es un requisito funcional de un programa (excluyendo, por lo tanto, el registro de datos de una fuente externa, como la adquisición de datos en un experimento de física de altas energías , y el registro de escritura anticipada ). Los registros que registran el uso del programa (como un registro del servidor ) o los eventos del sistema operativo que interesan principalmente a un administrador del sistema (véase, por ejemplo, el Visor de eventos ) se encuentran en una zona gris terminológica.

El rastreo se utiliza principalmente para la detección de anomalías, el análisis de fallas, la depuración o con fines de diagnóstico en sistemas de software distribuidos, como microservicios o funciones sin servidor. [ 2 ]

Rastreo de software

El rastreo de software es una herramienta que los desarrolladores utilizan para recopilar información para la depuración. Esta información se usa tanto durante los ciclos de desarrollo como después del lanzamiento. A diferencia del registro de eventos, el rastreo de software generalmente no tiene el concepto de "clase" de evento ni de "código de evento". Otras razones por las que las soluciones de registro de eventos basadas en códigos de evento no son apropiadas para el rastreo de software incluyen:

  • Dado que el rastreo de software es de bajo nivel, a menudo se requieren muchos más tipos de mensajes que definir, muchos de los cuales solo se usarían en una parte específica del código. El paradigma de código de eventos introduce una sobrecarga de desarrollo significativa para estos mensajes de uso único.
  • Los tipos de mensajes que se registran suelen ser menos estables a lo largo del ciclo de desarrollo que los del registro de eventos.
  • Dado que la información de seguimiento está destinada al desarrollador, los mensajes no necesitan estar localizados. Por lo tanto, es importante mantener los mensajes de seguimiento separados de otros recursos que sí necesitan estar localizados (como los mensajes de eventos).
  • Hay mensajes que nunca deberían verse .
  • Los mensajes de seguimiento deben mantenerse en el código, ya que pueden mejorar su legibilidad. Esto no siempre es posible ni factible con las soluciones de registro de eventos.

Herramientas

OpenTelemetry es un proyecto de código abierto de la CNCF que proporciona soporte integral para el rastreo distribuido. [ 3 ] Algunos proveedores, incluidos Datadog , Dynatrace , New Relic y Splunk, también ofrecen servicios SaaS de rastreo. [ 4 ]

Google y Meta han desarrollado sus propios marcos de rastreo, llamados Dapper y Canopy respectivamente. [ 2 ]

Seguimiento específico de la aplicación

Rastreo específico del sistema

En los sistemas operativos, el rastreo se puede utilizar en situaciones (como el arranque ) donde algunas de las tecnologías utilizadas para proporcionar el registro de eventos pueden no estar disponibles.

Linux ofrece capacidades de rastreo a nivel de sistema y de usuario mediante marcadores del kernel y LTTng . ftrace también admite el rastreo del kernel de Linux. syslog es otra herramienta presente en varios sistemas operativos para registrar y rastrear mensajes del sistema.

FreeBSD y SmartOS emplean DTrace para el rastreo tanto en el espacio de usuario como en el espacio del kernel .

En el software embebido , el rastreo también requiere técnicas especiales para una instrumentación y registro eficientes y una baja sobrecarga de CPU. [ 6 ]

Técnicas

Generación y recopilación de trazas

La generación de trazas de llamadas a métodos se puede realizar mediante instrumentación del código fuente, recopilación de información en tiempo de ejecución o bajo el control del depurador. [ 7 ] Se pueden emplear macros de traza, programación orientada a aspectos y técnicas de instrumentación relacionadas .

Las bibliotecas utilizadas en el código fuente envían datos a un agente o directamente al componente de recopilación. [ 4 ]

Análisis de trazas

Para modelar árboles de ejecución, ISVis convierte un árbol con raíz en un grafo dirigido acíclico, mientras que Jinsight utiliza el principio de marco de llamada para recopilar y representar información acumulativa sobre trazas. [ 7 ]

El método de visualización principal es la vista de carriles, ejemplificada por herramientas como Jaeger , que a menudo incluye anotaciones y atributos clave-valor. A pesar de su uso generalizado, este diseño carece de una justificación rigurosa y los usuarios frecuentemente se enfrentan a problemas como la falta de funcionalidades y una navegación confusa. Existen alternativas a las vistas de carriles, como la vista de dependencia de servicios de Jaeger o las vistas de lista, árbol y tabla de SkyWalking. Las visualizaciones agregadas también se utilizan para analizar grandes volúmenes de trazas, con sistemas como Canopy que ofrecen métricas consultables y Jaeger que proporciona funciones de comparación de trazas. [ 8 ]

Registro de eventos

El registro de eventos proporciona a los administradores de sistemas información útil para el diagnóstico y la auditoría . Los distintos tipos de eventos que se registrarán, así como los detalles que aparecerán en los mensajes, suelen definirse al inicio del ciclo de desarrollo. Muchas tecnologías de registro de eventos permiten, e incluso exigen, que a cada tipo de evento se le asigne un código único. Este código es utilizado por el software de registro de eventos o por un visor independiente (por ejemplo, el Visor de eventos) para formatear y generar un mensaje legible. Esto facilita la localización y permite a los administradores de sistemas obtener información sobre los problemas que se produzcan con mayor facilidad.

Dado que el registro de eventos se utiliza para registrar información de alto nivel (a menudo información sobre fallos), el rendimiento de la implementación del registro suele ser menos importante.

Una preocupación especial, que consiste en evitar que se registren eventos duplicados "con demasiada frecuencia", se soluciona mediante la limitación de eventos.

Las dificultades para establecer una distinción clara entre el registro de eventos y el rastreo de software surgen del hecho de que algunas de las mismas tecnologías se utilizan para ambos, y además porque muchos de los criterios que los diferencian son continuos en lugar de discretos. La siguiente tabla enumera algunas distinciones importantes, aunque no precisas ni universales, que los desarrolladores utilizan para seleccionar tecnologías para cada propósito y que guían el desarrollo independiente de nuevas tecnologías en cada área:

Desafíos y limitaciones

Habilitar o deshabilitar el rastreo durante la ejecución suele requerir la inclusión de datos adicionales en el binario. Esto puede provocar una degradación del rendimiento, incluso cuando el rastreo no está activo. La sobrecarga del rastreo depende del marco de trabajo utilizado y de las funciones activadas; [ 9 ] en servidores de producción, existe una compensación entre el nivel de detalle del rastreo y la sobrecarga resultante.

Si el rastreo está habilitado o deshabilitado en tiempo de compilación , la recopilación de datos de rastreo del sistema de un cliente depende de su voluntad y capacidad para instalar una versión del software específicamente habilitada para el rastreo y, posteriormente, replicar el problema.

El rastreo en software generalmente exige altos estándares de robustez , no solo en la precisión y confiabilidad del resultado del rastreo, sino también para garantizar que el proceso que se está rastreando permanezca ininterrumpido.

Debido a su naturaleza de bajo nivel, el rastreo puede generar un gran volumen de mensajes. Para mitigar los problemas de rendimiento, a menudo es necesario contar con la opción de desactivar el rastreo de software, ya sea durante la compilación o en tiempo de ejecución.

Seguridad y privacidad

En el software propietario , los datos de seguimiento pueden incluir información confidencial sobre el código fuente del producto .

Véase también

Referencias

  1. "El libro de rastreo" . Archivado del original el 24 de febrero de 2009.
  2. 1 2 Li, Bowen; Peng, Xin; Xiang, Qilin; Wang, Hanzhang; Xie, Tao; Sun, Jun; Liu, Xuanzhe (2022). " Disfruta de tu observabilidad: un estudio industrial del rastreo y análisis de microservicios" . Ingeniería de software empírica . 27 (1): 25. doi : 10.1007/s10664-021-10063-9 . ISSN 1382-3256 . PMC 8629732. PMID 34867075 .   
  3. Mandel, Maya (2023-06-07). "Publicación del Consejo: Rastreo distribuido: La clave para la observabilidad de los microservicios" . Forbes . Recuperado el 2024-01-12 .
  4. 1 2 Janes, Andrea; Li, Xiaozhou; Lenarduzzi, Valentina (2023). "Herramientas de rastreo abiertas: descripción general y comparación crítica" . Journal of Systems and Software . 204 111793. Elsevier BV. arXiv : 2207.06875 . doi : 10.1016/j.jss.2023.111793 . ISSN 0164-1212 . 
  5. "Puntos de rastreo (depuración con GDB)" . sourceware.org . Consultado el 24 de junio de 2022 .
  6. Kraft, Johan; Wall, Anders; Kienle, Holger (2010), "Grabación de trazas para sistemas embebidos: lecciones aprendidas de cinco proyectos industriales" , Runtime Verification , Springer Berlin Heidelberg, pp. 315–329 , doi : 10.1007/978-3-642-16612-9_24 , ISBN  9783642166112
  7. 1 2 Mertz, Jhonny; Nunes, Ingrid (2019). Sobre la viabilidad práctica de la monitorización de software: un marco para el seguimiento de la ejecución de bajo impacto . CASCON '04: Actas de la conferencia de 2004 del Centro de Estudios Avanzados sobre Investigación Colaborativa. IEEE. págs. 169–180 . doi : 10.1109/SEAMS.2019.00030 . ISBN  978-1-7281-3368-3.
  8. Davidson, Thomas; Wall, Emily; Mace, Jonathan (2024). "Un estudio cualitativo mediante entrevistas sobre la visualización de trazado distribuido: una caracterización de los desafíos y las oportunidades". IEEE Transactions on Visualization and Computer Graphics . 30 (7): 3828– 3840. doi : 10.1109/TVCG.2023.3241596 .
  9. Reichelt, DG; Kühne, S.; Hasselbring, W. (2021). Comparación de sobrecarga de OpenTelemetry, inspectIT y Kieker (PDF) . Simposio sobre rendimiento de software. Vol. 3043. CEUR-WS.org.