¿Estás visitando desde Argentina?
Ingresá a Linware Argentina ⯈
Continuar en Linware Argentina ⯈
×
¿Qué estás buscando?
BUSCAR!
BLOG
La contribución de Elastic: Invokedynamic en el agente Java de OpenTelemetry
Publicada el 03/11/2023

Como el segundo proyecto más grande y activo de la Cloud Native Computing Foundation (CNCF), OpenTelemetry está en camino de convertirse en el estándar y marco ubicuo y unificado para la observabilidad. OpenTelemetry debe este éxito a su conjunto de herramientas completo y rico en funciones que permite a los usuarios recuperar valiosos datos de observabilidad de sus aplicaciones con poco esfuerzo. El agente Java de OpenTelemetry es uno de los componentes más maduros y con más funciones del ecosistema de OpenTelemetry. Proporciona instrumentación automática para aplicaciones basadas en JVM y viene con una amplia cobertura de módulos de instrumentación automática para bibliotecas y frameworks Java populares.

El enfoque de instrumentación original utilizado en el agente Java OpenTelemetry dejó el mantenimiento y desarrollo de módulos de instrumentación automática sujetos a algunas restricciones. Como parte de nuestro compromiso reforzado con OpenTelemetry , Elastic® ayuda a evolucionar y mejorar los proyectos y componentes de OpenTelemetry. La contribución de Elastic del Elastic Common Schema a OpenTelemetry fue un paso importante para la comunidad de código abierto. Como un paso más en el compromiso con OpenTelemetry, Elastic comenzó a contribuir con el agente Java de OpenTelemetry. 

 

Enfoque de instrumentación basado en invokedynamic de Elastic

Para superar las limitaciones mencionadas anteriormente en el desarrollo y mantenimiento de módulos de instrumentación automática en el agente Java de OpenTelemetry, Elastic comenzó a contribuir con su enfoque de instrumentación basado en invokedynamic al agente Java de OpenTelemetry en julio de 2023.  

Para explicar la mejora, debe saber que en Java, un enfoque común para realizar la instrumentación automática de aplicaciones es mediante el uso de agentes Java que realizan instrumentación de código de bytes en tiempo de ejecución. Byte Buddy es una utilidad popular y extendida que ayuda con la instrumentación de códigos de bytes sin la necesidad de tratar directamente con el código de bytes de Java. La lógica de instrumentación que recopila datos de observabilidad del código de la aplicación de destino reside en los llamados métodos de asesoramiento . Byte Buddy proporciona diferentes formas de conectar estos métodos de asesoramiento a los métodos de la aplicación de destino:

  • Asesoramiento en línea: el código del método de asesoramiento se copia en el método de destino instrumentado.
  • Envío de consejos estáticos: el método de destino instrumentado invoca métodos de consejos estáticos que deben ser visibles para el código instrumentado.
  • Envío de consejos con invokedynamic : el método de destino instrumentado utiliza la instrucción de código de bytes invokedynamic de la JVM para llamar a métodos de consejo que están aislados del código instrumentado.

Estos diferentes enfoques se describen con gran detalle en nuestra publicación de blog relacionada sobre el agente Java APM de Elastic usando invokedynamic. En pocas palabras, ambos enfoques, la incorporación de consejos y el envío a métodos de consejos estáticos , tienen algunas limitaciones con respecto a la escritura y el mantenimiento del código de consejos. Hasta ahora, el agente Java de OpenTelemetry ha utilizado consejos integrados para su instrumentación de código de bytes. Las limitaciones resultantes en el desarrollo de instrumentaciones están documentadas en las directrices para desarrolladores correspondientes . Entre otras cosas, la limitación de no poder depurar el código de asesoramiento es una restricción dolorosa a la hora de desarrollar y mantener código de instrumentación.

El agente APM Java de Elastic ha estado utilizando el enfoque invokedynamic con sus beneficios durante años, probado en campo por miles de clientes. Para ayudar a mejorar el agente Java OpenTelemetry, Elastic comenzó a contribuir con el enfoque invokedynamic con el objetivo de simplificar y mejorar el desarrollo y la capacidad de mantenimiento de los módulos de instrumentación automática. La propuesta de contribución y el esquema de implementación se documentan con más detalle en esta edición de GitHub . 

Con el nuevo enfoque implementado, Elastic ayudará a migrar las instrumentaciones existentes para que la comunidad Java de OTel pueda beneficiarse del enfoque de instrumentación basado en invokedynamic .

Ir al Blog