En 2021, la "observabilidad" está a punto de convertirse en una palabra de moda. Esto se debe quizás a que, durante años, la monitorización no estaba tan estandarizada en el desarrollo de software. El rastreo se ha pensado menos, y las aplicaciones producían registros en diferentes formatos y estilos. Sin capas unificadoras para analizar un número creciente de servicios, esto conducía a un caos de análisis de aplicaciones desordenado.
Ahora, con la tecnología nativa de la nube, los ingenieros no intentan repetir estos errores del pasado. Además, con el aumento de las expectativas de los usuarios y las exigencias de las innovaciones digitales, ahora se presta más atención al mantenimiento de la estabilidad, el rendimiento y la disponibilidad generales. Esto ha dado lugar al crecimiento de las herramientas de observabilidad y análisis. Estos proyectos de código abierto están haciendo que los registros sean más procesables, rastreando eventos con metadatos detallados y exponiendo valiosas métricas de los entornos Kubernetes. Esta información puede servir de base para las métricas de negocio, ayudar a identificar los errores y estimular las medidas de recuperación rápida. Por estas razones, la observabilidad profunda en toda la pila de aplicaciones nativas de la nube es una necesidad.
Por lo tanto, a continuación exploraremos seis proyectos CNCF bien establecidos relacionados con la observabilidad, la telemetría y el análisis. Muchos de estos proyectos ayudan a recopilar y gestionar datos de observabilidad como métricas, registros y trazas.
1. Prometheus
El popular sistema de monitorización y base de datos de series temporales
Prometheus es el proyecto CNCF graduado más popular relacionado con la observabilidad y probablemente no necesita presentación, ya que muchos ingenieros ya están familiarizados con él. Grandes empresas como Amadeus, Soundcloud, Ericsson y otras ya utilizan Prometheus para impulsar sus sistemas de monitorización y alerta.
Prometheus lleva incorporado el descubrimiento de servicios y funciona recogiendo datos a través de un modelo pull sobre HTTP. A continuación, almacena las métricas organizadas como pares clave-valor de series temporales. Estas métricas pueden adaptarse a la aplicación en cuestión y configurarse para activar alertas; por ejemplo, un sitio de comercio electrónico puede necesitar identificar los tiempos de carga lentos para seguir siendo competitivo. Prometheus tiene grandes capacidades de consulta; el lenguaje de consulta PromQL puede utilizarse para buscar datos y generar visualizaciones.
Un entorno de Prometheus está compuesto por el servidor principal de Prometheus, las bibliotecas de cliente, una pasarela push, exportadores de propósito especial, un gestor de alertas y varias herramientas de apoyo. Para empezar, los desarrolladores pueden revisar la guía de inicio aquí.
2. Jaeger
Código abierto, rastreo distribuido de extremo a extremo
Con la evolución hacia los sistemas distribuidos, el proceso de depuración, conexión en red y soporte de la observabilidad de muchos componentes se ha vuelto exponencialmente más difícil. Jaeger es un proyecto que pretende resolver este dilema; está diseñado para "monitorizar y solucionar problemas de transacciones en sistemas distribuidos complejos". Según la documentación, sus características son las siguientes
Propagación del contexto distribuido
Monitorización de transacciones distribuidas
Análisis de la causa raíz
Análisis de dependencia de servicios
Optimización del rendimiento/latencia
Jaeger trabaja implementando varias API para recuperar datos. Estos datos siguen el estándar OpenTracing, que organiza las trazas en tramos; cada tramo detalla detalles granulares como el nombre de la operación, una marca de tiempo de inicio, una marca de tiempo de finalización y otros metadatos. Los módulos backend de Jaeger pueden exportar métricas de Prometheus, y los registros se estructuran utilizando zap, una biblioteca de registro.
3. Fluentd
Una capa de registro unificada
Fluentd es una capa de registro diseñada para ser desacoplada de los sistemas de backend. La filosofía es que una capa de registro unificada puede eliminar el caos de los formatos de registro incompatibles y las rutinas de registro dispares.
Fluentd puede rastrear eventos de muchas fuentes, como aplicaciones web, aplicaciones móviles, registros de NGINX y otros. Fluentd centraliza estos registros y también puede portarlos a sistemas externos y soluciones de bases de datos, como Elasticsearch, MongoDB, Hadoop y otros. Para ello, Fluentd cuenta con más de 500 plugins. El uso de Fluentd podría ser útil si necesita enviar alertas en respuesta a ciertos registros o habilitar un registro asíncrono y escalable para los eventos de los usuarios.
Para empezar a utilizar Fluentd para el registro, puede descargarlo aquí para cualquier sistema operativo o encontrarlo en Docker. Una vez instalado, Fluentd ofrece una interfaz gráfica para configurarlo y gestionarlo.
4. Thanos
Configuración de Prometheus de alta disponibilidad con capacidad de almacenamiento a largo plazo
Para aquellos que quieren sacar más provecho de Prometheus, Thanos es una opción. Se enmarca como un sistema de métricas disponible con capacidad de almacenamiento ilimitado que puede colocarse encima de los despliegues existentes de Prometheus. El uso de Thanos para obtener una visión global de las métricas podría ser útil para las organizaciones que utilizan múltiples servidores y clusters de Prometheus. Thanos también permite ampliar el almacenamiento de su elección, haciendo que la retención de datos sea teóricamente ilimitada. Como Thanos está diseñado para trabajar con grandes cantidades de datos, incorpora downsampling para acelerar las consultas.
5. Cortex
Escalable horizontalmente, altamente disponible, multi-tenant, Prometheus a largo plazo.
Cortex es otro proyecto del CNCF diseñado para trabajar con múltiples configuraciones de Prometheus. Usando Cortex, los equipos pueden recoger métricas de varios servidores Prometheus y realizar consultas globales agregadas en todos los datos. La disponibilidad es una ventaja con Cortex, ya que puede replicarse y ejecutarse en varias máquinas. Al igual que Thanos, Cortex proporciona capacidades de almacenamiento a largo plazo, con integraciones para S3, GCS, Swift y Microsoft Azure.
Según la documentación, "Cortex se utiliza principalmente como destino de escritura remota para Prometheus, con una API de consulta compatible con Prometheus." Para empezar a trabajar con Cortex, consulta la guía de inicio aquí.
6. OpenTelemetry
Un marco de observabilidad para el software nativo de la nube.
OpenTelemetry es un proyecto construido para recopilar datos de telemetría, como métricas, registros y trazas, de varias fuentes para integrar con muchos tipos de herramientas de análisis. El paquete soporta integraciones con frameworks populares como Spring, ASP.NET Core, Express y Quarkus, facilitando la adición de mecánicas de observabilidad a un proyecto. Cabe destacar que OpenTracing y OpenCensus se han fusionado recientemente para formar OpenTelemetry, lo que hace que esta sea una solución de telemetría de código abierto muy potente.
Más herramientas para la observabilidad, las métricas y el análisis
En la era digital actual, las métricas son el alma de un negocio. Disponer de un surtido holístico de datos sobre el rendimiento de las aplicaciones y de información sobre las acciones de los usuarios finales es vital para el análisis. Pero ese no es el único objetivo final: el filtrado y la navegación de calidad de esos datos son igual de cruciales para convertir los metadatos obsoletos en información procesable.
Más arriba hemos cubierto algunos de los proyectos del CNCF más adoptados relacionados con la observabilidad, la supervisión y el análisis. Pero éstas no son las únicas opciones disponibles: hay muchos más desarrollos interesantes en los proyectos alojados en el CNCF y en el ecosistema circundante.
En el momento de escribir este artículo, el CNCF alberga los siguientes proyectos en estado sandbox. Como puedes ver, estos proyectos emergentes implican una monitorización más activa, como por ejemplo a través de la ingeniería del caos y las comprobaciones de salud de Kubernetes, así como una observabilidad más profunda de Kubernetes.