全链路追踪TLog

2024-08-22 07:18
文章标签 追踪 链路 tlog

本文主要是介绍全链路追踪TLog,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分布式追踪系统

SkyWalking,Pinpoint,基于OpenTracing规范,而且通常都是无侵入性的,并且有相对友好的管理界面来进行链路Span的查询。

TLog特性

  • 通过对日志打标签完成轻量级微服务日志追踪
  • 提供三种接入方式:javaagent完全无侵入接入,字节码一行代码接入,基于配置文件的接入
  • 对业务代码无侵入式设计,使用简单,10分钟即可接入
  • 支持常见的log4j,log4j2,logback三大日志框架,并提供自动检测,完成适配
  • 支持dubbo,dubbox,springcloud三大RPC框架
  • 支持Spring Cloud Gateway和Soul网关
  • 适配HttpClient和Okhttp的http调用标签传递
  • 支持三种任务框架,JDK的TimerTask,Quartz,XXL-JOB
  • 支持日志标签的自定义模板的配置,提供多个系统级埋点标签的选择
  • 支持异步线程的追踪,包括线程池,多级异步线程等场景
  • 几乎无性能损耗,快速稳定,经过压测,损耗在0.01%
    在这里插入图片描述
  • 自启动
    由main函数作为项目的启动入口
  • 外置容器启动
    指项目部署在类似tomcat容器中的,tomcat作为外容器,项目部署在webapp目录下的
    javaagent本质也是字节码注入方式,只不过是完全无侵入项目的方式。
    TLog接入方式对于特性的支持:
    在这里插入图片描述

安装TLog

全量依赖
TLog对springboot和spring native提供了两种不同依赖,此种方式只需依赖一个包,必须的包会传递依赖进来
(1)springboot依赖

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

(2)spring native依赖

<dependency><groupId>com.yomahub</groupId><artifactId>tlog-all</artifactId><version>1.3.1</version>
</dependency>

按需依赖

<dependency><groupId>com.yomahub</groupId><artifactId>tlog-XXX-spring-boot-starter</artifactId><version>1.3.1</version>
</dependency>

在这里插入图片描述javaagent接入方式
(1)在Java启动参数中加入:

-javaagent:/your_path/tlog-agent.jar

(2)下载地址:

https://gitee.com/dromara/TLog/releases/v1.3.1

字节码注入方式
这种方式适合springboot项目,需要项目依赖tlog-all-spring-boot-starter包, tlog提供springboot的自动装配功能。
只需要在你的启动类中加入一行代码,即可以自动进行探测你项目所使用的Log框架,并进行增强。
以下方法适用于log4j,logback,原则上log4j2连这一行都不需要,因为log4j2会插件架构设计,会自动读取TLog项目中log4j2的适配插件:

@SpringBootApplication
public class Runner {static {AspectLogEnhance.enhance();}//进行日志增强,自动判断日志框架public static void main(String[] args) {SpringApplication.run(Runner.class, args);}
}

因为这里是用javassist实现,需要在jvm加载对应日志框架的类之前,进行字节码增强。所以这里用static块。但是此方法要注意以下几点:

  • 对于Springboot应用而言,启动类中不能加入log定义,否则会不生效
  • 如果你的项目是非springboot,或者你是用tomcat/jboss/jetty等外置容器启动的(springboot的spring-boot-starter-web属于内置容器),则此方法无法使用,只能手动修改log配置文件
  • 对于使用log4j2日志框架的应用来说,此方法如果出现不生效的情况,请把log4j2配置文件的pattern中的m/msg/message改成tm/tmsg/tmessage

示例:

