瘋狂Spring Cloud連載(30)Sleuth整合Zipkin

本文節選自《瘋狂Spring Cloud微服務架構實戰》html

京東購買地址:https://item.jd.com/12256011.htmljava

噹噹網購買地址:http://product.dangdang.com/25201393.htmlgit

Spring Cloud教學視頻:https://my.oschina.net/JavaLaw/blog/1552993spring

Spring Cloud電子書:https://my.oschina.net/JavaLaw/blog/1570383服務器

Sleuth整合Zipkin

        接下來,用Sleuth整合Zipkin,將微服務產生的日誌,交給Zipkin去分析。架構

Zipkin簡介

        Zipkin是一個分佈式的跟蹤系統,主要用於收集、管理微服務所產生的數據。Zipkin的設計基於Google Dapper。在實際應用時,咱們須要讓各個微服務,向Zipkin服務器報告過程數據。對於Spring Cloud來講,已經提供了幾個模塊來實現數據報告功能,咱們僅須要加入依賴,以及作簡單配置,便可實現向Zipkin「寫入」數據。app

        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微服務架構實戰》

Spring Cloud教學視頻:https://my.oschina.net/JavaLaw/blog/1552993

Spring Cloud電子書:https://my.oschina.net/JavaLaw/blog/1570383

本書代碼共享地址:https://gitee.com/yangenxiong/SpringCloud

相關文章
相關標籤/搜索