Home Ciencia y Tecnología Una guía para el rastreo de operelemetría para el JVM

Una guía para el rastreo de operelemetría para el JVM

29
0

Puede saber que soy un gran admirador de OperElemetry. ¡Recientemente terminé de desarrollar una clase magistral para el yow! Conferencia a fin de año. Durante el desarrollo, noté diferencias masivas en la configuración y los resultados en los lenguajes de programación. Peor aún, existen diferencias en los marcos dentro del mismo lenguaje de programación.

En esta publicación, quiero comparar los diferentes enfoques de Opentelemety de código cero en el JVM, cubriendo los más extendidos:

  • Bota de resorte con rastreo de micrómetro
  • Boot de primavera con el agente de OperElemetry
  • Arrancador de arranque de primavera operentelemetry
  • Quarkus
  • Quarkus con el agente de OperElemetry

Puntos en común

Mantengo la arquitectura bastante easy:

Descripción general de la arquitecturaDescripción general de la arquitectura

Estoy usando el acceso a datos reactivos tanto en el servicio remoto como en la base de datos para darle vida un poco las cosas, más específicamente, Kotlin Coroutines. Aquí está la estructura basic:

val merchandise = coroutineScope {
    val ping = async {
        // Name the ping service
    }
    val merchandise = async {
        // Question the database
    }
    println("Obtained ping response: ${ping.await()}")
    merchandise.await()
}

Aquí están las características para cada pila:

Quarkus

Arranque de primavera

Net

Motín

Flúcito internet

Cliente HTTP

Cliente de descanso

WebClient

Patrón de acceso a la base de datos

Registro

Repositorio

Acceso a la base de datos

Hibernado Reactivo con estilo

R2DBC

Ejecutando el agente de Operentelemetry

El agente Java Operentelemetry es el primer enfoque que utilicé con respecto a OPENTELEMETRY.

La única configuración necesaria es establecer el agente al ejecutar el JVM:

java -javaagent:opentelemetry-javaagent.jar -jar otel-boot-agent.jar

El agente admite muchos marcos y bibliotecas, incluidos Spring Boot, Quarkus, Ktor, Spark y muchos otros. Cuando el flujo de la aplicación encuentra un marco/biblioteca suitable, registra un tramo.

El agente defiende las variables estándar de entorno OperElemetry.

companies:
  otel-boot-agent:
    construct: otel-boot-agent
    surroundings:
      OTEL_SERVICE_NAME: OTEL Boot Agent                             #1
      OTEL_EXPORTER_OTLP_ENDPOINT:                 #2
      OTEL_METRICS_EXPORTER: none                                    #3
      OTEL_LOGS_EXPORTER: none                                       #3
  1. Nombre del servicio de Operentelemetry
  2. Punto ultimate de operentelemetría; Spring Boot usa HTTP
  3. Ni métricas ni registros

Aquí está el Jaeger Hint al llamar al punto ultimate en la aplicación Spring Boot:

Trace de arranque de primavera con agente de opereLemetryTrace de arranque de primavera con agente de opereLemetry

Y aquí está el de Quarkus:

Trace de Quarkus con agente de operelemetryTrace de Quarkus con agente de operelemetry

Spring Boot presenta un tramo adicional que muestra la llamada del repositorio. No hay tal cosa disponible en Quarkus, ya que estoy usando el patrón de registro para acceder a los datos.

El agente genera la consulta SQL en ambos marcos, es decir, SELECT product.* FROM product. El agente de Java trabaja fuera de la caja.

Rastreo de micrómetro en la bota de resorte

Spring Boot proporciona soporte de operación dedicada a través del trazado de micrómetro.

El trazado de micrómetro proporciona una fachada easy para las bibliotecas trazador más populares, lo que le permite instrumentar su código de aplicación basado en JVM sin bloqueo del proveedor. Está diseñado para agregar poco a ninguna sobrecarga a su actividad de recolección de rastreo al tiempo que maximiza la portabilidad de su esfuerzo de rastreo.

Además de la dependencia del rastreo de micrómetro en sí, necesita una adicional:

  • El actuador de arranque de primavera
  • Un puente -opentelemetría
  • Un exportador -opentelemetría también

La configuración no sigue el estándar de OpenTelemetry:

companies:
  otel-boot-micrometer:
    surroundings:
      SPRING_APPLICATION_NAME: OTEL Micrometer                       #1-2
      MANAGEMENT_OTLP_TRACING_ENDPOINT: /v1/traces #1-3
  1. Diferentes valores de la especificación OperElemetry
  2. El nombre de la aplicación de primavera sirve como el nombre del servicio Operentelemetry
  3. Camino completo al punto ultimate de la API

La configuración anterior no registra la llamada de la base de datos. Para solucionarlo, necesitamos una dependencia adicional: proxy R2DBC.

La nueva traza contiene la base de la base de datos:

Trace de arranque de resorte con micrómetro y proxy R2DBCTrace de arranque de resorte con micrómetro y proxy R2DBC

Puede notar otro problema: las llamadas al servicio y la base de datos son secuenciales, donde deben ser paralelas. Se deriva de la propagación del contexto de la bota de primavera no manejando correctamente al alcance de la coroutina. Es un trabajo subyacente del equipo de primavera. Suscríbase al problema de GitHub si está interesado.

Arrancador de arranque de primavera operentelemetry

El proyecto OperTelemetry proporciona un iniciador de arranque de primavera. Solo necesita una dependencia y, como otros entrantes, Spring Boot Magic se encarga de la configuración:


    io.opentelemetry.instrumentation
    opentelemetry-spring-boot-starter

Trace de arranque de primavera con el inicio de OperElemetryTrace de arranque de primavera con el inicio de OperElemetry

El resultado es muy comparable al anterior, incluido el problema no paralelo pero serial.

Quarkus

Vimos los resultados del uso del agente OperElemetry en la primera sección. Es bastante sencillo usar Opentelemety sin el agente; Necesita una sola dependencia:


    io.quarkus
    quarkus-opentelemetry

Quarkus prefijos regulares Nombres de variables de entorno de opereelemetry con QUARKUS_:

companies:
  otel-quarkus:
    surroundings:
      QUARKUS_OTEL_SERVICE_NAME: OTEL Quarkus                        #1
      QUARKUS_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:  #2
  1. Nombre del servicio de Operentelemetry
  2. Punto ultimate de operentelemetría; Quarkus usa GRPC

Los resultados son los esperados:

Trace de QuarkusTrace de Quarkus

Discusión

Los enfoques de Operentelemety varían ampliamente tanto en la configuración como en los resultados. A menos que se le impida usar agentes de Java por razones técnicas u organizativas, recomiendo usar primero el agente Operentelemetry. Maneja todo lo que puede arrojarlo fuera de la caja, incluidas las bibliotecas más comunes. Salvo eso, necesita un conocimiento profundo de la pila que está utilizando, los resultados no representan lo que sucede en la realidad.

El código fuente completo para esta publicación se puede encontrar en GitHub.

Para ir más allá:


Publicado originalmente en un geek de Java el 3 de agosto de 2025

fuente

LEAVE A REPLY

Please enter your comment!
Please enter your name here