1. Introducción a la Observabilidad
Published: 2024-06-12 16:57:06

Ante los nuevos desafíos que enfrentamos en el desarrollo de software, la observabilidad surge como una herramienta para ayudarnos a comprender mejor la complejidad de los sistemas, los cuales van creciendo constantemente, brindándonos una visión más clara del estado y funcionamiento de nuestras aplicaciones.

------
## ¿Qué es la Observabilidad?
La observabilidad viene a ser la capacidad de comprender y diagnosticar el estado interno de sistemas complejos a través de la monitorización y el análisis de sus salidas externas. Esto con el fin de detectar problemas internos y la manera en la que el sistema trabaja. Originariamente, el concepto de observabilidad proviene de la Teoría del Control, la cual va enfocada al análisis de sistemas dinámicos y que se ha ido adoptando en diferentes disciplinas como en la Ingeniería de Software.

------
## ¿Por qué es importante la observabilidad en el Desarrollo de Software?

La observabilidad es fundamental en el desarrollo de nuestra aplicación, ya que nos ayuda a optimizar y mejorar el nivel de rendimiento y calidad de servicio que se brinda. Dos conceptos importantes relacionados en este proceso son: **SLA** (Acuerdos de nivel de servicio) y **KPI** (Indicadores clave de desempeño).

Mientras los SLAs son los estándares y niveles mínimos que se debe cumplir para mantener la satisfacción del cliente, los KPIs nos brindan información para evaluar el rendimiento de la aplicación en relación a los objetivos planteados.

La observabilidad nos permite llegar al diagnóstico y resolución de problemas de manera más rápida y eficaz, incluso cuando se trata de problemas desconocidos e impredecibles, ayudándonos con una mejor toma de decisiones para la optimización y mejora de nuestro servicio.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/09bago8t4pzzltjmkivl.png)


------
## Principales funciones de la observabilidad

- Recolección de datos como logs, métricas y trazas de ejecución

- Comprensión del funcionamiento interno de nuestra aplicación

- Diagnóstico e Identificación de problemas

- Toma de decisiones informada

- Monitoreo de SLAs y KPIs

- Optimización de la aplicación

- Mejora de la experiencia del usuario

- Mejora continua

-----
## Conceptos claves relacionados a la observabilidad

### 1. Logs

Vienen a ser la recopilación  de información acerca de eventos relevantes generados por la aplicación; esto permite tener un historial útil para la búsqueda y análisis de los eventos para la identificación de problemas.

### 2. Métricas

En la observabilidad, las métricas son indispensables, ya que son los valores cuantificables que proporcionan información acerca del comportamiento y rendimiento del sistema. Los tipos de métricas más comunes son: La latencia, Tiempo de respuesta, Número de peticiones, Uso de CPU y Memoria, Tiempo de Inactividad, etc.

### 3. Trazas

Son registros detallados de diferentes servicios relacionados en un flujo de ejecución, que proporcionan una visualización de extremo a extremo basada en las solicitudes y respuestas. Estas trazas ayudan a identificar qué componente o parte del sistema está generando posibles cuellos de botella, errores en el funcionamiento, problemas de rendimiento, entre otros.

> Los Logs, Trazas y Métricas vienen a ser los tres pilares fundamentales de la observabilidad que nos permite tener una visualización holística del funcionamiento de nuestro sistema, por lo que es importante la relación entre ellos para el correcto análisis y diagnóstico de problemas como mejora de rendimiento y calidad del software.
### 4. Monitoreo

El monitoreo viene a ser un conjunto de herramientas que permiten saber el estado y rendimiento del sistema. En el desarrollo de software, el monitoreo implica la supervisión de métricas e indicadores clave para verificar el funcionamiento del sistema, como también contar con un sistema de alertas para tratar los problemas que se presenten.

### 5. Telemetría

Es la capacidad de recopilar datos de los eventos de un sistema de manera externa. Éste es un concepto usado en varios campos como la ciencia y medicina; en el caso del desarrollo de software, la telemetría hace referencia a la recopilación de datos en tiempo real como las métricas, registros (logs), eventos y trazas del sistema, para que se pueda hacer seguimiento de manera externa.

### 6. Instrumentación

En el desarrollo de software, la instrumentación implica la inserción de código dentro de la aplicación en puntos clave para la recopilación de datos necesarios sobre su funcionamiento (métricas, logs, eventos y trazas).

### 7. Visualización

Es la representación de los datos recolectados de manera clara y organizada para facilitar el monitoreo e identificación de anomalías del sistema. Algunas herramientas usadas para lograr esto son: Paneles (Dashboards), gráficos y tablas.

### 8. Alertas

Son herramientas que ayudan a la identificación de problemas a través de la notificación de eventos críticos que requieran atención inmediata. Estas notificaciones son previamente configuradas en base a umbrales y permiten tener respuestas proactivas.

### 9. Cultura de Observabilidad

El factor humano viene a ser muy importante, ya que son las personas y equipos quienes realizan el monitoreo y toma de decisiones, así como también la resolución de problemas y optimización del sistema. Es por eso que se debe desarrollar una cultura de observabilidad en donde se comprenda su impacto y se fomente la colaboración y comunicación entre los colaboradores para garantizar la fiabilidad y rendimiento del sistema.

----

En este artículo hemos explorado la importancia e impacto de la observabilidad en el ámbito del desarrollo de software, así como también los conceptos esenciales para empezar a adaptarlos en nuestras organizaciones. La observabilidad requiere una implementación integral y para que realmente se logren los objetivos, es necesario tanto la parte técnica como la cultura dentro de la organización.