技術(shù)棧:springcloud gateway + sleuth + dubbo + zipkin 實(shí)現(xiàn)鏈路追蹤
1.安裝zipkin的server服務(wù)
官網(wǎng)網(wǎng)址:https://zipkin.io/pages/quickstart.html
下載jar包:
curl -sSL https://zipkin.io/quickstart.sh | bash -s
也可以去github下載源碼編譯:https://github.com/openzipkin/zipkin
以內(nèi)存存儲方式啟動:
nohup java -jar zipkin.jar 2>&1 &
以mysql數(shù)據(jù)庫存儲方式啟動武花,此外還支持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數(shù)據(jù)庫存儲方式需要先創(chuàng)建3張表:
建表語句去github下載:https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql
啟動后訪問:http://192.168.0.1:9411/
image.png
2.springboot項(xiàng)目修改部分
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服務(wù)鏈路追蹤支持,dubbo版本為2.7.x及以上使用-->
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-dubbo</artifactId>
</dependency>
<!--dubbo服務(wù)鏈路追蹤支持,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 客戶端將蹤跡日志數(shù)據(jù)通過網(wǎng)絡(luò)請求的方式傳送到服務(wù)端玩郊,另外還有配置
# kafka/rabbit 客戶端將蹤跡日志數(shù)據(jù)傳遞到mq進(jìn)行中轉(zhuǎn)
type: web
sleuth:
sampler:
probability: 1 #采樣率 1 代表100%全部采集 ,默認(rèn)0.1 代表10% 的請求蹤跡數(shù)據(jù)會被采集
#如果是dubbo服務(wù)耘纱,則另外需添加以下配置
dubbo:
application:
name: ${spring.application.name}
logger: slf4j
registry:
address: zookeeper://192.168.0.1:2181,192.168.0.2:2181 #zookeeper地址,多個以引文逗號','隔開
timeout: 10000
#以下是需要添加部分,添加后这弧,當(dāng)調(diào)用dubbo服務(wù)時才能添加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>
配置日志文件后盒件,啟動項(xiàng)目請求就會打印如下:
image.png