详解

随着微服务盛行,很多公司都把系统按照业务边界拆成了很多微服务,在排错查日志的时候。因为业务链路贯穿着很多微服务节点,导致定位某个请求的日志以及上下游业务的日志会变得有些困难。
搭建分布式链路追踪系统一天下来产生几十G上百G的数据其实非常正常。如果想保存时间长点的话,也需要增加服务器磁盘的成本。那么就可以考虑这个Tlog轻量级日志追踪,接入简单,基本十分钟就可以实现微服务之间链路追踪。
他不存储日志,它只是自动的对你的日志进行打标签,自动生成TraceId贯穿你微服务的一整条链路。并且提供上下游节点信息。

特性:

  • 持dubbo,dubbox,spring cloud三大RPC框架。
  • 对业务代码无侵入式设计,使用简单,10分钟即可接入。
  • 支持常见的log4j,log4j2,logback三大日志框架,并提供自动检测,完成适配。
  • 支持Spring Cloud Gateway和Soul网关。
  • 适配HttpClient和Okhttp的http调用标签传递。
  • 支持三种任务框架,JDK的TimerTask,Quartz,XXL-JOB。
  • 支持日志标签的自定义模板的配置,提供多个系统级埋点标签的选择。
  • 支持异步线程的追踪,包括线程池,多级异步线程等场景。
  • 几乎无性能损耗,快速稳定,经过压测,损耗在0.01%。

开始接入:

  • pom引入依赖
<dependency><groupId>com.yomahub</groupId><artifactId>tlog-all-spring-boot-starter</artifactId><version>1.3.6</version>
</dependency>

这里选择了springboot的依赖包,还支持spring native

  • 日志配置文件修改:

按照接入文档修改的encoder的class为com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder

  • 需要打印上层服务名称、ip,需要增加配置
#TLog轻量级日志追踪
tlog:pattern: '[$preApp][$preIp][$spanId][$traceId]'

$preApp:上游微服务节点名称

$preHost: 上游微服务的Host Name

$preIp:上游微服务的IP地址

$spanId:链路spanId,具体规则可以参照八.SpanId生成规则

$traceId:全局唯一跟踪ID

这里最好建一个公共的yaml,所有模块都引入,否则每个模块都要改

  • 日志输出格式修改
 <encoder class="com.yomahub.tlog.core.enhance.logback.AspectLogbackEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{tl} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder>

TLog中log4j和logback的占位符为%X{tl},而在log4j2中的占位符为%TX{tl},不要写错

  • 自动打印调用参数和时间

对于springboot应用来说,你只需在springboot的配置文件中作如下配置:

#TLog轻量级日志追踪
tlog:# 不配默认为falseenable-invoke-time-print: true
  • 自定义TraceId生成器

TLog默认采用snowflake算法生成traceId,当然你也可以去更换traceId的生成算法。
定义自己的traceId生成类去继承TLogIdGenerator接口:

tlog:id-generator: cn.zealon.readingcloud.common.generator.IdGenerator
  • 对OpenFeign支持:
    需要在spring xml里如下配置
<bean class="com.yomahub.tlog.feign.filter.TLogFeignFilter"/>
<bean class="com.yomahub.tlog.core.aop.AspectLogAop"/>
  • 自定义模板显示和开启rpc时间打印
    需要在spring xml如下配置
<bean class="com.yomahub.tlog.spring.TLogPropertyInit"><property name="pattern" value="[$preApp][$preHost][$preIp][$spanId][$traceId]"/><property name="enableInvokeTimePrint" value="true"/>
</bean>
  • 查看效果
    gateway服务 日志 日志id:bc9a91d8-0156-43a0-9361-5ed037016f32
