1. 程式人生 > >spring cloud 入門系列八:使用spring cloud sleuth整合zipkin進行服務鏈路追蹤

spring cloud 入門系列八:使用spring cloud sleuth整合zipkin進行服務鏈路追蹤

好久沒有寫部落格了,主要是最近有些忙,今天忙裡偷閒來一篇。

=======我是華麗的分割線==========

微服務架構是一種分散式架構,微服務系統按照業務劃分服務單元,一個微服務往往會有很多個服務單元,一個請求往往會有很多個單元參與,一旦請求出現異常,想要去定位問題點真心不容易,因此需要有個東西去跟蹤請求鏈路,記錄一個請求都呼叫了哪些服務單元,呼叫順序是怎麼樣的以及在各個服務單元處理的時間長短。常見的服務鏈路追蹤元件有google的dapper、twitter的zipkin、阿里的鷹眼等,它們都是出眾的開源鏈路追蹤元件。

spring cloud 有自己的元件來整合這些開源元件,它就是spring cloud sleuth,它為服務鏈路追蹤提供了一套完整的解決方案。

今天的主題就是如何使用spring cloud sleuth整合zipkin進行服務鏈路追蹤。本部落格將圍繞下面的線索進行展開:

  1. Server端程式碼實現
  2. Client端程式碼實現
  3. 執行測試

 由上面的線索可以發現,zipkin分服務端和客戶端。

客戶端就是我們的服務單元,用來發送鏈路資訊到服務端;

服務端用來接收客戶端傳送來的鏈路資訊,並進行處理,它包括4個部分:

  • Collector元件:用來接收客戶端傳送的鏈路資訊然後整理成zipkin能處理的格式,供後續儲存或向外部提供查詢使用。
  • Storage元件:對鏈路資訊進行儲存,預設儲存在記憶體,通過配置還可以儲存到mysql等地方。
  • Restful API元件:對其他服務單元提供api介面進行查詢鏈路資訊。
  • Web UI元件:呼叫API 元件的介面並將資訊顯示到web 畫面。

廢話不多說,直接上程式碼。

一、Server端程式碼實現

 先給出程式碼結構:

  結構比較簡單,搭建過程如下:

  1. 新建maven工程sleuth-zipkin
  2. 修改pom檔案
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation
    ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sam</groupId> <artifactId>sleuth-zipkin</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.1.RELEASE</version> </parent> <properties> <javaVersion>1.8</javaVersion> </properties> <!-- 使用dependencyManagement進行版本管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Camden.SR6</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- 引入zipkin-server依賴,提供server端功能 --> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> </dependency> <!-- 引入zipkin-autoconfigure-ui依賴,用來提供zipkin web ui元件的功能,方便檢視相關資訊 --> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> </dependency> <!-- 引入eureka依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> </dependencies> </project>
  3. 新建啟動類
    /**
     * @EnableZipkinServer
     * 
     * 用於開啟Zipkin Server功能
     *
     */
    @EnableZipkinServer
    @SpringBootApplication
    @EnableDiscoveryClient
    public class SleuthZipkinApp {
    
        public static void main(String[] args) {
            SpringApplication.run(SleuthZipkinApp.class, args);
        }
    
    }
  4. 新建配置檔案
    server.port=9411
    spring.application.name=sleuth-zipkin
    #需要使用到eureka服務註冊中心 eureka.client.serviceUrl.defaultZone
    =http://localhost:1111/eureka

二、Client端程式碼實現

  1. 引入依賴
    <!-- 引入zipkin 依賴 ,提供zipkin客戶端的功能 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zipkin</artifactId>
            </dependency>
  2. 修改配置檔案,追加兩項配置
    #指定zipkin服務端的url
    spring.zipkin.base-url=http://localhost:9411
    #設定樣本收集的比率為100%
    spring.sleuth.sampler.percentage=1.0

    由於分散式系統的請求量一般比較大,不可能把所有的請求鏈路進行收集整理,因此sleuth採用抽樣收集的方式,設定一個抽樣百分比。在開發階段,我們一般設定百分比為100%也就是1。

