轻量级的日志追踪框架TLog。10 分钟即可接入!

开始文章之前,且听我简单BB几句。

国产开源之路不易,好的国产开源项目还是太少太少了。国内一些用心做开源的技术人基本都是靠爱发电。

今天介绍的这个日志框架的作者自己维护了 3 个开源框架,为此他经常忙到凌晨1,2点。目前,这个日志框架目前仍在开发中。不得不说的是!这个项目整体的代码质量很高,非常值得小伙伴们学习一波!

前言

随着微服务盛行,很多公司都把系统按照业务边界拆成了很多微服务,在排错查日志的时候。因为业务链路贯穿着很多不同微服务,同一个微服务又可能部署着十几个节点,要排查某一个请求的日志,总不见得一个个节点搜过去吧,所以这时候日志的链路追踪就显得很有必要了。

很多公司可能自己搭了 ELK 或者使用了一些云产品的日志服务,但是它们只解决了日志的收集和展现,并没有提供日志的链路追踪。

也有公司上 SkyWalkingPinpoint 等分布式追踪系统来解决,基于 OpenTracing 规范,而且通常都是无侵入性的,提供探针来收集发送日志,并且有相对友好的展示界面来进行链路的查询。

分布式追踪系统固然是一个比较完善的解决方案,但是熟悉以及推广到全公司的系统需要一定的时间周期,而且当中涉及到链路 span 节点的存储成本问题,全量采集还是部分采集?如果全量采集,就以 SkyWalking 的存储来举例,ES 集群搭建至少需要 5 个节点。这就需要增加服务器成本。况且如果微服务节点多的话,一天下来产生几十 G 上百 G 的数据其实非常正常。如果想保存时间长点的话,也需要增加服务器磁盘的成本。

有没有一种快速低成本来解决日志追踪问题方案呢?

我发现了最近在 Gitee 上比较火的开源项目 TLog,这是一款主打轻量级的日志追踪框架,号称 10 分钟就可以接入你的系统,支持主流的 dubbodubboxopenfeign 等 rpc 框架,自动适配 logbacklog4jlog4j2 等日志框架。目前该项目入选了Gitee 2020 年的 GVP。

项目地址为:https://gitee.com/bryan31/TLog

1

特点

TLog 提供了一种最简单的方式来解决日志追踪问题,它不收集日志,也不需要额外的存储空间,它只是自动的对你的日志进行打标签,生成一系列的追踪信息的标签融入到你的日志里。这些标签能够有效的获知一条日志属于哪一个调用链,在某个调用链里属于哪一个层次,以及服务的上游信息。

TLog 的官网罗列了以下特性:

  • 通过对日志打标签完成轻量级微服务日志追踪

  • 提供三种接入方式:javaagent 完全无侵入接入;2.字节码一行代码接入;3.基于配置文件的接入

  • 对业务代码无侵入式设计,使用简单,10 分钟即可接入

  • 支持常见的 log4j,log4j2,logback 三大日志框架,并提供自动检测,完成适配

  • 支持 dubbo,dubbox,springcloud 三大 RPC 框架

  • 支持日志标签的自定义模板的配置,提供多个系统级埋点标签的选择

  • 支持异步线程的追踪,包括线程池,多级异步线程等场景

  • 几乎无性能损耗,快速稳定

接入

TLog 主打轻量级和易用性,在接入层面,TLog 提供了探针模式,字节码模式和适配模式。官网提供了一张表供你选择最适合的接入方式:

2

探针模式(javaagent)

其实探针模式是完全不侵入系统的,可以探测你使用的 rpc 框架和日志框架进行自动适配

只需要在 jvm 启动参数上加入:-javaagent:/your_path/tlog-agent.jar 就可以了

字节码注入方式

侵入 pom 文件和启动类,也可以自动探测你使用的 rpc 框架和日志框架

加入依赖:

<dependency>
  <groupId>com.yomahub</groupId>
  <artifactId>tlog-all-spring-boot-starter</artifactId>
  <version>1.1.5</version>
</dependency>

然后启动类中加入字节码增强的一句代码:

3

日志框架适配方式

侵入你所使用的日志框架配置文件,可以自动探测你所使用的 RPC 框架

每种日志框架有不同的配置方式,官网文档写的很详细,这里就不展开说明了。

日志标签

TLog 的核心就是标签,通过对普通的日志追加标签来获得服务追踪信息。

TLog 的标签分内置标签和自定义标签两种,下面就来说说这 2 种标签的定义。

内置标签

TLog 内置有 4 个标签可供选择:preApp,preIp,spanId,traceId

preApp 和 preIp 是上游服务的名称和 IP,其中 traceId 最为关键,这就是贯穿整条链路的追踪号,可以用来追溯某个业务请求。