2022-03-13 17:45:13.858 [NONE][NONE][0][bc9a91d8-0156-43a0-9361-5ed037016f32] [reactor-http-nio-3] INFO  com.netflix.config.ChainedDynamicProperty - Flipping property: light-reading-cloud-account.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2022-03-13 17:45:13.881 [NONE][NONE][0][bc9a91d8-0156-43a0-9361-5ed037016f32] [reactor-http-nio-3] INFO  com.netflix.loadbalancer.BaseLoadBalancer - Client: light-reading-cloud-account instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=light-reading-cloud-account,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
2022-03-13 17:45:13.889 [NONE][NONE][0][bc9a91d8-0156-43a0-9361-5ed037016f32] [reactor-http-nio-3] INFO  c.n.loadbalancer.DynamicServerListLoadBalancer - Using serverListUpdater PollingServerListUpdater
2022-03-13 17:45:13.910 [NONE][NONE][0][bc9a91d8-0156-43a0-9361-5ed037016f32] [reactor-http-nio-3] INFO  com.netflix.config.ChainedDynamicProperty - Flipping property: light-reading-cloud-account.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2022-03-13 17:45:13.913 [NONE][NONE][0][bc9a91d8-0156-43a0-9361-5ed037016f32] [reactor-http-nio-3] INFO  c.n.loadbalancer.DynamicServerListLoadBalancer - DynamicServerListLoadBalancer for client light-reading-cloud-account initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=light-reading-cloud-account,current list of Servers=[192.168.0.102:8003],Load balancer stats=Zone stats: {unknown=[Zone:unknown; Instance count:1;   Active connections count: 0;    Circuit breaker tripped count: 0;   Active connections per server: 0.0;]
},Server stats: [[Server:192.168.0.102:8003;    Zone:UNKNOWN;   Total Requests:0;   Successive connection failure:0;    Total blackout seconds:0;   Last connection made:Thu Jan 01 08:00:00 CST 1970;  First connection made: Thu Jan 01 08:00:00 CST 1970;    Active Connections:0;   total failure count in last (1000) msecs:0; average resp time:0.0;  90 percentile resp time:0.0;    95 percentile resp time:0.0;    min resp time:0.0;  max resp time:0.0;  stddev resp time:0.0]
]}ServerList:org.springframework.cloud.alibaba.nacos.ribbon.NacosServerList@40ba8c05
2022-03-13 17:45:14.909 [NONE][NONE][0][bc9a91d8-0156-43a0-9361-5ed037016f32] [PollingServerListUpdater-0] INFO  com.netflix.config.ChainedDynamicProperty - Flipping property: light-reading-cloud-account.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647

account服务 日志id:bc9a91d8-0156-43a0-9361-5ed037016f32