三、執行測試

  1. 依次啟動微服務:服務註冊中心eureka、zipkin服務端sleuth-zipkin、閘道器服務api-gateway、消費者hello-consumer和生產者hello-server
  2. 訪問http://localhost:1111/,確認4個微服務已經成功註冊到了服務註冊中心
  3. 訪問http://localhost:5555/hello-consumer/hello-consumer?accessToken=111,通過zuul 閘道器進行訪問,

    檢視api-gateway控制檯:

    2018-07-19 18:02:34.999  INFO [api-gateway,4c384ab23da1ae35,4c384ab23da1ae35,true] 9296 --- [nio-5555-exec-3] com.sam.filter.AccessFilter              : send GET request to http://localhost:5555/hello-consumer/hello-consumer
    2018-07-19 18:02:45.088  INFO [api-gateway,,,] 9296 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration

    請看紅字部分,有4部分,以逗號分隔。第一部分是服務名;第二部分是TranceId,每次請求都會有唯一的tranceId;第三部分是spanId,每個工作單元傳送一次請求就會產生一個spanId,每個請求會產生一個tranceId和多個spanId,根據tranceId和spanId就能分析出一個完整的請求都經歷了哪些服務單元;第四部分是boolean型的,用來標記是否需要將該請求鏈路進行抽樣收集傳送到zipkin等進行整理。

  4. 訪問zipkin服務端http://localhost:9411/,檢視UI頁面

    選擇api-gateway,然後點選 "Find Trances"

    能看到請求都經歷了哪些服務節點。再點相關link,可以檢視呼叫順序,並且還能看到在各個服務節點的處理的時間長度。

    切換到依賴畫面,能檢視服務節點的依賴關係

相關推薦

spring cloud 入門系列使用spring cloud sleuth整合zipkin進行服務追蹤

好久沒有寫部落格了,主要是最近有些忙,今天忙裡偷閒來一篇。 =======我是華麗的分割線========== 微服務架構是一種分散式架構,微服務系統按照業務劃分服務單元,一個微服務往往會有很多個服務單元,一個請求往往會有很多個單元參與,一旦請求出現異常,想要去定位問題點真心不容易,因此需要有個東西去跟蹤

springcloud(十二)使用Spring Cloud SleuthZipkin進行分散式跟蹤

Spring Cloud Sleuth 一般的,一個分散式服務跟蹤系統,主要有三部分:資料收集、資料儲存和資料展示。根據系統大小不同,每一部分的結構又有一定變化。譬如,對於大規模分散式系統,資料儲存可分為實時資料和全量資料兩部分,實時資料用於故障排查(troubleshooting),全量資料用於系統優化;資

Spring Cloud使用Spring Cloud SleuthZipkin進行分散式跟蹤(12)

隨著業務發展,系統拆分導致系統呼叫鏈路愈發複雜一個前端請求可能最終需要呼叫很多次後端服務才能完成,當整個請求變慢或不可用時,我們是無法得知該請求是由某個或某些後端服務引起的,這時就需要解決如何快讀定位服務故障點,以對症下藥。於是就有了分散式系統呼叫跟蹤的誕生。 現今業界分散式服務跟蹤的理論基礎主

springcloud+springboot(十二)使用Spring Cloud SleuthZipkin進行分散式跟蹤

Spring Cloud Sleuth 一般的,一個分散式服務跟蹤系統,主要有三部分:資料收集、資料儲存和資料展示。根據系統大小不同,每一部分的結構又有一定變化。譬如,對於大規模分散式系統,資料儲存可分為實時資料和全量資料兩部分,實時資料用於故障排查(troubleshooting),全量資料用於系統優化

跟我學SpringCloud | 第十一篇使用Spring Cloud SleuthZipkin進行分散式跟蹤

SpringCloud系列教程 | 第十一篇:使用Spring Cloud Sleuth和Zipkin進行分散式鏈路跟蹤 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如無特殊說明,本系列教程全採用以上版本 在分散式服務架構中,需要對分散

spring cloudspring cloud SleuthZipkin 進行分散式跟蹤

spring cloud 分散式微服務架構下,所有請求都去找閘道器,對外返回也是統一的結果,或者成功,或者失敗。 但是如果失敗,那分散式系統之間的服務呼叫可能非常複雜,那麼要定位到發生錯誤的具體位置,就是一個比較麻煩的問題。 所以定位故障點,就引入了spring cloud Sleuth【Sleuth是獵

spring cloud 入門系列使用Hystrix 實現斷路器進行服務容錯保護

關系 調用 說明 schema 技術 能力 BE 最終 響應 在微服務中,我們將系統拆分為很多個服務單元,各單元之間通過服務註冊和訂閱消費的方式進行相互依賴。但是如果有一些服務出現問題了會怎麽樣? 比如說有三個服務(ABC),A調用B,B調用C。由於網絡延遲或C本身代碼有

spring cloud 入門系列基於Git存儲的分布式配置中心--Spring Cloud Config

入門 代碼結構 dev eas TP scope ict AI 新項目 我們前面接觸到的spring cloud組件都是基於Netflix的組件進行實現的,這次我們來看下spring cloud 團隊自己創建的一個全新項目:Spring Cloud Config.它用來為分

