SpringBoot引入sleuth做链路追踪

一、sleuth介绍

sleuth 是一个分布式跟踪系统,用于跟踪应用程序中的请求和操作。引入该依赖后,日志中会自动添加(traceid,spanid),但是sleuth也可以在SpringBoot中单独使用

二、sleuth引用

#pom.xml引入spring-cloud
<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>2021.0.5</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>

#业务的pom.xml中引入sleuth包
<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-sleuth</artifactId>
		</dependency>

三、日志文件的修改

<?xml version="1.0" encoding="UTF-8"?>
<!-- 从高到地低 OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL -->
<!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时会输出 -->
<!-- 以下每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过 filter 过滤只记录本级别的日志 -->
<!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 
	debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->

<configuration scan="true" scanPeriod="60 seconds"
	debug="false">
	<!-- 日志最大的历史 30天 -->
	<property name="maxHistory" value="60" />
	<!-- 日志最大的文件大小 300MB -->
	<property name="maxFileSize" value="100MB" />
	<property name="BaseLogName" value="order" />
	<property name="logPath" value="d:/test/log" />
	<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%X{traceId:-},%X{spanId:-}] [%thread] %-5level %logger{50} - %msg%n"/>
	<!-- 控制台输出 -->
	<appender name="STDOUT"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder
			class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
			<!--  
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
			-->
			<pattern>${FILE_LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<appender name="DEBUG"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${logPath}/debug.log</file>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>
				${logPath}/%d{yyyy-MM-dd}/debug.%d{yyyy-MM-dd}.%i.log.gz
			</fileNamePattern>
			<maxHistory>${maxHistory}</maxHistory>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>${maxFileSize}</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder>
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
			<!--  
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
			-->
			<pattern>${FILE_LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<!--myibatis log configure -->
	<logger name="com.apache.ibatis" level="ERROR" />
	<logger name="com.zaxxer.hikari" level="WARN" />
	<logger name="io.lettuce.core" level="WARN" />
	<logger name="org.hibernate.validator" level="ERROR" />
	<logger name="org.springframework" level="WARN" />
	<logger name="org.mybatis.spring" level="WARN" />
	<logger name="java.sql.Connection" level="ERROR" />
	<logger name="java.sql.Statement" level="WARN" />
	<logger name="java.sql.PreparedStatement" level="DEBUG" />

	<!-- 日志输出级别 -->
	<root level="DEBUG">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="DEBUG" />
	</root>

</configuration>

四、application.yml的修改

spring:
  sleuth:
     enabled: true

五、启动Application应用查看traceId信息

2023-11-26 12:47:40.056 [TID:cac59d5c559740d8bc10443e9aafe964.129.17009740600380001] [c118555cfa8cf4f8,c118555cfa8cf4f8] [http-nio-8081-exec-1] INFO  o.a.c.c.C.[.[.[/demobigdata] -Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-11-26 12:47:40.129 [TID:cac59d5c559740d8bc10443e9aafe964.129.17009740600380001] [c118555cfa8cf4f8,c118555cfa8cf4f8] [http-nio-8081-exec-1] INFO  o.d.w.c.a.c.AccountController -ent getAllAccount
2023-11-26 12:47:40.129 [TID:cac59d5c559740d8bc10443e9aafe964.129.17009740600380001] [c118555cfa8cf4f8,c118555cfa8cf4f8] [http-nio-8081-exec-1] INFO  o.d.s.a.impl.AccountServiceImpl -queryAllAccount
2023-11-26 12:47:40.199 [TID:cac59d5c559740d8bc10443e9aafe964.129.17009740600380001] [c118555cfa8cf4f8,c118555cfa8cf4f8] [http-nio-8081-exec-1] DEBUG com.clickhouse.jdbc.ClickHouseDriver -ClickHouse Driver 0.5.0.0(JDBC: 4.2.0.0) registered
2023-11-26 12:47:40.446 [TID:cac59d5c559740d8bc10443e9aafe964.129.17009740600380001] [c118555cfa8cf4f8,c118555cfa8cf4f8] [http-nio-8081-exec-1] INFO  c.alibaba.druid.pool.DruidDataSource -{dataSource-1} inited
2023-11-26 12:47:40.651 [TID:cac59d5c559740d8bc10443e9aafe964.129.17009740600380001] [c118555cfa8cf4f8,c118555cfa8cf4f8] [http-nio-8081-exec-1] DEBUG o.d.m.d.a.A.selectAllAccount -==>  Preparing: select id,username,password from account
2023-11-26 12:47:40.670 [TID:cac59d5c559740d8bc10443e9aafe964.129.17009740600380001] [c118555cfa8cf4f8,c118555cfa8cf4f8] [http-nio-8081-exec-1] DEBUG o.d.m.d.a.A.selectAllAccount -==> Parameters: 
2023-11-26 12:47:40.697 [TID:cac59d5c559740d8bc10443e9aafe964.129.17009740600380001] [c118555cfa8cf4f8,c118555cfa8cf4f8] [http-nio-8081-exec-1] DEBUG o.d.m.d.a.A.selectAllAccount -<==      Total: 91

这样springboot就成功引入sleuth入了。

Spring Boot单体服务的链路追踪主要是通过集成分布式跟踪系统来实现的。这种方法可以帮助开发者在复杂的分布式系统中定位和跟踪请求的处理过程。下面是实现链路追踪的一般步骤: 1. 引入链路追踪相关依赖:在Spring Boot项目中,可以通过添加相关的starter依赖来集成链路追踪系统。常见的分布式追踪系统有Zipkin、Jaeger等。 2. 配置追踪服务:配置追踪系统的信息,包括追踪服务的地址、端口等信息。这些信息会用来发送追踪数据到追踪服务。 3. 使用追踪客户端:在代码中引入追踪客户端,比如在方法的开始和结束处插入追踪代码,记录操作和时间。 4. 启动追踪服务:启动链路追踪服务,这样当Spring Boot应用运行起来后,所有的请求都会被追踪并记录。 5. 分析追踪数据:通过追踪服务提供的UI界面或API,查看服务调用的链路数据,分析请求的流转和处理时间。 以Zipkin为例,实现Spring Boot单体服务链路追踪的大致步骤如下: 1. 引入依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> ``` 2. 配置application.properties或application.yml: ```properties spring.zipkin.base-url=http://localhost:9411 spring.sleuth.sampler.probability=1.0 ``` 3. 启动Zipkin服务,并确保Spring Boot应用能够访问Zipkin服务。 4. 在服务中进行追踪操作,Spring Cloud Sleuth会自动为每个请求创建一个Span,并记录调用的详细信息。 通过以上步骤,Spring Boot单体服务的链路追踪就得以实现。开发者可以通过查看Zipkin的追踪信息来分析请求在系统中的流转情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值