Spring Cloud中Sleuth如何整合Zipkin

69次阅读
没有评论

共计 2878 个字符,预计需要花费 8 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 Spring Cloud 中 Sleuth 如何整合 Zipkin,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Sleuth 整合 ZipkinZipkin 简介

 Zipkin 是一个分布式的跟踪系统,主要用于收集、管理微服务所产生的数据。Zipkin 的设计基于 Google Dapper。在实际应用时,我们需要让各个微服务,向 Zipkin 服务器报告过程数据。对于 Spring Cloud 来说,已经提供了几个模块来实现数据报告功能,我们仅需要加入依赖,以及做简单配置,即可实现向 Zipkin“写入”数据。

 Zipkin 在得到这些数据后,提供了数据查询、分析的功能,这些图形化的功能,可以让我们对微服务的调用过程、处理时间、依赖关系等数据一目了然。

构建 Zipkin 服务器项目

  启动 Zipkin 服务器,可以选择使用 jar 包的方式,也可以往 Maven 项目中嵌入 Zipkin 服务器。

  使用 jar 包启动,需要先下载 Zipkin 的启动 jar 包,读者可以到 Zipkin 的官方网站下载,地址为:http://zipkin.io/,也可以直接到本书的 soft 目录中下载 zipkin-server-1.31.1-exec.jar。得到 jar 包后,使用“java -jar”命令启动 Zipkin 服务器,成功启动后,默认占用 9411 端口。

  我们也可以在 Maven 项目中嵌入 Zipkin 服务器,为了简单起见,直接结合 Sping Boot 来构建 Zipkin 服务器。新建 zk-server 项目(代码目录为 codes\10\zk-server),项目所使用的依赖请见代码清单 10-1。

代码清单 10-1:codes\10\zk-server\pom.xml

  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

  在 application.xml 中,将启动端口配置为 9411,代码清单 10- 2 为启动类。

  代码清单 10-2:codes\10\zk-server\src\main\java\org\crazyit\cloud\ZkServerApp.java

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

  为启动类加上 @EnableZipkinServer 注解,运行启动类,访问:http://localhost:9411,可以看到 Zipkin 的主界面,如图 10- 3 所示。

图 10-3 Zipkin 主界面

配置微服务

  接下来,需要配置各个微服务,让它们往 Zipkin 服务器写入数据。本章案例主要有 3 个微服务模块:图书、支付、销售。几个模块提供了以下服务:

图书模块(test-book-service):提供了图书查询服务,地址为“/book/{bookId}”,返回一个 Book 对象。

支付模块(test-pay-service):提供支付服务,地址为“/pay”,没有返回,仅做简单的控制台输出。

销售模块(test-sale-service):提供销售服务,地址为“/sale/{bookId}”,会调用图书模块和支付模块的接口,销售服务的实现,请见代码清单 10-3。

  代码清单 10-3:

 codes\10\test-sale-service\src\main\java\org\crazyit\cloud\SaleApplication.java

 @RequestMapping(method = RequestMethod.GET, value =  /sale/{bookId} )
 public String sale(@PathVariable( bookId) Integer bookId) {
 System.out.println( 销售模块处理销售 
 //  查找书本
 Book book = bookService.getBook(bookId);
 //  进行支付
 payService.doPay(new BigDecimal(10));
 return  销售成功,书名:   + book.getName() +  ,  作者: + book.getAuthor();
 }

  销售模块调用图书、支付模块接口,使用的是 Feign 框架,该框架的使用,读者可参考本书的相关章节,在此不再赘述。

  实现了微服务后,加 3 个模块加入以下依赖:

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

  接下来,还要为各个模块配置 Zipkin 服务器,application.yml 的配置如下:

spring:
 zipkin:
 base-url: http://localhost:9411
 sleuth:
 sampler:
 percentage: 1.0

  在 application.yml 中,使用 spirng.zipkin.base-url 来配置 Zipkin 的服务器,使用 spring.zipkin.sleuth.sampler.percentage 来配置跨度数据的采样百份比,默认值为 0.1,也就是会向 Zipkin 发送约 10% 的跨度数据。本例中为了查看效果,直接配置为 1,也就是全部的跨度数据都会被发送到 Zipkin。在生产环境中,建议还是按照具体的需求进行抽样,以免增加服务器的负载。

  为了能在各个微服务的控制台中看到 Sleuth 的输出,还需要为 3 个微服务配置日志级别,在 application.yml 中加入以下配置:

logging:
 level:
 root: INFO
 org.springframework.cloud.sleuth: DEBUG

关于“Spring Cloud 中 Sleuth 如何整合 Zipkin”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计2878字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)