spring cloud 入門系列使用Zuul 實現API閘道器服務

通過前面幾次的分享,我們瞭解了微服務架構的幾個核心設施,通過這些元件我們可以搭建簡單的微服務架構系統。比如通過Spring Cloud Eureka搭建高可用的服務註冊中心並實現服務的註冊和發現; 通過Spring Cloud Ribbon或Feign進行負載均衡;通過Spring Cloud Hyst

spring cloud 入門系列使用Eureka 進行服務治理

服務治理可以說是微服務架構中最為核心和基礎的模組,它主要用來實現各個微服務例項的自動化註冊和發現。 Spring Cloud Eureka是Spring Cloud Netflix 微服務套件的一部分,主要負責完成微服務架構中的服務治理功能。 本文通過簡單的小例子來分享下如何通過Eureka進行服務治理:

spring cloud 入門系列基於Git儲存的分散式配置中心--Spring Cloud Config

我們前面接觸到的spring cloud元件都是基於Netflix的元件進行實現的,這次我們來看下spring cloud 團隊自己建立的一個全新專案:Spring Cloud Config.它用來為分散式系統中的基礎設施和微服務提供集中化的外部配置支援,分為服務端和客戶端兩個部分。 其中服務端也稱為分散式

spring cloud 入門系列初識spring cloud

最近看到微服務很火,也是未來的趨勢, 所以就去學習下,在dubbo和spring cloud之間我選擇了從spring cloud,主要有如下幾種原因: dubbo主要專注於微服務中的一個環節--服務治理,像服務註冊和發現這種還需要zookeeper第三方的中間;但是spring cloud提供了微服

spring cloud 入門系列使用Eureka 搭建高可用服務註冊中心

在上一篇中分享了如何使用Eureka 進行服務治理,裡面搭建的服務註冊中心是單體的, 但是在實際的應用中,分散式系統為了防止單體服務宕機帶來嚴重後果,一般都會採用伺服器叢集的形式,服務註冊中心也是一樣,需要多臺服務一起工作,組成高可用的服務註冊中心。這樣,如果有其中一臺宕機,系統也能正常執行。 那麼如何來

spring cloud 入門系列使用Feign 實現宣告式服務呼叫

一、Spring Cloud Feign概念引入通過前面的隨筆,我們瞭解如何通過Spring Cloud ribbon進行負責均衡,如何通過Spring Cloud Hystrix進行服務斷路保護,兩者作為基礎工具類框架應用在各種基礎設施類微服務和業務類微服務中,並且成對存在,那麼有沒有更高層的封裝,將兩者的

Spring Cloud 入門教程(): 服務追蹤(Spring Cloud Sleuth)(Greenwich.RELEASE)

參考連結:https://blog.csdn.net/forezp/article/details/81041078 一、準備工

SpringCloud2.0版本入門 | 服務追蹤(Spring Cloud Sleuth)簡單入門

本文出自 [ 慌途L ] 最近開始寫部落格,一些問題可能瞭解也不夠透徹,寫一下快速入門並且踩過的坑,希望大家少踩坑。本文簡單介紹一下springcloud的服務鏈路追蹤,不足之處希望大家指出,我改正。不喜勿噴! 這篇文章主要講述服務追蹤元件zipkin,Spr

框架源碼系列Spring源碼學習之Spring核心工作原理(很重要)

ted pos avi Edito 重要 explicit mon alt 構造函數 目錄:一、搞清楚ApplicationContext實例化Bean的過程二、搞清楚這個過程中涉及的核心類三、搞清楚IOC容器提供的擴展點有哪些,學會擴展四、學會IOC容器這裏使用的設計模式

業余草 SpringCloud教程 | 第九篇: 服務追蹤(Spring Cloud Sleuth)(Finchley版本)

描述 -s util ont packaging tdd res [] 新建 這篇文章主要講述服務追蹤組件zipkin,Spring Cloud Sleuth集成了zipkin組件。 一、簡介 Add sleuth to the classpath of a Spr

Spring Boot 2.0()Spring Boot 集成 Memcached

ava you 2.0 cal ted 緩存 exceptio .com ride Memcached 介紹 Memcached 是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態、數據

spring cloud 服務追蹤

簡介 Spring cloud Sleuth主要功能就是在分散式系統中提供追蹤解決方案,並且相容支援zipkin,你只需要在pom檔案中引入相應的依賴即可。 1、span 基本工作單元,span在不斷的啟動和停止,同時記錄了時間資訊,當你建立一相span,你必須在未來的某個時刻停止它。