2022-03-13 17:45:14.417 [light-reading-cloud-gateway][192.168.0.102][0.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8003-exec-1] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]开始请求URL[/account/like-see/get-books],参数为:{"limit":["10"],"page":["1"]}
2022-03-13 17:45:15.772 [light-reading-cloud-gateway][192.168.0.102][0.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [HystrixTimer-1] ERROR c.z.r.book.feign.fallback.BookClientFallBack - 获取图书[60034980]失败:null
2022-03-13 17:45:15.814 [light-reading-cloud-gateway][192.168.0.102][0.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [hystrix-light-reading-cloud-book-1] INFO  com.netflix.config.ChainedDynamicProperty - Flipping property: light-reading-cloud-book.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2022-03-13 17:45:15.836 [light-reading-cloud-gateway][192.168.0.102][0.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [hystrix-light-reading-cloud-book-1] INFO  com.netflix.loadbalancer.BaseLoadBalancer - Client: light-reading-cloud-book instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=light-reading-cloud-book,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
2022-03-13 17:45:15.846 [light-reading-cloud-gateway][192.168.0.102][0.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [hystrix-light-reading-cloud-book-1] INFO  c.n.loadbalancer.DynamicServerListLoadBalancer - Using serverListUpdater PollingServerListUpdater
2022-03-13 17:45:15.860 [light-reading-cloud-gateway][192.168.0.102][0.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [hystrix-light-reading-cloud-book-1] INFO  com.netflix.config.ChainedDynamicProperty - Flipping property: light-reading-cloud-book.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2022-03-13 17:45:15.863 [light-reading-cloud-gateway][192.168.0.102][0.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [hystrix-light-reading-cloud-book-1] INFO  c.n.loadbalancer.DynamicServerListLoadBalancer - DynamicServerListLoadBalancer for client light-reading-cloud-book initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=light-reading-cloud-book,current list of Servers=[192.168.0.102:8001],Load balancer stats=Zone stats: {unknown=[Zone:unknown; Instance count:1;   Active connections count: 0;    Circuit breaker tripped count: 0;   Active connections per server: 0.0;]
},Server stats: [[Server:192.168.0.102:8001;    Zone:UNKNOWN;   Total Requests:0;   Successive connection failure:0;    Total blackout seconds:0;   Last connection made:Thu Jan 01 08:00:00 CST 1970;  First connection made: Thu Jan 01 08:00:00 CST 1970;    Active Connections:0;   total failure count in last (1000) msecs:0; average resp time:0.0;  90 percentile resp time:0.0;    95 percentile resp time:0.0;    min resp time:0.0;  max resp time:0.0;  stddev resp time:0.0]
]}ServerList:org.springframework.cloud.alibaba.nacos.ribbon.NacosServerList@18164192
2022-03-13 17:45:16.686 [light-reading-cloud-gateway][192.168.0.102][0.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8003-exec-1] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]结束URL[/account/like-see/get-books]的调用,耗时为:2265毫秒
2022-03-13 17:45:16.859 [light-reading-cloud-gateway][192.168.0.102][0.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [PollingServerListUpdater-0] INFO  com.netflix.config.ChainedDynamicProperty - Flipping property: light-reading-cloud-book.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647

服务Feign调用Book服务 日志id:bc9a91d8-0156-43a0-9361-5ed037016f32

2022-03-13 17:45:16.345 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-1] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]开始请求URL[/book/getBookById],参数为:{"bookId":["355025"]}
2022-03-13 17:45:16.345 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-2] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]开始请求URL[/book/getBookById],参数为:{"bookId":["60034980"]}
2022-03-13 17:45:16.473 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-1] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]结束URL[/book/getBookById]的调用,耗时为:124毫秒
2022-03-13 17:45:16.473 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-2] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]结束URL[/book/getBookById]的调用,耗时为:124毫秒
2022-03-13 17:45:16.544 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-3] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]开始请求URL[/book/getBookById],参数为:{"bookId":["60924085"]}
2022-03-13 17:45:16.550 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-3] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]结束URL[/book/getBookById]的调用,耗时为:5毫秒
2022-03-13 17:45:16.557 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-4] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]开始请求URL[/book/getBookById],参数为:{"bookId":["60036284"]}
2022-03-13 17:45:16.564 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-4] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]结束URL[/book/getBookById]的调用,耗时为:5毫秒
2022-03-13 17:45:16.570 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-5] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]开始请求URL[/book/getBookById],参数为:{"bookId":["60348379"]}
2022-03-13 17:45:16.576 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-5] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]结束URL[/book/getBookById]的调用,耗时为:5毫秒
2022-03-13 17:45:16.585 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-6] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]开始请求URL[/book/getBookById],参数为:{"bookId":["3001823523"]}
2022-03-13 17:45:16.590 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-6] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]结束URL[/book/getBookById]的调用,耗时为:4毫秒
2022-03-13 17:45:16.600 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-7] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]开始请求URL[/book/getBookById],参数为:{"bookId":["3001823403"]}
2022-03-13 17:45:16.605 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-7] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]结束URL[/book/getBookById]的调用,耗时为:4毫秒
2022-03-13 17:45:16.616 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-8] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]开始请求URL[/book/getBookById],参数为:{"bookId":["3001823527"]}
2022-03-13 17:45:16.621 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-8] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]结束URL[/book/getBookById]的调用,耗时为:4毫秒
2022-03-13 17:45:16.627 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-9] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]开始请求URL[/book/getBookById],参数为:{"bookId":["322538"]}
2022-03-13 17:45:16.632 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-9] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]结束URL[/book/getBookById]的调用,耗时为:4毫秒
2022-03-13 17:45:16.638 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-10] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]开始请求URL[/book/getBookById],参数为:{"bookId":["60348651"]}
2022-03-13 17:45:16.645 [light-reading-cloud-account][192.168.0.102][0.1.1][bc9a91d8-0156-43a0-9361-5ed037016f32] [http-nio-8001-exec-10] INFO  c.y.t.web.interceptor.TLogWebInvokeTimeInterceptor - [TLOG]结束URL[/book/getBookById]的调用,耗时为:6毫秒

这里我们看到日志id可以统一了,并且有调用方的服务名字、每个接口的进出响应时间、参数。

Tlog详情文档地址
以上项目demo地址

