在这篇文章里介绍如何将Zipkin整合到我们的云服务里。Zipkin是一个开源项目,它提供了在分布式环境下发送、接收、存储和可视化跟踪的机制。这使我们能够对服务之间的活动进行关联,并更清楚地了解我们服务中发生的情况。

这篇文章中的示例工程是基于之前文章的进一步开发,想了解更多情况可阅读。“使用Spring Cloud搭建的微服务示例” “Spring Cloud 微服务的安全保护”

1、Zipkin服务

Zipkin服务将存储我们服务的所有操作步骤,每一步操作都会发送到该服务器用来进行跟踪识别。

1、1创建

新建一个Spring Boot工程,在POM中添加一些依赖

<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-autoconfigure-ui</artifactId>
    <scope>runtime</scope>
</dependency>

1、2启用

在主应用类里增加@EnableZipkinServer注解,此注解标识这个服务监听所有操作和行为以供查询。

@SpringBootApplication
@EnableEurekaClient
@EnableZipkinServer
public class ZipkinApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZipkinApplication.class, args);
    }
}

1、3配置

在工程的src/main/resources目录下新建一个bootstrap.properties文件,添加一些配置项。

spring.cloud.config.name=zipkin
spring.cloud.config.discovery.service-id=config
spring.cloud.config.discovery.enabled=true
spring.cloud.config.username=configUser
spring.cloud.config.password=configPassword

eureka.client.serviceUrl.defaultZone=http://discUser:discPassword@localhost:8082/eureka/

在Git仓库里新增zipkin.properties文件,定义服务名称和端口。

spring.application.name=zipkin
server.port=8088

eureka.client.region = default
eureka.client.registryFetchIntervalSeconds = 5

logging.level.org.springframework.web=debug

1、4运行

至此Zipkin服务已经创建完毕,我们可以将服务启动起来验证一下。首先需要启动config、discovery服务,然后再启动zipkin服务。在浏览器里输入http://localhost:8088,能看到Zipkin的首页。
这里写图片描述

2、服务配置

将我们的服务配置为Zipkin Client将操作信息发送到Zipkin Server中。这里我们要修改book和gatew服务。

2、1POM引用

在pom.xml文件里添加spring-cloud-starter-zipkin。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

2、2book服务配置

修改配置库里的book-service.properties文件

spring.zipkin.locator.discovery.enabled=true
spring.zipkin.baseUrl=http://localhost:8088/
spring.sleuth.sampler.percentage=1.0
spring.sleuth.web.skipPattern=(^cleanup.*)

2、3gateway服务配置

spring.zipkin.locator.discovery.enabled=true
spring.zipkin.baseUrl=http://localhost:8088/
spring.sleuth.sampler.percentage=1.0
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)

3、运行

将所有服务的启动起来,通过浏览器访问http://localhost:8080/book-service/books
这时在Zipkin控制台http://localhost:8088 就能看到服务运行的样子。一个请求所花费的时间以及这次请求包含了2步各花费的时间。
这里写图片描述

点击进去还能看到详细数据。
这里写图片描述

这里写图片描述

5、总结

我们已经看到了将Zipkin集成到云应用程序中是多么容易。随着我们的应用越来越复杂,Zipkin可以为我们提供关于一个请求所花费时间的详细信息。这可以帮助我们确定程序在哪里减速,并指出我们的应用需要改进的地方。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