Observabilidad e Instrumentaci贸n

La observabilidad e instrumentaci贸n se refiere al proceso de a帽adir c贸digo o herramientas a un sistema para adquirir y analizar datos acerca de su comportamiento y desempe帽o. Estos datos pueden ser usados para obtener conocimientos sobre el funcionamiento interno del sistema, permitir resolver problemas y mejorar su desempe帽o en general.

La observabilidad e instrumentaci贸n consiste en a帽adir capacidades de monitoreo y generaci贸n de registros (logs) a un sistema. Esto es a帽adir c贸digo para registrar m茅tricas como los tiempos de respuesta, tasa de error y utilizaci贸n de recursos. Tambi茅n a帽ade registrar eventos y capturar trazas de error (stack traces) para proporcionar informaci贸n detallada sobre la ejecuci贸n de un sistema.

Tambi茅n puede incluir herramientas de traza distribuidas para tener un seguimiento de un request cuando viaja por m煤ltiples componentes de un sistema. Esto puede ayudar a descubrir cuellos de botella y problemas de desempe帽o (perfomance).

Al instrumentar un sistema para observabilidad, los desarrolladores y operadores pueden obtener una comprehensi贸n m谩s profunda de c贸mo el sistema se comporta en tiempo real. Esto permite a ellos identificar y resolver r谩pidamente los problemas, mejorar el desempe帽o del sistema y tomar decisiones informadas sobre escalamiento y planificaci贸n de capacidad.

驴Por qu茅 usar Observabilidad e Instrumentaci贸n?

La observabilidad e instrumentaci贸n es usada para obtener informaci贸n sobre el comportamiento y desempe帽o de un sistema. Algunas razones para implementar son:

  • Resolver problemas e incidentes: Al instrumentar un sistema los desarrolladores y operadores pueden obtener datos sobre el comportamiento y desempe帽o. Estos datos pueden ser usados para identificar e solucionar incidentes, como tiempos de respuesta lentos, errores o cuellos de botella de recursos. Ayudan a identificar r谩pidamente la causa ra铆z de un prolema y resolverlo eficientemente.

  • Mejora de desempe帽o: Proporciona visibilidad en el desempe帽o de un sistema. Al obtener m茅tricas como tiempos de respuesta, tasas de error y utilizaci贸n de recursos, los desarrolladores pueden identificar 谩reas que necesiten optimizaci贸n. Se puede tomar decisiones informadas para afinaci贸n del desempe帽o, escalamiento y optimizaci贸n de la asignaci贸n de recursos.

  • Planificaci贸n de capacidad y escalamiento: Al monitorear y analizar los datos obtenidos a trav茅s de la observabilidad e instrumentaci贸n, los desarrolladores pueden entender las exigencias y los patrones de uso de recursos de un sistema. 脡sta informaci贸n es valiosa para la planificaci贸n de recursos y decisiones de escalamiento. Ayuda a determinar cuando a帽adir m谩s recursos o escalar horizontalmente para manejar el tr谩fico o exigencias de la tarea.

  • Monitoreo y alertas proactivas: La observabilidad e instrumentaci贸n permiten el monitoreo proactivo de un sistema. Al establecer alertas basadas en l铆mites o anomal铆as los desarrolladores pueden ser notificados de potenciales incidentes antes de que los usuarios finales sean impactados. Esto permite una mitigaci贸n proactiva y previene potenciales cortes de servicio o degradaci贸n del desempe帽o.

  • Comprender el comportamiento del sistema: Proporciona conocimiento profundo de c贸mo un sistema se comporta en tiempo real, ayudando a entender el flujo de de peticiones (requests), dependencias entre componentes y el impacto de los cambios. Este conocimiento es crucial para depurar incidentes complejos, optimizar desempe帽o y realizar decisiones de arquitectura informadas.

Beneficios

La observabilidad e instrumentaci贸n puede ser usada por una gran variedad de stakeholders involucrados en el desarrollo y operaciones de un sistema. Ayuda a la colaboraci贸n, resoluci贸n de problemas, optimizaci贸n de desempe帽o y toma de decisiones informada.

驴Por qu茅 usar un SDK?

