Selección de TraceId de seguimiento del enlace de registro de Dubbo
El método más común para solucionar fallas del sistema en el desarrollo es ver los registros del sistema. Sin embargo, todavía es problemático usar registros para localizar problemas en un entorno distribuido. Debe confiar en el seguimiento de enlaces completos. Encadene el ID de contexto a Together, este artículo compartirá las ideas de selección de programas para implementar el ID de seguimiento de enlaces de registro basado en el marco Spring Boot Dubbo.
La mayoría de los modelos ideológicos actuales de sistemas de seguimiento distribuido provienen del artículo Dapper de Google
La idea central del seguimiento de enlaces completos:
Este es el complemento de registro de SkyWalking, que puede generar
traceId
Configurar dependencias y agregar el siguiente contenido al archivo pom
p >?
Configurar la plantilla de registro y cambiar el codificador del elemento Appender en el archivo logback-spring.xml al siguiente contenido
?
Sleuth es un componente de Spring Cloud que proporciona soluciones de seguimiento distribuidas para Spring Cloud y es compatible con Zipkin, HTrace y otros sistemas de seguimiento de registros
Configure las dependencias principales en pom. archivo Agregue el siguiente contenido en el archivo pom para administrar los números de versión
Configure las dependencias y agregue el siguiente contenido en el archivo pom
Adapte Dubbo, para que sleuth sea compatible con el marco de dubbo, debe agregar los dos pasos siguientes:
Primero, agregue la dependencia del complemento de dubbo
Configurar el filtro de dubbo
Configure la plantilla de registro y cambie el codificador del elemento Appender en el archivo logback-spring.xml al siguiente
<. p> ?
Utilice el mecanismo MDC de Logback para agregar el identificador traceId a la plantilla de registro y su valor es X{traceId}.
Resuelve el problema de pérdida de traceId entre subprocesos
Dado que MDC usa ThreadLocal internamente, solo es válido para el subproceso actual, subprocesos secundarios y posteriores. servicios El valor en el MDC se perderá;
Necesitamos resolver el problema de la transferencia de valor entre varios grupos de subprocesos en Spring y los subprocesos padre-hijo de métodos asincrónicos.
Solución: reescriba MDCAdapter para usar TransmittableThreadLocal de Ali para reemplazar el objeto ThreadLocal original, resolviendo así el problema de transferencia de subprocesos padre-hijo de varios grupos de subprocesos (ExecutorService / ForkJoinPool / TimerTask).
TimerTask puede resolver el problema de pasar valores entre el proceso padre y el proceso hijo.
Resuelva el problema de la pérdida de traceId entre procesos
El servicio dubbo utiliza org.apache.dubbo.rpc.Filter
?