Cómo usar OpenTelemetry (BETA)
IMPORTANTE: ESTA ES UNA VERSIÓN BETA
- Está en desarrollo activo y puede contener funcionalidades inestables o incompletas. Úselo bajo su propia responsabilidad, especialmente en entornos de producción.
- Debe utilizarse con precaución, y siempre debe validar las copias de seguridad antes de ejecutar cualquier operación crítica.
Visión general
OpenTelemetry es un framework de observabilidad de código abierto que define un conjunto de API, SDK y bibliotecas de instrumentación neutrales respecto al proveedor para generar, recopilar y exportar datos de telemetría; concretamente trazas, métricas y logs. Proporciona un modelo de programación coherente entre aplicaciones y servicios, lo que le permite capturar un comportamiento detallado en tiempo de ejecución sin acoplarse a ningún back end específico.
OpenTelemetry y Jaeger, en conjunto, forman una potente pila de observabilidad para los microservicios de Etendo Rx. Al instrumentar sus canalizaciones reactivas con OpenTelemetry, captura spans y trazas detalladas a través de límites asíncronos. Exportar esta telemetría al collector y a la UI de Jaeger le ofrece visibilidad en tiempo real de los flujos de solicitudes, lo que permite identificar rápidamente errores, puntos críticos de latencia y dependencias entre servicios. Como resultado, los desarrolladores pueden acelerar la entrega de funcionalidades, mejorar la fiabilidad del sistema y solucionar de forma proactiva problemas de rendimiento en entornos distribuidos complejos.
Conceptos clave
- Span: Una única unidad de trabajo u operación, como una consulta a base de datos o una solicitud HTTP.
- Trace: Un árbol de spans que representa un flujo de solicitud de extremo a extremo a través de múltiples servicios.
- Propagación de contexto: El mecanismo mediante el cual el contexto de la traza (ID de traza, ID de span, baggage) se transmite a lo largo de llamadas asíncronas o remotas.
Envío de trazas al servicio OpenTelemetry
-
Instrumente su código
- Añada el SDK de OpenTelemetry para Java (o el agente de inyección automática) a sus servicios basados en Rx.
- Cree spans alrededor de operaciones críticas (p. ej., solicitudes upstream, canalizaciones reactivas como
Flux/Mono).
-
Configure un exportador
- Utilice el exportador de Jaeger proporcionado por OpenTelemetry para agrupar y enviar spans mediante
UDPoHTTP. - Apunte el exportador a la dirección y el puerto del collector de Jaeger.
- Utilice el exportador de Jaeger proporcionado por OpenTelemetry para agrupar y enviar spans mediante
-
Propague el contexto
- Asegúrese de que cada llamada downstream transporte el contexto de traza actual para que los spans se aniden correctamente.
Jaeger: back end de trazado distribuido
Jaeger es un sistema de trazado distribuido de código abierto desarrollado originalmente por Uber. Proporciona:
- Collector: Recibe spans de las aplicaciones instrumentadas.
- Almacenamiento: Persiste los datos de trazas (p. ej., en Elasticsearch o Cassandra).
- Servicio de consulta y UI: Permite a desarrolladores y operadores buscar, visualizar y analizar trazas en tiempo real.
Requisitos previos
- Instale Etendo Rx. Para ello, siga la guía de instalación de Etendo Rx.
- Instale el Platform Extensions Bundle.
-
Este proyecto depende de las siguientes herramientas:
- Docker: versión
26.0.0o superior. - Docker Compose: versión
2.26.0o superior.
Warning
Evite instalar Docker mediante Snap, ya que puede estar restringido por este sandbox y no tener acceso a directorios del host como
/opt/, lo que puede impedir que los contenedores Docker de Etendo se inicien correctamente.Recomendación: instale Etendo utilizando la última ISO (que incluye Docker) o instale Docker siguiendo la guía de instalación oficial de su distribución.
Configurar el servicio Jaeger
- Docker: versión
-
Habilitar servicios Utils: habilite los módulos de servicios util necesarios. En el archivo
gradle.properties, añada la siguiente variable:Una vez habilitado el servicio de utilidades de Rx, ejecute el siguiente comando en su terminal:
Esto iniciará el contenedor Docker que ejecuta Jaeger. Para acceder a la UI de Jaeger, navegue a http://localhost:16686
Inicialmente, no habrá servicios exportando datos a Jaeger. En el siguiente paso, se explicará cómo habilitar la exportación de trazas a Jaeger.
-
Servicios Dynamic Das: servicios basados en la imagen Docker de Dynamic Das; actualmente, el único servicio que utiliza esta imagen es
das. Para habilitar y configurar la exportación de trazas a Jaeger, edite el archivogradle.propertiesañadiendo la siguiente variable:Opcionalmente, puede añadir propiedades adicionales al archivo
gradle.propertiespara configurar con más detalle el agente de OpenTelemetry en el servicio DAS.Nombre Descripción Tipo Valores permitidos Valor por defecto Notas otel.das.nameNombre del servicio Das string das otel.das.otlp.endpointstring Cualquier URL http://jaeger:4318Añade automáticamente /v1/traces\|metrics\|logs}en función del tipo de señalotel.das.otlp.protocolProtocolo de transporte para OTLP enum grpc,http/protobuf,http/jsonhttp/protobuf— otel.das.otlp.timeoutTiempo de espera (ms) para la exportación de datos OTLP (trazas, métricas, logs) integer Cualquier número positivo 10000— otel.das.metrics.exporterExportador de métricas enum otlp,prometheus,console,logging,nonenone— otel.das.logs.exporterExportador de logs enum otlp,console,logging,nonenone— otel.das.traces.exporterExportador de trazas enum otlp,zipkin,console,logging,noneotlp— Una vez que OpenTelemetry esté habilitado en el servicio Das, ejecute el siguiente comando en su terminal:
Esta configuración habilita la exportación de trazas desde el servicio Das al back end de Jaeger. Ahora, en la UI de Jaeger, este servicio se podrá seleccionar.
Warning
Esta funcionalidad solo está disponible a partir de la imagen
etendo/dynamic-das:1.1.0. Para más información, consulte Dynamic DAS v1.1.0. -
Servicios Dynamic Gradle: los servicios basados en la imagen Docker de Dynamic Gradle actualmente son
config,edge,auth,asyncprocess,obconnsrvyworker. Para habilitar y configurar la exportación de trazas a Jaeger, añada las variables que considere necesarias al archivogradle.properties:gradle.propertiesotel.config.enable=true otel.edge.enable=true otel.auth.enable=true otel.asyncprocess.enable=true otel.obconnsrv.enable=true otel.worker.enable=trueOpcionalmente, puede añadir propiedades adicionales al archivo
gradle.propertiespara configurar con más detalle el agente de OpenTelemetry en cada servicio.Nombre Descripción Tipo Valores permitidos Valor por defecto Notas otel.config.nameNombre del servicio Config string config otel.config.otlp.endpointstring Cualquier URL http://jaeger:4318Añade automáticamente /v1/traces\|metrics\|logs}en función del tipo de señalotel.config.otlp.protocolProtocolo de transporte para OTLP enum grpc,http/protobuf,http/jsonhttp/protobuf— otel.config.otlp.timeoutTiempo de espera (ms) para la exportación de datos OTLP (trazas, métricas, logs) integer Cualquier número positivo 10000— otel.config.metrics.exporterExportador de métricas enum otlp,prometheus,console,logging,nonenone— otel.config.logs.exporterExportador de logs enum otlp,console,logging,nonenone— otel.config.traces.exporterExportador de trazas enum otlp,zipkin,console,logging,noneotlp— otel.edge.nameNombre del servicio Edge string edge otel.edge.otlp.endpointstring Cualquier URL http://jaeger:4318Añade automáticamente /v1/traces\|metrics\|logs}en función del tipo de señalotel.edge.otlp.protocolProtocolo de transporte para OTLP enum grpc,http/protobuf,http/jsonhttp/protobuf— otel.edge.otlp.timeoutTiempo de espera (ms) para la exportación de datos OTLP (trazas, métricas, logs) integer Cualquier número positivo 10000— otel.edge.metrics.exporterExportador de métricas enum otlp,prometheus,console,logging,nonenone— otel.edge.logs.exporterExportador de logs enum otlp,console,logging,nonenone— otel.edge.traces.exporterExportador de trazas enum otlp,zipkin,console,logging,noneotlp— otel.auth.nameNombre del servicio Auth string auth otel.auth.otlp.endpointstring Cualquier URL http://jaeger:4318Añade automáticamente /v1/traces\|metrics\|logs}en función del tipo de señalotel.auth.otlp.protocolProtocolo de transporte para OTLP enum grpc,http/protobuf,http/jsonhttp/protobuf— otel.auth.otlp.timeoutTiempo de espera (ms) para la exportación de datos OTLP (trazas, métricas, logs) integer Cualquier número positivo 10000— otel.auth.metrics.exporterExportador de métricas enum otlp,prometheus,console,logging,nonenone— otel.auth.logs.exporterExportador de logs enum otlp,console,logging,nonenone— otel.auth.traces.exporterExportador de trazas enum otlp,zipkin,console,logging,noneotlp— otel.asyncprocess.nameNombre del servicio Asyncprocess string asyncprocess otel.asyncprocess.otlp.endpointstring Cualquier URL http://jaeger:4318Añade automáticamente /v1/traces\|metrics\|logs}en función del tipo de señalotel.asyncprocess.otlp.protocolProtocolo de transporte para OTLP enum grpc,http/protobuf,http/jsonhttp/protobuf— otel.asyncprocess.otlp.timeoutTiempo de espera (ms) para la exportación de datos OTLP (trazas, métricas, logs) integer Cualquier número positivo 10000— otel.asyncprocess.metrics.exporterExportador de métricas enum otlp,prometheus,console,logging,nonenone— otel.asyncprocess.logs.exporterExportador de logs enum otlp,console,logging,nonenone— otel.asyncprocess.traces.exporterExportador de trazas enum otlp,zipkin,console,logging,noneotlp— otel.obconnsrv.nameNombre del servicio Obconnsrv string obconnsrv otel.obconnsrv.otlp.endpointstring Cualquier URL http://jaeger:4318Añade automáticamente /v1/traces\|metrics\|logs}en función del tipo de señalotel.obconnsrv.otlp.protocolProtocolo de transporte para OTLP enum grpc,http/protobuf,http/jsonhttp/protobuf— otel.obconnsrv.otlp.timeoutTiempo de espera (ms) para la exportación de datos OTLP (trazas, métricas, logs) integer Cualquier número positivo 10000— otel.obconnsrv.metrics.exporterExportador de métricas enum otlp,prometheus,console,logging,nonenone— otel.obconnsrv.logs.exporterExportador de logs enum otlp,console,logging,nonenone— otel.obconnsrv.traces.exporterExportador de trazas enum otlp,zipkin,console,logging,noneotlp— otel.worker.nameNombre del servicio Worker string worker otel.worker.otlp.endpointstring Cualquier URL http://jaeger:4318Añade automáticamente /v1/traces\|metrics\|logs}en función del tipo de señalotel.worker.otlp.protocolProtocolo de transporte para OTLP enum grpc,http/protobuf,http/jsonhttp/protobuf— otel.worker.otlp.timeoutTiempo de espera (ms) para la exportación de datos OTLP (trazas, métricas, logs) integer Cualquier número positivo 10000— otel.worker.metrics.exporterExportador de métricas enum otlp,prometheus,console,logging,nonenone— otel.worker.logs.exporterExportador de logs enum otlp,console,logging,nonenone— otel.worker.traces.exporterExportador de trazas enum otlp,zipkin,console,logging,noneotlp— Una vez que OpenTelemetry esté habilitado en cualquiera de estos servicios, ejecute el siguiente comando en su terminal:
Esta configuración habilita la exportación de trazas desde estos servicios al back end de Jaeger. Ahora, en la UI de Jaeger, estos servicios se podrán seleccionar.
Warning
Esta funcionalidad solo está disponible a partir de la imagen
etendo/dynamic-gradle:1.1.0. Para más información, consulte Dynamic Gradle v1.1.0. -
Tomcat: el servicio Tomcat se puede configurar para enviar trazas a Jaeger. En el archivo
gradle.properties, añada la siguiente variable:Opcionalmente, puede añadir propiedades adicionales al archivo
gradle.propertiespara configurar con más detalle el agente de OpenTelemetry en el servicio Tomcat.Nombre Descripción Tipo Valores permitidos Valor por defecto Notas otel.tomcat.nameNombre del servicio Tomcat string tomcat otel.tomcat.otlp.endpointstring Cualquier URL http://jaeger:4318Añade automáticamente /v1/traces\|metrics\|logs}en función del tipo de señalotel.tomcat.otlp.protocolProtocolo de transporte para OTLP enum grpc,http/protobuf,http/jsonhttp/protobuf— otel.tomcat.otlp.timeoutTiempo de espera (ms) para la exportación de datos OTLP (trazas, métricas, logs) integer Cualquier número positivo 10000— otel.tomcat.metrics.exporterExportador de métricas enum otlp,prometheus,console,logging,nonenone— otel.tomcat.logs.exporterExportador de logs enum otlp,console,logging,nonenone— otel.tomcat.traces.exporterExportador de trazas enum otlp,zipkin,console,logging,noneotlp— Una vez que OpenTelemetry esté habilitado en el servicio Tomcat, ejecute el siguiente comando en su terminal:
Esta configuración habilita la exportación de trazas desde el servicio Tomcat al back end de Jaeger. Ahora, en la UI de Jaeger, este servicio se podrá seleccionar.
Este trabajo está licenciado bajo CC BY-SA 2.5 ES por Futit Services S.L.



