技术栈:springcloud gateway + sleuth + dubbo + zipkin 实现链路追踪
1.安装zipkin的server服务
官网网址:https://zipkin.io/pages/quickstart.html
下载jar包:
curl -sSL https://zipkin.io/quickstart.sh | bash -s
也可以去github下载源码编译:https://github.com/openzipkin/zipkin
以内存存储方式启动:
nohup java -jar zipkin.jar 2>&1 &
以mysql数据库存储方式启动,此外还支持elasticsearch等方式
nohup java -jar zipkin.jar --STORAGE_TYPE=mysql --MYSQL_HOST=192.168.0.126 --MYSQL_TCP_PORT=3306 --MYSQL_USER=root --MYSQL_PASS=123456 --MYSQL_DB=zipkin 2>&1 &
mysq数据库存储方式需要先创建3张表:
建表语句去github下载:https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql
启动后访问:http://192.168.0.1:9411/
2.springboot项目修改部分
1.pom文件添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<!--dubbo服务链路追踪支持,dubbo版本为2.7.x及以上使用-->
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-dubbo</artifactId>
</dependency>
<!--dubbo服务链路追踪支持,dubbo版本为2.6.x及以下使用-->
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-dubbo-rpc</artifactId>
</dependency>
2.配置文件新增以下配置
spring:
zipkin:
base-url: http://192.168.0.1:9411
sender:
# web 客户端将踪迹日志数据通过网络请求的方式传送到服务端,另外还有配置
# kafka/rabbit 客户端将踪迹日志数据传递到mq进行中转
type: web
sleuth:
sampler:
probability: 1 #采样率 1 代表100%全部采集 ,默认0.1 代表10% 的请求踪迹数据会被采集
#如果是dubbo服务,则另外需添加以下配置
dubbo:
application:
name: ${spring.application.name}
logger: slf4j
registry:
address: zookeeper://192.168.0.1:2181,192.168.0.2:2181 #zookeeper地址,多个以引文逗号','隔开
timeout: 10000
#以下是需要添加部分,添加后,当调用dubbo服务时才能添加traceId
provider:
filter: tracing
consumer:
filter: tracing
3.如果使用logback-spring.xml配置日志,则需要做以下操作
#需要对日志格式化中加入: [${app_name},%X{X-B3-TraceId},%X{X-B3-SpanId}]
<!-- 控制台日志 -->
<appender name="consoleAppender" 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} %-5level %5p [${app_name},%X{X-B3-TraceId},%X{X-B3-SpanId}] %thread %logger.%M:%L %msg %n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
配置日志文件后,启动项目请求就会打印如下: