温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring Cloud中Sleuth如何整合Zipkin

发布时间:2021-12-24 10:33:41 来源:亿速云 阅读:157 作者:小新 栏目:云计算

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

Sleuth整合Zipkin

Zipkin简介

        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所示。

Spring Cloud中Sleuth如何整合Zipkin

图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”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI