Sleuth:日志收集工具包,封装了Dapper和log-based追踪以及Zipkin和HTrace操作,为SpringCloud应用实现了一种分布式追踪解决方案。
当服务与服务之间调用复杂时,SpringCloud Sleuth配合Zipkin提供的界面,可以直观的分析追踪数据,这篇文章介绍SpringCloud Sleuth与Zipkin配合使用。
新建Zipkin Server,加入zipkin依赖,pom文件如下:
4.0.0
com.dalaoyang
springcloud_zipkin
0.0.1-SNAPSHOT
jar
springcloud_zipkin
springcloud_zipkin
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
UTF-8
UTF-8
1.8
Edgware.SR1
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
io.zipkin.java
zipkin-server
io.zipkin.java
zipkin-autoconfigure-ui
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
配置文件只配置了一个端口号:
##端口号
server.port=9000
启动类加入注解@EnableZipkinServer,来声明是一个ZipkinServer,启动项目,可以看到控制的log已经变化了,如图
然后在浏览器访问http://localhost:9000/zipkin/dependency/,如下图
为了方便我们观察,分别创建了两个项目,first_service(9001),second_service(9002),pom文件加入spring-cloud-starter-zipkin依赖,
first_service(9001)pom文件代码如下:
4.0.0
com.dalaoyang
springcloud_zipkin_firstservice
0.0.1-SNAPSHOT
jar
springcloud_zipkin_firstservice
springcloud_zipkin_firstservice
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
UTF-8
UTF-8
1.8
Edgware.SR1
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-starter-zipkin
1.3.1.RELEASE
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
配置文件,其中spring.zipkin.base-url指定zipkin server地址
server.port=9001
spring.zipkin.base-url=http://localhost:9000
spring.application.name=first_service
启动类加上@RestController注解方便测试,然后新建两个方法,一个用于被调用,一个调用其他,代码如下:
package com.dalaoyang;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@RestController
public class SpringcloudZipkinFirstserviceApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudZipkinFirstserviceApplication.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
@Value("${spring.application.name}")
String serviceName;
@RequestMapping("/callSecond")
public String callSecond(){
return restTemplate().getForObject("http://localhost:9002/second", String.class);
}
@RequestMapping("/first")
public String first(){
return serviceName;
}
}
到这里first_service(9001)代码展示完成,接下来是second_service(9002)代码,内容不在赘述,和first_service(9001)类似。
pom文件
4.0.0
com.dalaoyang
springcloud_zipkin_secondservice
0.0.1-SNAPSHOT
jar
springcloud_zipkin_secondservice
springcloud_zipkin_secondservice
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
UTF-8
UTF-8
1.8
Edgware.SR1
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-starter-zipkin
1.3.1.RELEASE
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
配置文件:
server.port=9002
spring.zipkin.base-url=http://localhost:9000
spring.application.name=second_service
启动类:
package com.dalaoyang;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@RestController
public class SpringcloudZipkinSecondserviceApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudZipkinSecondserviceApplication.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
@Value("${spring.application.name}")
String serviceName;
@RequestMapping("/second")
public String second(){
return serviceName;
}
@RequestMapping("/callFirst")
public String callFirst(){
return restTemplate().getForObject("http://localhost:9001/first",String.class);
}
}
启动这两个项目,浏览器访问http://localhost:9001/callSecond,然后观看Zipkin Server页面,可以看到调用关系,请求细节等,如下图:
源码下载 :大老杨码云