Las aplicaciones modernas suelen tejer un impresionante entramado subyacente de arquitectura de microservicios con tecnologías serverless y de contenedores que garantizan que tu servicio funcione a la perfección para tus clientes. Lamentablemente, cuando surgen problemas con una aplicación y tienes que atenderlos a las 3 de la mañana, ese tapiz de microservicios deja de ser el bello diseño formado por equipos que trabajan en armonía para convertirse más bien en un nudo confuso y difícil de desenredar. 

Para llegar rápidamente a la raíz de los problemas de rendimiento de la aplicación (y poder descansar más tranquilo en la noche), tendrás que confiar en las prácticas de observabilidad para dirigir tu atención ahí donde se originan los problemas. En el contexto de los microservicios, tendrás que preguntarte si el  monitoreo de logs es suficiente para proporcionarte suficiente información sobre las aplicaciones. ¿Deberías agregar otros tipos de monitoreo para tener un panorama más completo? Configurar herramientas puede necesitar el tiempo y los recursos que podrían invertirse en otro trabajo. 

¿Cuándo debes usar el monitoreo de logs?

El monitoreo de logs, o logging, es un método para hacer seguimiento y almacenar datos con el fin de garantizar la disponibilidad de las aplicaciones y al mismo tiempo evaluar el impacto de las transformaciones en el rendimiento. ¿Suena formidable, no? Además, el logging se usa ampliamente. Más del 73% de los equipos de DevOps emplean la administración de logs y el análisis para monitorear sus sistemas. Sin embargo, usar logging como la única solución, tiene grandes desventajas. 

Cuando el monitoreo de logs
no es suficiente

El logging manual puede consumir mucho tiempo y no tener equilibrio

Organizar los logs es un proceso tedioso que se presta a errores. Puedes pasar horas configurando los niveles de granularidad adecuados en tus logs, y luego darte cuenta de que no ayuda mucho en la producción cuando necesitas información exacta para saber qué salió mal en tu aplicación. 

Agregar información nueva sobre los procesos de depuración en los archivos de logs consume mucho tiempo valioso, con la particularidad de que tienes que identificar de antemano cada fragmento de datos que puede necesitarse. (Si tienes suerte, podrías recurrir a una bola de cristal para anticipar cualquier problema potencial.)

Tienes que crear el equilibrio perfecto de logs cuando vas a depurar código, lo que significa añadir solo lo necesario para depurar cualquier problema dentro de un  programa rápidamente. Si no proporcionas suficiente información en tus logs, no tendrás suficiente información para depurar. Pero si agregas demasiada, puedes provocar un consumo de recursos excesivo puesto que tendrás que analizar una gran cantidad de logs. (De nuevo, te vendría bien aprender a adivinar con esa bola de cristal.)

El logging puede ser difícil de rastrear
en muchos servicios

Si tu aplicación es como la mayoría de las que hay disponibles, significa que usa innumerables servicios, contenedores y procesos. Por lo tanto, para resolver problemas relacionados con el rendimiento de la aplicación puede ser necesario comprender todas las relaciones que existen entre los distintos logs. Si tú mismo has tejido toda la aplicación, quizás puedas conectar todos los hilos, sin problemas. Pero aún así, tendrás que leer todo el texto sin procesar de los logs para recordar cómo se conecta todo. 

Si necesitas explicar esas conexiones a alguien más, probablemente la forma más rápida de hacerlo es visualmente, mostrando la profundidad de un problema dentro del nido de microservicios. Pero como los logs solo reportan texto, tendrás que pasar más tiempo dibujando un gráfico o conversándolo con tus colegas. 

Si tienes un entorno complejo o híbrido, obtener el panorama completo de tu sistema y su rendimiento general podría consumir demasiado tiempo y esfuerzo con la idea de proporcionar información suficiente ante un problema potencial. 

¿Qué es la instrumentación? 

La instrumentación es el proceso de agregar código a tu aplicación para que puedas comprender su estado interior. Las aplicaciones instrumentadas miden qué está haciendo el código cuando responde a solicitudes activas y lo hace recopilando datos como métricas, eventos, logs y trazas (MELT). Entonces, cuando instrumentas por completo, configuras cómo deseas monitorear los logs y también defines cómo visualizarás otros datos que pueden darte más información sobre tu sistema.

A diferencia de una aplicación que no está instrumentada y utiliza solamente los logs que se captan en un momento dado, una aplicación instrumentada hace seguimiento de toda la información posible sobre las operaciones y el comportamiento del servicio. Y proporciona más detalles de lo que está pasando para que puedas ver las relaciones entre las solicitudes. 

Ventajas de instrumentar completamente una aplicación

La instrumentación más allá del monitoreo de logs proporciona información más amplia 

A pesar de lo increíblemente útil que es, la instrumentación es un aspecto del desarrollo de software que a menudo pasa desapercibido. Mucha gente tiene la percepción de que puede ser difícil dar los primeros pasos y de que podría no ofrecer la misma rentabilidad que simplemente utilizar los logs. Pero la instrumentación es imprescindible para garantizar que tu aplicación rinda al máximo. Proporciona visibilidad inmediata de la aplicación, por lo general a través de gráficos que ilustran lo que pasa en el interior.

Una vista completa de todas las aplicaciones y el entorno operativo

Con los datos analizados que proporciona la instrumentación, puedes resolver de inmediato los problemas a deshoras gracias a la gran cantidad de datos disponibles para la depuración.

Con la instrumentación adecuada, puedes observar entornos complejos más integralmente

También puedes usar la instrumentación para ver patrones más grandes que ocurren a través del tiempo y que no advertirías si utilizaras solo los datos de logs captados en un momento dado. Esto te puede ayudar a mejorar tu aplicación en su totalidad en lugar de solo reparar agujeros. Es importante considerar la instrumentación como un proceso iterativo capaz de revelar información oculta, en lugar de una solución inmediata para problemas individuales. 

La instrumentación de tu aplicación proporciona información rápida acerca de cómo cada uno de los componentes individuales se está comportando y cómo está rindiendo, además de cómo están interactuando y comunicándose entre ellos. Eso quiere decir que estarás en capacidad de monitorear y analizar eficazmente los sistemas distribuidos: un desafío importante.

¿Debo depender solo del monitoreo de logs? 

El monitoreo de logs es solo un subconjunto del monitoreo que establecerás cuando instrumentes tu aplicación. Una instrumentación completa debe incluir el monitoreo para otras señales, de modo que deberías elegir una herramienta de plataforma completa para obtener la mejor información sobre el rendimiento de tu aplicación. 

Necesitarás la información granular para los logs para casos determinados y el monitoreo de eventos, trazas y otras señales para otros casos de uso. Con una aplicación completamente instrumentada, podrás mantenerte al día de lo que pasa en tu sistema, incluso frente a la complejidad y la dinámica. Pueden ser sistemas distribuidos o aplicaciones de muchos niveles: no importa, contarás con la visibilidad que necesitas, más allá de un simple mar de datos de logs complicados. Y cuando veas los logs en el contexto de los otros datos de telemetría, te resultará más fácil resolver los problemas.