Hablemos de OpenTelemetry, una forma estándar independiente del proveedor para recopilar datos de telemetría.
Ofrecer una mejor observabilidad en una aplicación es un gran reto para cualquier desarrollador, ya que necesita capturar los datos de telemetría de la aplicación. El diccionario de Cambridge define la telemetría como la ciencia o el proceso de recopilar información sobre objetos que se encuentran lejos y enviar la información a algún lugar de forma electrónica.
Por ejemplo, un solo clic o la sesión de un usuario en un sitio web genera una gran cantidad de solicitudes y rastreos que fluyen entre redes, microservicios, bases de datos, etc.
OpenTelemetry es una plataforma de observabilidad, un conjunto de componentes bien factorizados que pueden utilizarse juntos o a la carta. Además, los desarrolladores de marcos y bibliotecas que todos usamos hoy en día tienen ahora una forma estándar para hornear los datos de telemetría en esas bibliotecas y marcos, dando a los usuarios finales muchas ideas fuera de la caja en lo que esos marcos están haciendo bajo el capó.
Para entender OpenTelemetry, primero tiene que saber lo que es el rastreo distribuido.
¿Qué es el rastreo distribuido?
A medida que nuestras aplicaciones se vuelven más complejas y más servicios están involucrados en servir el tráfico de usuarios y completar las transacciones, se vuelve más y más crítico para entender cómo las solicitudes atraviesan nuestros servicios y cómo cada servicio contribuye a la latencia global. Esto es lo que hace el rastreo distribuido. Captura la latencia de las solicitudes de los usuarios y el tiempo que tarda cada microservicio de la ruta en devolver una respuesta.
Cuando llega una solicitud de usuario, queremos crear un rastreo, es decir, la información total que describe cómo responde nuestro sistema a una solicitud de usuario. Las trazas se componen de spans, y cada span significa un par específico de solicitud y respuesta implicado en el servicio de una solicitud de usuario. El span padre describe la latencia tal y como la observa el usuario final. Y el span hijo se utiliza para entender cómo un servicio particular en el sistema distribuido fue llamado y respondió con su información de latencia.
¿Qué es OpenTelemetry?
OpenTelemetry es un proyecto de código abierto alojado en la CNCF que proporciona una forma estándar de generar datos de telemetría. Se creó mediante la fusión de OpenTracing, un estándar para generar datos de rastreo, y OpenCensus, que era un estándar para generar datos de métricas.
OpenTelemetry ofrece un único conjunto de API, agentes, servicios de recopilación y bibliotecas para capturar trazas y métricas distribuidas de su aplicación. OpenTelemetry estandariza la forma de recoger los datos de telemetría y enviarlos a un back-end de su elección. Esto le proporciona una ruta de proveedor neutral a la instrumentación y le da la flexibilidad para cambiar su back-end sin instrumentar su código de nuevo.
Por lo tanto, puede instrumentar sus aplicaciones utilizando un agente agnóstico de proveedor mientras sigue enviando sus métricas y trazas a un proveedor SaaS como Datadog. Entonces, si desea cambiar de proveedor (por ejemplo, de Datadog a Dynatrace), puede hacerlo sin cambiar el código de su aplicación.
El proyecto OpenTelemetry tiene como objetivo proporcionar un único conjunto de bibliotecas API y agentes para capturar métricas y trazas distribuidas de sus aplicaciones. Esto se aplica a través de muchos idiomas y plataformas. El proyecto OpenTelemetry también incluye un servicio colector opcional y tiene un repositorio dedicado para las especificaciones. Para ser claros, OpenTelemetry no es Jaeger o Prometheus, que son back-ends observables. Pero ayuda en la exportación de datos a back-ends de código abierto y comerciales.
A continuación se presentan las características que proporciona OpenTelemetry:
- Estandarización en la recopilación de datos de telemetría que las organizaciones pueden seguir, lo que hace que sea fácil pasar de un proveedor a otro
- Una convención semántica agnóstica de proveedor y de estándar abierto para el proceso de recogida de datos
- Recolector que puede desplegarse como agente o pasarela o de muchas formas diferentes
- Admite múltiples formatos de propagación de contextos para la migración
- Una solución integral para generar, emitir, recopilar, procesar y exportar datos telemétricos
- Facilidad para enviar datos a varios destinos en paralelo con un control total sobre los mismos
Componentes de OpenTelemetry
A continuación se presentan los componentes básicos de OpenTelemetry:
- Proto: Este componente se utiliza para definir para los colectores, bibliotecas de instrumentación, etc, que son tipos de interfaz independiente del idioma para OpenTelemetry.
- Colector: Los colectores se utilizan para recibir, procesar y exportar datos de telemetría. Esta implementación de colectores tiene que ser agnóstica del proveedor. Por defecto, todos los datos de telemetría son exportados por las bibliotecas de instrumentación en este lugar.
- Especificación: Este componente describe los requisitos y las expectativas de la implementación en diferentes lenguajes que consisten en API, SDK y datos. La API genera los datos de telemetría, el procesamiento y las capacidades de exportación para la implementación de las API proporcionadas por los SDK. Los datos tienen las convenciones semánticas para soportar todo tipo de proveedores sin cambiar ningún código.
- Bibliotecas de instrumentación: Están disponibles en varios idiomas como parte del proyecto OpenTelemetry. Estas bibliotecas se utilizan para proporcionar observabilidad para otras bibliotecas para hacer que todas las aplicaciones observadas haciendo llamadas a la API de OpenTelemetry.
Arquitectura OpenTelemetry
En el alto nivel, OpenTelemetry consta de tres piezas principales:
- Un conjunto de API para instrumentar aplicaciones, bibliotecas y marcos.
- El SDK implementa las API.
- Un colector opcional puede ingerir, agregar y exportar datos de telemetría donde usted lo necesite.
El propósito de la API es permitir la creación de instrumentación para bibliotecas y el código de la aplicación. La API tiene cuatro secciones principales: rastreo, medidores, un contexto compartido y convenciones semánticas.
- La API de rastreo permite crear, anotar y completar tramos.
- La API de medidores consta de múltiples instrumentos métricos. Ejemplos de estos instrumentos son los observadores, los registradores de valores y los contadores.
- Puede rastrear y ejecutar el contexto de los vanos habilitando la API de contexto y propagar ese contexto tanto dentro como fuera de su sistema.
- En las convenciones semánticas están presentes todas las directrices y reglas para nombrar principalmente los vanos, los atributos, las etiquetas y los instrumentos métricos. Estas convenciones se implementan para garantizar la coherencia entre las distintas implementaciones del lenguaje y para las instrumentaciones externas.
En un contexto compartido, la implementación del contexto se encuentra entre el trazador y el medidor y permite que todos los registros métricos no observados se produzcan en el contexto de un span en ejecución. Una característica que permite a los SDK capturar span ejemplares para los valores de las métricas. Puede personalizar el contexto con propagadores, que permiten propagar el contexto del span dentro y fuera del sistema, lo que permite un verdadero rastreo distribuido.
El Colector es una parte esencial de la arquitectura OpenTelemetry. Es un servicio independiente que puede recibir, procesar y exportar datos de telemetría de diversas fuentes, incluyendo OpenCensus, Zipkin, Jaeger, y el protocolo OpenTelemetry. Mediante los colectores, puede exportar tramos y métricas a varios proveedores y sistemas de telemetría de código abierto.
La arquitectura OpenTelemetry ofrece una solución de telemetría completa lista para usar. También puede hacer la personalización mediante el uso de múltiples puntos de extensión según la necesidad.
¿Cómo funciona OpenTelemetry?
Dentro de cada servicio en su despliegue, instale el cliente OpenTelemetry. El cliente es el SDK; el SDK, a su vez, tiene una API. Sus marcos de aplicaciones y bibliotecas utilizan esta API de instrumentación para describir el trabajo que están haciendo. A continuación, el SDK exporta las observaciones recogidas a un servicio de canalización de datos llamado Colector.
OpenTelemetry tiene su propio protocolo de datos, OTLP, pero el colector puede traducir OTLP en varios formatos, incluyendo Zipkin, Jaeger, y Prometheus. Cabe destacar que OpenTelemetry no proporciona su propio back-end o herramienta de análisis; esto se debe a que es un esfuerzo de normalización en el corazón de OpenTelemetry. El objetivo es llegar a un lenguaje universal para describir las operaciones de los ordenadores en un entorno de nube. El objetivo no es estandarizar cómo analizamos esos datos. En su lugar, esperamos que OpenTelemetry ayude a impulsar el mundo de la observabilidad permitiendo que las nuevas herramientas de análisis se pongan en marcha rápidamente sin tener que reconstruir todo este ecosistema de software de telemetría.
Cuando se envían muchos datos a través del sistema, hay mucho que tener en cuenta. Afortunadamente OpenTelemetry ha pensado en todas las cosas y tiene soluciones para cada una de esas cuestiones. En primer lugar, OpenTelemetry es flexible, y maneja múltiples formatos de propagación de contexto. Esto significa que a pesar de que existe una norma, todavía existe la opción de elección dentro de esa norma. Por lo tanto, si usted está usando algo como el formato de contexto de rastreo w3c o la propagación b3, estos son diferentes estándares dentro de la norma que permiten a sus servicios conectar los puntos.
Conclusión
OpenTelemetry recoge una variedad de observaciones, siendo las métricas de rastreo distribuido y los recursos del sistema las más importantes. En lugar de tratar estos como señales separadas, OpenTelemetry las trenza juntas y proporciona la indexación y el contexto que le permite agregar y cruzar todas estas señales en el extremo posterior.
Además de la recogida de datos, OpenTelemetry proporciona un procesamiento de datos y canalización que le permite cambiar los formatos de datos, manipular sus datos, y todas las herramientas que necesita para construir una tubería de telemetría robusta en un sistema moderno.
Por lo tanto, eso fue todo acerca de OpenTelemetry, adelante y pruebe esta herramienta.