Video Summary and Transcription
Demostración de cómo agregar observabilidad con OpenTelemetry. Beneficios de los datos extensos de telemetría para obtener información. Contraste entre aplicaciones no instrumentadas, manuales y automáticamente instrumentadas. Ejemplo de instrumentación de llamadas fetch para señales de telemetría. Técnica para modificar funciones sin actualizaciones de núcleo. Uso de JS proxy como un enfoque moderno para parchear. OpenTelemetry estandariza la instrumentación con APIs y herramientas. Ejemplo de configuración de OpenTelemetry con instrumentaciones.
1. Adding Observability with OpenTelemetry
Mostrando cómo agregar observabilidad con OpenTelemetry. Beneficios de datos de telemetría extensos para obtener información. Contrastando aplicaciones no instrumentadas, instrumentadas manualmente y automáticamente. Ejemplo de instrumentación de llamadas fetch para señales de telemetría.
Quiero mostrarte cómo puedes agregar observabilidad a tu aplicación con solo una línea de código. ¿Quién ha trabajado con OpenTelemetry antes? ¿Quizás una rápida muestra de manos? Oh, sí, no demasiados, pero aún así bastantes. OpenTelemetry es un marco de código abierto que proporciona un conjunto estandarizado de herramientas y APIs para recopilar, procesar y exportar datos de telemetría.
¿Por qué necesitamos eso? Existe la noción de que cuanta más información tienes, más cerca estás de la verdad y más sabiduría y poder obtienes de ella. Mapeado a OpenTelemetry o a la observabilidad, esto significaría que cuantas más señales tu aplicación esté emitiendo, más datos de telemetría agregados tienes y más información y acciones puedes tomar de ello. Veamos tres ejemplos. El primero sería una aplicación no instrumentada. Básicamente una caja negra porque no emite nada. El segundo sería una aplicación instrumentada manualmente donde tú, el desarrollador, decides qué señales quieres enviar al backend de observabilidad.
Y el tercero es como el punto ideal donde tenemos una aplicación instrumentada automáticamente, lo que significa que solo escribes el código de la aplicación y alguna biblioteca o SDK está mágicamente recopilando los datos de telemetría detrás de escena y enviándolos a tu backend. Veamos esto un poco más en detalle con el ejemplo de fetch. Una llamada fetch no instrumentada sería una llamada fetch básica. Recupera datos y luego la vida continúa. Una llamada fetch instrumentada manualmente en el caso de OpenTelemetry se vería algo así. Tienes un tracer que es un componente OTEL que inicia un span.
Un span es solo una palabra para una operación única que se mide en tiempo y que mide cosas. Así que aquí iniciamos el span, llamamos a fetch, y cuando la llamada fetch termina, terminamos el span y así es como lo medimos. Ves que hay bastante código para mantener. Así que veamos el punto ideal donde queremos llegar. Una aplicación instrumentada automáticamente donde solo importamos nuestro SDK, llamamos a init, y luego usamos fetch como siempre lo hemos hecho antes. Tal vez miremos detrás de escena de esta llamada init. ¿Cómo podemos detrás de escena hacer que fetch emita estas señales de telemetría? Hacemos esto usando una técnica llamada monkey patching de la cual muchos de ustedes probablemente estén al tanto.
2. Modifying Functions with OpenTelemetry
Técnica para modificar funciones sin actualizaciones del núcleo. Usando JS proxy como un enfoque moderno para parchear. OpenTelemetry estandariza la instrumentación con APIs y herramientas. Ejemplo de configuración de open telemetry con instrumentaciones.
Es una técnica donde modificamos un módulo o una función y extendemos la funcionalidad sin actualizar la funcionalidad central de este durante el tiempo de ejecución. En el caso de fetch, esto podría verse algo así. Dado que todavía estamos en el mundo de JavaScript, básicamente podemos hacer lo que queramos. Así que simplemente tomamos el fetch global, lo almacenamos, y luego sobrescribimos el fetch global con el tracer que hemos visto antes. Así que cada vez que en el código del usuario llamamos a fetch ahora, será trazado automáticamente.
Una forma más moderna de hacer esto sería usar un JS proxy que puedes pensar básicamente como un intermediario entre la función o módulo que deseas parchear y el código que lo está llamando. ¿Cómo entra en juego OTL aquí? Como mencioné antes, open telemetry proporciona una forma estandarizada de hacer las cosas. Con esto, me refiero a herramientas y APIs como esta clase base de instrumentación que puedes ver arriba que simplemente extendemos para nuestra instrumentación personalizada.
Hay algo de andamiaje alrededor, así que queremos especificar qué módulo queremos parchear. Podemos especificar un rango de versiones. Pero luego la parte importante está marcada en rojo aquí, donde básicamente hacemos lo que acabamos de ver antes, monkey patching, una funcionalidad específica de un módulo que queremos trazar. Así que, volviendo a nuestra llamada init. Este sería un ejemplo muy básico de cómo podría verse la configuración de open telemetry. Incluye varios bloques de construcción. No es demasiado importante lo que estamos usando aquí en este momento, pero lo importante es la llamada register instrumentations que está marcada en rojo. Aquí ves que proporcionamos un array de instrumentaciones.
Comments