网上科普有关“Dubbo日志链路追踪TraceId选型”话题很是火热,小编也是针对Dubbo日志链路追踪TraceId选型寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
开发排查系统问题用得最多的手段就是查看系统日志,但是在分布式环境下使用日志定位问题还是比较麻烦,需要借助 全链路追踪ID 把上下文串联起来,本文主要分享基于 Spring Boot + Dubbo 框架下 日志链路追踪ID 的实现方案选型思路。
?
目前大多数分布式追踪系统的思想模型都来自 Google's Dapper 论文
全链路追踪的核心思想:
?
这是 SkyWalking 的一个日志插件,通过这个插件可以在日志中输出
traceId
配置依赖 ,在 pom 文件中添加以下内容
?
配置日志模板 ,修改 logback-spring.xml 文件中 Appender 元素的 encoder 为以下内容
?
?
Sleuth 是 Spring Cloud 的组件之一,它为 Spring Cloud 实现了一种分布式追踪解决方案,兼容Zipkin,HTrace与其他日志追踪系统
配置父依赖 ,在 pom 文件中添加以下内容管理版本号
?
配置依赖 ,在 pom 文件中添加以下内容
?
适配dubbo ,要让 sleuth 支持 dubbo 框架,需要增加以下两个步骤:
首先添加 dubbo 的插件依赖
配置 dubbo 过滤器
?
配置日志模板 ,修改 logback-spring.xml 文件中 Appender 元素的 encoder 为以下内容
?
?
使用 Logback 的 MDC 机制,在日志模板中加入 traceId 标识,取值方式为 %X{traceId}
?
解决 traceId 跨线程丢失问题
由于 MDC 内部使用的是 ThreadLocal 所以只有本线程才有效,子线程和下游的服务 MDC 里的值会丢失;
需要解决 Spring 的各种线程池与异步方法的父子线程间传递。
解决思路 :重写一个 MDCAdapter 使用阿里的 TransmittableThreadLocal 替换原来的 ThreadLocal 对象,解决各种线程池( ExecutorService / ForkJoinPool / TimerTask )父子进程传值问题。
?
解决 traceId 跨进程丢失问题
dubbo服务 使用 org.apache.dubbo.rpc.Filter 创建一个过滤器进行 traceId 传递
?
?
业务表需要加traceId。
业务应用 生成每次操作的traceid,并更新到操作的业务表中,发送1条业务消息,包含当前操作的操作人相关的信息;
所有业务系统表需要添加trace_id字段,每次操作生成一个随机字符串并保存到业务表中;
日志收集应用库表设计。
基于数据变更的记录方式不仅要和需求方约定好模板(上百个字段的不可能都做展示和记录),也要和前端做一些约定,比如在修改之前的值是多少,修改后的值是多少。
关于“Dubbo日志链路追踪TraceId选型”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
本文来自作者[锺文斌]投稿,不代表小熊号立场,如若转载,请注明出处:https://xx-scm.com/cshi/202606-179738.html
评论列表(4条)
我是小熊号的签约作者“锺文斌”!
希望本篇文章《Dubbo日志链路追踪TraceId选型》能对你有所帮助!
本站[小熊号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育
本文概览:网上科普有关“Dubbo日志链路追踪TraceId选型”话题很是火热,小编也是针对Dubbo日志链路追踪TraceId选型寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你...