Cuando se piensa en todos los diferentes servicios y aplicaciones que se ejecutan en un centro de datos, probablemente se considera el rendimiento de cada uno de ellos. Puede que incluso se supervisen esas estadísticas de rendimiento de forma individual. ¿Pero qué pasaría si pudiéramos ver todo como un solo sistema?
Ahí es donde entra la observabilidad. Con la creciente adopción de microservicios y aplicaciones en contenedores, se hace más difícil entender lo que está sucediendo dentro de toda una arquitectura de software.
Estos sistemas suelen estar muy distribuidos, lo que significa que cuando algo va mal, puede ser muy difícil localizar el problema y depurarlo de manera eficiente. En este blog explicaremos por qué la observabilidad es importante dentro de las aplicaciones e infraestructura, para que se puedan identificar los problemas antes de que tengan la oportunidad de afectar a los usuarios.
La observabilidad es la capacidad de inspeccionar y comprender el estado de un sistema o aplicación. En otras palabras, es la capacidad de supervisar y medir cosas como el rendimiento de la aplicación y la utilización de los recursos.
Pero la observabilidad es mucho más que una simple monitorización. Imagina que tienes una aplicación distribuida con microservicios que se ejecutan en contenedores a través de múltiples hosts. La monitorización por sí sola no es suficiente para ayudarte a entender lo que está sucediendo dentro de tu arquitectura de software. Ahí es donde entra la observabilidad.
En producción, un software tiene tres componentes principales:
Si no se puede ver lo que está ocurriendo con la aplicación, no se pueden solucionar los problemas antes de que afecten a los usuarios. Desarrollar y ejecutar software es un proceso iterativo, en el que se prueban nuevas características y se mejora continuamente lo que se ha construido. Pero sin capacidad de observación, la capacidad de iterar rápidamente se verá seriamente limitada.
Digamos que una nueva característica introduce un problema inesperado. Sin observabilidad, no se tendrá ni idea de que esto ha ocurrido y los usuarios serán los primeros en enterarse cuando vean un mensaje de error. Con la observabilidad se puede identificar rápidamente el problema y solucionarlo antes de que tenga la oportunidad de afectar a tus usuarios finales.
La observabilidad también ayuda a identificar más fácilmente los problemas y errores dentro del entorno de la aplicación, como la contención de recursos y los problemas de rendimiento. De este modo, es más fácil solucionar los problemas y resolverlos, para que se pueda volver a lo que realmente importa: la innovación.
Mucha gente confunde la monitorización y la observabilidad, pero en realidad son diferentes. La monitorización es el acto de registrar estadísticas sobre tu aplicación para hacer un seguimiento de cosas como el rendimiento y la utilización de recursos.
Mientras que la observabilidad ayuda a visualizar y entender el estado de tu aplicación, la monitorización registra esas estadísticas y proporciona una forma de verlas más tarde.
Es importante tener en cuenta que la monitorización no es lo mismo que analizar, responder o actuar sobre los datos.
Para lograr una mayor observabilidad en software, queremos encontrar formas de visualizar los datos. Puedes hacer esto instalando métricas y software de registro en cada host individual de la aplicación, o se puede utilizar una solución de monitorización centralizada que visualice los datos en toda la arquitectura.
Estas son algunas de las herramientas que se pueden utilizar para realizar monitoreos:
Si estás construyendo una nueva aplicación, deberías considerar diseñarla teniendo en cuenta la observabilidad. Esto podría incluir la selección de un sistema de registro adecuado. También deberías considerar la posibilidad de supervisar el estado y la disponibilidad de tu aplicación desde el principio. Esto puede ser tan simple como ejecutar algunas pruebas de ping contra sus servidores.
Si ya estás ejecutando una aplicación, todavía hay cosas que puedes hacer para lograr una mayor observabilidad. Por ejemplo, puedes añadir más registros y monitorización a tus sistemas existentes. Esto puede ayudarte a identificar y rastrear los problemas que están afectando a tu aplicación.
Técnicamente, el monitoreo no forma parte esencial de un software que se ejecute en producción, pues este puede ejecutarse sin necesidad de que se despliegue una herramienta de monitorización. Sin embargo, llevar un software a producción sin monitorearlo es mala idea porque:
Una de las medidas de mitigación para problemas en producción es añadir monitoreo, puesto que esto permite detectar y comunicar el problema al equipo correspondiente.
Cuando se trata de construir y ejecutar software, es importante recordar que no se tiene una segunda oportunidad para causar una primera impresión. Si los usuarios ven un error, es probable que simplemente se vayan a otro sitio web. Si la aplicación tiene problemas inesperados, no es probable que se queden para ver si las cosas mejoran.
Para construir un software realmente bueno, es necesario poder ver lo que está sucediendo dentro del sistema en todo momento. Esto significa medir, supervisar y visualizar las métricas de la aplicación para poder identificar y resolver rápidamente los problemas. Y esto no significa que se tiene que hacer todo esto desde cero. Hay servicios disponibles que pueden ayudar a conseguir una mayor observabilidad dentro de los softwares.
Para seguir profundizado tu conocimiento sobre observabilidad y monitorización, te recomiendo el Curso de New Relic: Observabilidad, Monitoreo y Performance Web, donde aprenderas a implementar observabilidad en tus apps, ir más allá del monitoreo y obtener información en tiempo real sobre el rendimiento, el status y todos los puntos claves del negocio de forma automatizada y en tiempo real con New Relic. Cuéntame en los comentarios, ¿qué otras herramientas de monitorización conoces?
El software que estoy utilizando en este momento para el monitoreo de producción es Grafana, que se nutre de los datos que trae elasticSearch de los logs de Java. Tiene varias métricas copadas pero es bastante limitante con algunas cosas (puede ser por la versión que tengo disponible)
ThousandEyes es en software monitoring service que conozco