OpenTelemetry es un proyecto de código abierto que tiene como objetivo proporcionar observabilidad a nivel de aplicación en sistemas distribuidos. Es una herramienta que permite la instrumentación de aplicaciones para la generación y recopilación de datos de telemetría, como trazas, métricas y registros, para obtener una comprensión profunda del comportamiento y rendimiento de una aplicación en entornos distribuidos.
En post anterior se menciona patrones de arquitectura de microservicios, entre ellos el de observabilidad https://usuarioperu.com/2022/05/07/patrones-de-arquitectura-de-microservicios/
Entre las ventajas y beneficios de opentelemetry se menciona lo siguiente:
- Observabilidad mejorada: Proporciona una forma estandarizada de instrumentar aplicaciones para recopilar datos de telemetría, lo que permite a los equipos de desarrollo y operaciones obtener una visibilidad más profunda del comportamiento y rendimiento de las aplicaciones en entornos distribuidos. Esto facilita la identificación y resolución de problemas, la optimización del rendimiento y la mejora de la confiabilidad de las aplicaciones.
- Interoperabilidad: Es una iniciativa de código abierto y se ha convertido en el estándar de facto para la instrumentación de aplicaciones en el ámbito de la observabilidad. Proporciona una API y un conjunto de bibliotecas que son compatibles con varios lenguajes de programación, frameworks y sistemas distribuidos, lo que permite la interoperabilidad y la consistencia en la instrumentación de aplicaciones en diferentes tecnologías.
- Flexibilidad y extensibilidad: Ofrece una arquitectura modular y extensible que permite a los desarrolladores seleccionar y personalizar los componentes que deseen utilizar para la generación y recopilación de datos de telemetría, como trazas, métricas y registros. Esto permite una mayor flexibilidad en la forma en que se implementa la observabilidad en una aplicación, adaptándola a las necesidades específicas de cada caso de uso.
- Comunidad activa: Cuenta con una comunidad activa de desarrolladores y usuarios que contribuyen al proyecto, lo que significa que hay un constante desarrollo y mejora de la herramienta. Esto también significa que hay una amplia documentación, tutoriales y recursos disponibles para ayudar en la implementación y adopción de OpenTelemetry en proyectos reales.
- La implementación de Implica la incorporación de las bibliotecas de OpenTelemetry en el código fuente de la aplicación para instrumentarla y recopilar datos de telemetría. Esto puede implicar la integración de las bibliotecas de OpenTelemetry en el código fuente de la aplicación en el lenguaje de programación y framework específico que se esté utilizando. OpenTelemetry proporciona bibliotecas para varios lenguajes de programación populares, como Java, JavaScript, Python, Go, C++, .NET, entre otros. Además, OpenTelemetry también ofrece integraciones con otros proyectos de observabilidad, como Prometheus y Jaeger, lo que permite una integración completa en el ecosistema de observabilidad de una aplicación.
La arquitectura de OpenTelemetry se compone de los siguientes componentes clave:
- Instrumentadores: Son bibliotecas que se utilizan para instrumentar el código de una aplicación y recopilar datos de observabilidad, como trazas, registros y métricas. Los instrumentadores de OpenTelemetry están disponibles para diferentes lenguajes de programación, como Java, Python, Go, .NET, etc., y se integran con los frameworks y bibliotecas más comunes utilizados en esas plataformas.
- Proveedores: Son implementaciones específicas de trazas, registros y métricas que se utilizan para recopilar y exportar datos de observabilidad. OpenTelemetry permite la configuración de múltiples proveedores para cada tipo de observabilidad, lo que permite la flexibilidad para adaptarse a diferentes servicios de monitoreo y herramientas de visualización.
- Contexto de trazas: Es un mecanismo para propagar información de trazas a través de las llamadas de servicio en una aplicación distribuida. El contexto de trazas se pasa entre los componentes de una aplicación para correlacionar las trazas en un flujo continuo de trabajo.
- Exportadores: Son bibliotecas que se utilizan para enviar los datos de observabilidad recopilados a herramientas o servicios de monitoreo. OpenTelemetry admite múltiples exportadores para diferentes servicios de monitoreo, como Jaeger, Zipkin, Prometheus, etc.
- Agentes y colectores: Son componentes opcionales que se pueden utilizar para mejorar el rendimiento y la escalabilidad de la recopilación y exportación de datos de observabilidad en aplicaciones distribuidas. Los agentes y colectores actúan como intermediarios entre los instrumentadores y los exportadores, y pueden realizar funciones como la agregación, el filtrado y la compresión de datos para reducir la carga en la red y los servicios de monitoreo.
Como usar opentelemetry
Dentro de cada servicio en su implementación, instale el cliente OpenTelemetry. El cliente es el SDK; el SDK, a su vez, tiene una API. Tu marcos de aplicaciones y las bibliotecas utilizan esta API de instrumentación para describir el trabajo que están realizando. Luego, el SDK exporta las observaciones recopiladas a un servicio de canalización de datos llamado Recopilador.
OpenTelemetry tiene su propio protocolo de datos, OTLP, pero el recopilador puede traducir OTLP a varios formatos, incluidos Zipkin, Jaeger y Prometheus. En particular, OpenTelemetry no proporciona su propia herramienta de análisis o back-end; esto se debe a que es un esfuerzo de estandarización en el corazón de OpenTelemetry. El objetivo es crear un lenguaje universal para describir las operaciones de las computadoras en un entorno de nube. El objetivo no es estandarizar cómo analizamos esos datos. En cambio, esperamos que OpenTelemetry ayude a impulsar el mundo de la observabilidad al permitir que las nuevas herramientas de análisis comiencen rápidamente sin reconstruir todo este ecosistema de software de telemetría..
Referencias: https://github.com/open-telemetry