2021-06-21 13:57:10.310  INFO 8988 --- [nio-8101-exec-1] c.fofund.boot.redis.cache.RedisService   : <0><8734574520119040> 缓存key:[fofund-ipmc:login_token:null]
2021-06-21 13:57:10.367  INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect     : <0><8734574520119040> login accountCode:[null],token:[null]
2021-06-21 13:57:10.367  INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect     : <0><8734574520119040> ----------------request start----------------
2021-06-21 13:57:10.368  INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect     : <0><8734574520119040> URL:http://localhost:8101/ipmc/account/add
2021-06-21 13:57:10.368  INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect     : <0><8734574520119040> HTTP_METHOD :POST
2021-06-21 13:57:10.368  INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect     : <0><8734574520119040> IP:0:0:0:0:0:0:0:1
2021-06-21 13:57:10.371  INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect     : <0><8734574520119040> CLASS_METHOD:com.fofund.ipmc.controller.AccountController.addAccount
2021-06-21 13:57:10.372  INFO 8988 --- [nio-8101-exec-1] com.fofund.ipmc.aop.ControllerAspect     : <0><8734574520119040> ARGS:[AccountRequest(accountId=null, loginName=zhangwenlong99, password=LF8JQW1FywP+cuY+YEeMEBCOib7RcYYvMTLzbzCsVeSg4aj+pCSimmZSCeKX6bow5wOnsPOw64Phs30Pow38mIJsJmSc/J7Apv23htr3/JUiO6w9EpoLIGluU01NvplG/cpzIufxZNtMxkhBOzvCX1tV68NKg0LkYqa7Flh6nv0=, accountName=zhangwenlong05, employeeName=zhangwenlong05, phone=13003252799, email=zhangsan@fofund.com.cn, loginSwitch=1, oaFlag=null, roleList=[

这篇关于全链路追踪TLog的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095604

相关文章

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp

链路聚合配置

链路聚合配置前需要将物理接口进行清除,然后将接口加入到聚合内完成对接。 对接端口核心3口4口与财务核心的23口与24口进行对接。 拓扑如下:​​​​​​​ 配置如下: 核心路由器[CK]dhcp enable [CK]interface GigabitEthernet 0/0/0[CK-GigabitEthernet0/0/0]ip address dhcp-alloc[CK]a

华为eNSP:手工链路聚合和动态链路聚合

手工链路聚合(静态链路聚合) 一、拓扑图 二、交换机配置过程 [s1]int Eth-Trunk 1#创建进入链路聚合组1[s1-Eth-Trunk1]trunkport g0/0/1#将g0/0/1口加入聚合组1[s1-Eth-Trunk1]trunkport g0/0/2[s1-Eth-Trunk1]trunkport g0/0/3[s1-Eth-Trunk1]quit 配

SNAT的链路流程

A主机,有公网ip,比如1.1.1.1               有内网ip,比如192.168.1.1 B主机, 有内网ip,比如192.168.1.123 A主机和B主机在同一局域网,用交换机连接。或者在云平台,两个属于同一个vpc下的同一个subnet,也就是在同一个虚拟私人网络下的,同一个子网内。 如何实现B主机通过A主机的公网ip访问公网的服务? 这个就是snat解决的问题

实时数仓链路分享:kafka =SparkStreaming=kudu集成kerberos

点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! 本文档主要介绍在cdh集成kerberos情况下,sparkstreaming怎么消费kafka数据,并存储在kudu里面 假设kafka集成kerberos假设kudu集成kerberos假设用非root用户操作spark基

Flink全链路延迟的测量方式和实现原理

点击上方蓝色字体,选择“设为星标” 回复”面试“获取更多惊喜 本文已经加入「大数据成神之路PDF版」中提供下载。你可以关注公众号,后台回复:「PDF」 即可获取。 一、背景 Flink Job端到端延迟是一个重要的指标,用来衡量Flink任务的整体性能和响应延迟(大部分流式应用,要求低延迟特性)。 通过流处理引擎竞品对比,我们发现大部分流计算引擎产品,都在告警监控页面,集成了全链路时延指标

SpringCloud之Sleuth(Micrometer)+ZipKin分布式链路追踪

(学习笔记) 1、分布式链路追踪概述 问题:在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。 在分布式与微服务场景下,我们需要解决如下问题:   在大规模分布式与微服务集群下,如何实时观测系统的整体调用链路情况。