TLog轻量级日志追踪相关推荐

  1. python轨迹追踪、全链路日志追踪trace_id实现

    python轨迹追踪.全链路日志追踪trace_id实现 非链路日志(普通日志) 我收到一个请求,参数是 我收到一个请求,参数是 我收到一个请求,参数是 我收到一个请求,参数是 我收到一个请求,参数是 ...

  2. springboot整合dubbo_springboot整合dubbo设置全局唯一ID进行日志追踪

    1.新建项目 利用idea创建一个父项目,三个子项目,其中一个项目为生产者,一个项目为消费者,一个为接口等公共服务项目,生产者和消费者需要有web依赖,可以作为tomcat容器启动. 2.项目依赖 & ...

  3. 循序渐进看Java web日志跟踪(1)-Tomcat 日志追踪与配置

    日志,是软件运行过程中,对各类操作中重要信息的记录. 日志跟踪,不管对于怎么样的项目来说,都是非常重要的一部分,它关系到项目后期的维护和排错,起着举足轻重的作用.项目开发过程中,对日志的记录规则,也将 ...

  4. dubbo protocol port 消费者端_springboot整合dubbo设置全局唯一ID进行日志追踪

    击上方蓝色"程序员白楠楠",选择"设为星标" 作者:松下听泉 出处:https://blog.csdn.net/weixin_39427718 1.新建项目 利 ...

  5. 轻量级日志采集系统Loki+grafana搭建

    轻量级日志采集系统Loki+grafana搭建 一.Loki介绍 整体架构 Loki的架构非常简单,使用了和prometheus一样的标签来作为索引,也就是说,你通过这些标签既可以查询日志的内容也可以 ...

  6. mysql查看日志命令_面对成百上千台服务器产生的日志,试试这款轻量级日志搬运神器!

    之前我们搭建的ELK日志收集系统,主要是用来收集SpringBoot应用的日志.其原理是应用通过Logstash插件,使用TCP向Logstash传输日志,从而存储到Elasticsearch中去.但 ...

  7. java ndc_通过slf4j/log4j的MDC/NDC 实现日志追踪

    在分布式系统或者较为复杂的系统中,我们希望可以看到一个客户请求的处理过程所涉及到的所有子系统\模块的处理日志. 由于slf4j/log4j基本是日志记录的标准组件,所以slf4j/log4j成为了我的 ...

  8. mysql查看日志命令_面对成百上千台服务器产生的日志,试试这款轻量级日志搬运神器!...

    Filebeat简介 Filebeat是一款轻量级日志采集器,可用于转发和汇总日志与文件.Filebeat内置有多种模块(Nginx.MySQL.Redis.Elasticsearch.Logstas ...

  9. Android轻量级日志管理框架

    代码地址如下: http://www.demodashi.com/demo/12134.html ViseLog Android 轻量级日志框架,使用森林对象维护不同的日志树进行日志输出,可以是Log ...

最新文章

  1. 算法最少分组法_数据结构
  2. [笔记].关于在Quartus II 11.0无法正常使用SignalTap的解决方法
  3. python识别latex公式_Python代码转Latex公式,这个开源库用一行代码帮你搞定
  4. 渗透测试 回显机制平台 dnslog 搭建
  5. only one element tensors can be converted to Python scalars
  6. Windows核心编程 第五章 作业(下)
  7. 【数理知识】二次型求导 矩阵求导
  8. 三个程序代码托管平台出现勒索事件? 建议启用多因素验证以保护账户
  9. 用java模仿钉钉_java接入钉钉机器人(附源码)
  10. JavaEE 注解笔记:(一)
  11. 【Codeforces 1426 E】Rock, Paper, Scissors,贪心!算反面
  12. java 弹幕游戏_java弹幕小游戏1.0版本
  13. spring jpa查询视图
  14. 用HFFS实例讲解多频天线设计
  15. 开源ONE兔3.0社交社区交友婚恋视频即时通讯双端APP原生源码
  16. 【AppScan闪退】
  17. error: undefined reference to ‘_imp___ZN12QApplicationC1ERiPPci‘
  18. 如何写一份高可读性的软件工程设计文档
  19. Centos7 安装 worldpress
  20. oss 照片图片处理 压缩图

热门文章

  1. 针对BraTS2018~2020的项目经验总结
  2. Brats 2018 数据集分享
  3. Maven —— 生命周期
  4. PHP抓取网页指定文章标题
  5. 心里窝火无语的图片_对自己无语的说说、句子及图片
  6. processon导出的svg 插入到word中不显示图形边框
  7. 常见Mbps、mb、Kbps、kb、bps单位换算-洋葱先生-杨少通
  8. 2021互联网营销思路如何打开
  9. Python爬微信好友头像,性别,所在地区
  10. 电脑上的文件怎么传到服务器,电脑上文件怎么传到云服务器