spanId 是能展示这条日志在调用链中的层次关系。我们假设一次分布式调用中产生的 TraceId 是 0a1234(实际不会这么短),那么根据上文 SpanId 的产生过程,有下图:

4

显而易见,如果把一次调用中的 spanId 全部收集起来,是可以很容易组成一棵调用树的。

TLog 默认只展示spanIdtraceId两个内置标签,但是你可以在 springboot 的配置文件中加入

tlog.pattern=[$preApp][$preIp][$spanId][$traceId]

就可以获得如下的日志展示效果:

2020-11-08 01:34:41.421 [DubboServerHandler-thread-2] INFO  c.y.t.example.dubbo.service.impl.DemoServiceImpl - [demo-app][192.168.50.80][0.1][7457635127294656] logback-dubbox-provider:invoke method sayHello,name=jack
2020-11-08 01:34:41.422 [Thread-8] INFO  c.y.tlog.example.dubbo.service.impl.AsynDomain - [demo-app][192.168.50.80][0.1][7457635127294656] 这是异步方法哦
2020-11-08 01:34:41.423 [Thread-8] INFO  c.y.tlog.example.dubbo.service.impl.AsynDomain - [demo-app][192.168.50.80][0.1][7457635127294656] 异步方法开始
2020-11-08 01:34:41.423 [Thread-8] INFO  c.y.tlog.example.dubbo.service.impl.AsynDomain - [demo-app][192.168.50.80][0.1][7457635127294656] 异步方法结束

自定义标签

TLog 允许用户对某一个方法内的日志加入特定的自定义标签。

平时做项目中有的童鞋喜欢在每条日志上打个订单号,以便方便搜索,类似这样的操作以后就可以轻松的用这个特性来解决啦!

5

当然对于@TLogAspect标签而言,支持的特性有很多,不仅支持基本类型,也支持对象类型的属性取值,同时支持模板设定,自定义转换器等等。详细用法请看官方文档。

其他细节

TLog 在其他细节部分也作了一些支持。

所有的标签显示模板和显示在日志条目中的位置,都是可以自由配置的。

对异步子线程以及线程池中的场景,标签的信息依旧不会丢失。

以上的案例都是针对于 springboot 的,TLog 同时提供了 springboot 和非 springboot 两种版本,以方便更多不同种类的项目的接入。

具体支持部分也请移步 TLog 的官方文档。

最佳实践

TLog 的亮点就是轻量,接入快,适配流行的 rpc 和日志框架也比较全。但是看下来,因为不作日志收集,只是加入追踪信息。虽然从信息角度来说可追踪了。但是实际追踪起来还是不方便。

个人认为 ELK+TLog 或者 云日志产品+TLog 是一个不错的选择。ELK 或者云日志产品负责收集,TLog 负责加入追踪信息,这样就可以互相弥补。成为一套完整的追踪体系。

同时 TLog 作者也表示,未来的的蓝图是做成日志领域集收集,追踪,统计,分析,展现于一体日志中间件。现在目前还在不停迭代中。

最后的思考

在日志追踪领域,TLog 这个开源作品给我们展示了一种简约但又有效的方案,虽然它目前还不提供收集统计和 UI 展现,但是在易用性方面确实下了一番功夫。希望随着这个项目慢慢的迭代,能给开源社区带来更加丰富的特性。

最终再次附上 TLog 的项目托管地址,官网也在里面有连接

https://gitee.com/bryan31/TLog

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的Java开发框架,用于简化Java应用程序的开发和部署。它提供了一个开箱即用的环境,自动配置和管理各种依赖项,并提供了一组方便的功能和组件,以简化开发人员的工作量。Spring Boot的目标是使Java开发更加快速、简单和高效。 Tlog指的是一个基于Spring Boot的开源日志管理系统,用于记录和管理应用程序的运行日志。它提供了一组灵活和强大的功能,以便开发人员更好地监控和分析应用程序的运行情况。 使用Spring Boot和Tlog可以帮助开发人员更好地管理应用程序的日志。通过在Spring Boot应用程序中集成Tlog,开发人员可以轻松地记录和追踪应用程序的运行日志。Tlog提供了多种日志级别,可以根据需求进行配置,使开发人员能够精确地控制和管理日志输出。 除了基本的记录日志功能外,Tlog还提供了一些高级功能,例如日志的分析和监控。开发人员可以使用Tlog来分析应用程序的运行情况,识别潜在的问题,并做出相应的优化和调整。此外,Tlog还支持将日志信息发送到远程服务器或第三方平台,以便进一步的分析和处理。 总而言之,Spring Boot和Tlog是一对强大的工具,可在Java应用程序的开发和运行过程中提供更简便、高效和可控的日志管理。通过集成Tlog,开发人员可以更好地监控和分析应用程序的运行情况,从而能够更好地进行调优和优化。同时,Tlog还提供了灵活和强大的功能,使开发人员能够更好地管理应用程序的日志输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值