Spring Cloud Sleuth提供了分布式追踪(distributed tracing)的一个解决方案。其基本思路是在服务调用的请求和响应中加入ID,标明上下游请求的关系。利用这些信息,可以方便地分析服务调用链路和服务间的依赖关系。
Only Sleuth
在Spring Tool Suite的文件菜单中,点击新建Spring Starter Project。
在请求处理方法内加上一行日志代码。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class SpringcloudSleuthApplication {
private static Logger log = LoggerFactory.getLogger(SpringcloudSleuthApplication.class);
@RequestMapping("/")
public String home() {
log.info("Handling home");
return "Hello World";
}
public static void main(String[] args) {
SpringApplication.run(SpringcloudSleuthApplication.class, args);
}
}
设定应用程序端口及名称。
server.port=10001
spring.application.name=sleuth-demo-without-zipkin
启动程序并浏览页面后,可以看到日志信息里多了点东西。
[sleuth-demo-without-zipkin,6c00dba1679ee164,6c00dba1679ee164,false]
这一串数据里包含四个部分
- appname - 应用程序名称
- traceId - 追踪系统中的唯一标识
- spanId - 具体操作的唯一标识
- exportable - 是否日志要导出到Zipkin
Sleuth + Zipkin
Zipkin Server
要想把追踪数据发送到Zipkin上,首先需要建立一个Zipkin Server应用程序,在pom.xml里加上如下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.11.5</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.11.5</version>
</dependency>
</dependencies>
然后在启动类加上@EnableZipkinServer标记。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin2.server.internal.EnableZipkinServer;
@EnableZipkinServer
@SpringBootApplication
public class SpringcloudZipkinServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudZipkinServerApplication.class, args);
}
}
application.properties文件中可修改默认端口,server.port=10000
。
打开相关页面,如下:
Zipkin Client
再新建一个应用程序。
启动程序代码基本一样。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class SpringcloudZipkinApplication {
private static Logger log = LoggerFactory.getLogger(SpringcloudZipkinApplication.class);
@RequestMapping("/")
public String home() {
log.info("Handling home");
return "Hello World";
}
public static void main(String[] args) {
SpringApplication.run(SpringcloudZipkinApplication.class, args);
}
}
application.properties文件里加上Zipkin Server的地址,同时为了每次都将数据传入Zipkin,需要把spring.sleuth.sampler.probability的值改为1.0。
server.port=10002
spring.application.name=sleuth-demo-with-zipkin
spring.zipkin.base-url=http://localhost:10000
spring.sleuth.sampler.probability=1.0
启动Zipkin Client后,可以看到Zipkin Server页面上多了一条追踪数据。
再次刷新Zipkin Client页面,又会有条新的数据。
在看控制台的日志记录,exportable项变成了true,说明数据已传入Zipkin。
原文地址:https://www.cnblogs.com/kenwoo/p/9716282.html