Java分布式日志标记追踪
实现方式:
- 自己生成 traceId 并 put 到 MDC 里面;
- 使用 SkyWalking traceid 进行链路追踪;
- Tlog实现;
- 使用 Elastic APM 的 trace.id 进行链路追踪;
分布式追踪系统从诞生之际到有实质性的突破,很大程度受到Google Dapper的影响,目前常见的分布式追踪系统有Twitter的Zipkin、SkyWalking、阿里的EagleEye、PinPoint和美团的MTrace等,这些大多都是基于Google Dapper的设计思想
多语言的就自行实现吧,通过head传递过去,解析出来,打印到日志中
手动实现
MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 、logback及log4j2 提供的一种方便在多线程条件下记录日志的功能。MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对。
OncePerRequestFilter
请求进入的时候增加traceId、trackId、requestId、tid(其中选一个变量名称),设置到MDC
中,日志打印的时候加上,response的时候也加上注意:
- 子线程需要加上
- http调用的时候加上
- 拦截器HandlerInterceptor 处理进入
- Interceptor 处理restTemplate或者okHttp等,加入到head中
- spanId(每个服务的ID,服务名称)
skywalking
TLog
更加轻的日志打标
TLog通过对日志打标签完成企业级微服务的日志追踪。它不收集日志,使用简单, 产生全局唯一追踪码。除了追踪码,TLog还支持SpanId和上下游服务信息 标签的追加。你还可以自定义方法级别的标签,让日志的定位轻而易举。
$preApp
:上游微服务节点名称$preHost
: 上游微服务的Host Name$preIp
:上游微服务的IP地址$spanId
:链路spanId,具体规则可以参照八.SpanId生成规则
$traceId
:全局唯一跟踪IDELK的日志收集
Loading...