El uso de bibliotecas de observabilidad da varios beneficios importantes como los siguientes:

  • Estandarizaci贸n de la instrumentaci贸n: Las bibliotecas de observabilidad proporcionan una forma estandarizada de instrumentar c贸digo para prop贸sitos de observabilidad. Ofrecen integraciones listas para usar y una API que facilita obtener y exponer puntos de datos relevantes, m茅tricas, logs y trazas. Esto permite una consistencia y uniformidad de c贸mo la instrumentaci贸n es implementada a trav茅s de distintos componentes de un sistema.

  • Implementaci贸n simplificada: Las bibliotecas de observabilidad crean una capa de abstracci贸n a las complejidades de instrumentar c贸digo para observabilidad. Esto proporciona interfaces de f谩cil uso y frameworks que simplifican el procesos de a帽adir monitoreo, logging y capacidades de trazabilidad a un sistema. Esto ahorra tiempo de desarrollo y esfuerzo, permitiendo a equipos enfocarse en construir y mejorar sus aplicaciones.

  • Obtenci贸n de datos consistente: Un SDK de observabilidad permite obtener datos de forma confiable y consistente de diferentes partes del sistema. Pueden manejar los detalles de obteneci贸n de datos, agrupaci贸n y formateo, lo que permite obtener datos de forma estandarizada y precisa. La consistencia es de vital importancia para un an谩lisis efectivo y resoluci贸n de problemas.

  • Optimizaci贸n del desempe帽o: Los SDK tienen capacidades de optimizar el desempe帽o. Proporcionan informaci贸n sobre cuellos de botella del sistema, utilizaci贸n de recursos y tiempos de respuesta, permitiendo a los desarrolladores identificar las 谩reas que necesitan optimizaci贸n. Al utilizar los datos obtenidos desde la observabilidad e instrumentaci贸n, los equipos pueden mejorar iterativamente mejorando el desempe帽o de las aplicaciones.

  • Resoluci贸n y depuraci贸n de problemas mejorada: Los SDK dan mejores herramientas para resolver problemas y depuraci贸n de errores ya que proporcionan informaci贸n detallada acerca del comportamiento del sistema. Ayudan a capturar y registrar eventos, capturar stacks de error y permitir una trazabilidad distribuida. Esto logra facilitar comprender el flujo de las requests e identificar problemas. Permitiendo acelerar el proceso de identificar y resolver problemas, reduciendo los tiempos muertos y mejorando la robustez del sistema.

  • Colaboraci贸n y visibilidad funcional cruzada: Utilizar SDK tambi茅n proporciona y promueve la colaboraci贸n y visibilidad funcional cruzada (cross-functional). Equipos diversos como desarrolladores, operarios y QA pueden obtener el mismo conjunto de herramientas de observabilidad y datos para obtener informaci贸n sobre el comportamiento del sistema. 脡sta visibilidad compartida promueve mejor comunicaci贸n, facilita el an谩lisis de causa ra铆z y permite a los equipos trabajar juntos para mejorar la robustez y desempe帽o de los sistemas.

Componentes de la Instrumentaci贸n

Un sistema correctamente instrumentado debe emitir tazas, m茅tricas y registros que permiten tener una observabilidad del sistema y su entorno.

Trazas (traces)

Las trazas proporcionan una vista de 谩guila de lo que pasa cuando una solicitud (request) es realizada al sistema. Independiente si una aplicaci贸n es un monolito con una base de datos 煤nica o un sofisticado sistema de servicios interconectado, las trazas son escenciales para comprender todo el recorrido que una solicitud tiene en la aplicaci贸n.

M茅tricas (metrics)

Las m茅tricas son una medici贸n de un servicio capturada en el tiempo de ejecuci贸n. El capturar una medici贸n se conoce como evento m茅trico (metric event), el cual consiste no solo en la medici贸n como tal, si no tambi茅n el tiempo en el que fue capturada y la metada asociada.

Las m茅tricas de aplicaci贸n y request son indicadores importantes de la disponibilidad y desempe帽o de un sistema. M茅tricas personalizadas proporcionan conocimiento sobre los indicadores que impactan la experiencia de usuario o negocio. Los datos obtenidos pueden ser usados para alertar de un corte de servicios o gatillar decisiones programadas para escalar o desplegar una aplicaci贸n autom谩ticamente dependiendo de la alta demanda.

Registros (logs)

Un registro (log) es un texto con marca de tiempo (timestamp), el cual esta estructurado (recomendado) o no estructurado con metadata opcional. De todas las se帽ales de telemetr铆a, los registros (logs) son los m谩s usados y venerables. La mayor铆a de lenguajes de programaci贸n tienen capacidades de generar registros o bibliotecas estandarizadas y robustas de registros (logging).

Open Telemetry

Open Telemetry facilita la instrumentaci贸n de los sistemas. Para que un sistema sea observable debe ser instrumentado, esto significa que los componentes del sistema deben emitir traces (trazas), metrics (m茅tricas) y logs (registros). Al usar Open Telemetry se puede instrumentar de dos formas:

  • Utilizar soluciones basadas en c贸digo a trav茅s del uso de SDK oficiales disponibles para gran cantidad de tecnolog铆as.

  • Utilizar soluciones basadas en "Zero Code".

Ambas opciones son complementarias y pueden ser usadas al mismo tiempo.

SDK

La soluci贸n utilizando el SDK permite obtener una telemetr铆a rica y profunda de la aplicaci贸n. Permite usar el API de Open Telemetry para generar telemetr铆a del sistema, lo que es un gran complemento de la telemetr铆a generada por la opci贸n de "Zero Code".

Zero Code

Es una gran opci贸n para comenzar o cuando no se puede modificar la aplicaci贸n que necesite ser instrumentada. Proporcionan telemetr铆a abundante de las bibliotecas usadas o del ambiente donde el sistema se ejecuta. Una forma de verlo es que dan informaci贸n sobre qu茅 es lo que est谩 pasando en la periferia del sistema.

Uso

Siempre es recomendable utilizar el SDK de Open Telemetry, sin embargo en el caso de no estar disponible para el sistema o las tecnolog铆as usadas, se debe recurrir a la instrumentaci贸n manual, tratando de crear una capa de abstracci贸n compatible con Open Telemetry.

Uso de OpenTelemetry
Figure 1. Uso de OpenTelemetry