一.链路追踪概念
有时候项目中微服务数量很多,服务之间互相调用,当出错时,查找是哪个服务出现错误十分困难,所以引入了链路追踪技术,来查找服务之间的调用链
服务名称:执行业务的服务名称
全局请求ID: 在所有服务完成一项任务时,这项任务在整个项目中的唯一ID
工作单元: 服务发起一次远程调用,就是一个工作单元
请求时间: 每次工作单元执行的时间
二.引入Sleuth依赖
<!-- sleuth-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
在微服务中修改项目的日志级别:
logging:
level:
org.springframework.web.servlet.DispatcherServlet: debug #设置日志级别,以便更好的看到链路追踪
注意:logging前面要空两格,否则会报错
调用服务,查看日志
这里是user-service调用book-service的服务
user-service的日志:
2023-09-13 18:18:15.610 INFO [user-service,b3c7550997af5674,b3c7550997af5674,true] 13100 --- [nio-8080-exec-1] c.netflix.config.ChainedDynamicProperty : Flipping property: book-service.ribbon.ActiveConnectionsLimit to use NEXT property:
book-service的日志:
2023-09-13 18:18:15.818 INFO [book-service,b3c7550997af5674,a252b02a7c9d697b,true] 20144 --- [nio-8081-exec-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
第一个是服务名称,第二个是全局ID,第三个是工作单元
但是这样查看非常麻烦,所以引入了可视化链路追踪zipkin
三.zipkin下载安装
1.zipkin官网: https://zipkin.io/pages/quickstart.html
①、下载可执行 jar
# Linux
curl -sSL https://zipkin.io/quickstart.sh | bash -s
nohup java -jar zipkin.jar >> out.log &
# window
下载地址:https://search.maven.org/search?q=zipkin-server 注意需要下载 exec.jar
start /min java -jar zipkin-server-2.23.16-exec.jar # start /min 类似 Linux 的 nohup 命令
②、源码下载
# get the latest source
git clone https://github.com/openzipkin/zipkin
cd zipkin
# Build the server and also make its dependencies
./mvnw -DskipTests --also-make -pl zipkin-server clean install
# Run the server
java -jar ./zipkin-server/target/zipkin-server-*exec.jar
③、docker 启动
docker pull openzipkin/zipkin
docker run -d -p 9411:9411 openzipkin/zipkin
zipkin 默认端口号 9411,你可以在 zipkin 启动日志查看端口号 http://127.0.0.1:9411/zipkin/
java -jar 启动zipkin
2.引入zipkin客户端依赖
<!-- zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
3.修改配置文件
#链路追踪
zipkin:
base-url: http://localhost:9411
discovery-client-enabled: false
sleuth:
sampler:
probability: 1 #采集率为100%
再次调用,查看控制台:
可以清晰的看到服务的调用信息
四.消息队列收集链路追踪
用http采样,性能不好,用RabbitMQ来进行数据采集,提高系统的性能
1.在每个服务中引入RabbitMQ依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.修改配置文件
zipkin:
sender:
type: rabbit
rabbitmq:
addresses: localhost:5672
username: jjh123
password: 123456
sleuth:
sampler:
probability: 1
3.修改zipkin的启动方式
java -DRABBIT_ADDRESSES=localhost:5672 -DRABBIT_USER=jjh123 -DRABBIT_PASSWORD=123456 -jar zipkin.jar