1. 程式人生 > >SpringCloud系列十二:SpringCloudSleuth(SpringCloudSleuth 簡介、SpringCloudSleuth 基本配置、資料採集)

SpringCloud系列十二:SpringCloudSleuth(SpringCloudSleuth 簡介、SpringCloudSleuth 基本配置、資料採集)

宣告:本文來源於MLDN培訓視訊的課堂筆記,寫在這裡只是為了方便查閱。

1、概念:SpringCloudSleuth

2、具體內容

Sleuth 是一種提供的跟蹤服務,也就是說利用 sleuth 技術可以實現完整的微服務的訪問路徑的跟蹤操作。

2.1、SpringCloudSleuth 簡介

微服務可以將整個的系統拆分為無數個子系統,於是這樣一來就有可能出現幾種可怕的場景:

· 程式碼的除錯:

      |- 你的系統有可能變慢了,於是這個時候就需要去追蹤每一個微服務的執行的速度;

      |- 如果現在你的微服務採用了串聯的方式進行了互相呼叫,那麼如何確認某一個微服務出現了問題呢?

· 微服務混合呼叫:

      |- 現在微服務變為了環形呼叫,那麼這些關係該如何描述出來?

 

 在建立微服務的時候一定要有一些合適的開發契約,所有的開發者以及服務的呼叫者要按照統一的方式進行程式的呼叫處理, 這樣才可以成為一個優秀的微服務設計。

 所以在 SpringCloud 之中提供的 Sleuth 技術就可以實現微服務的呼叫跟蹤,也就是說它可以自動的形成一個呼叫連線線,通過這個連線線使得開發者可以輕鬆的找到所有微服務間關係,同時也可以獲取微服務所耗費的時間, 這樣就可以進行微服務呼叫狀態的監控以及相應的資料分析。

 

Span 裡面包含有如下內容:

 · cs-Client Sent:客戶端發出一個請求,描述的是一個 Span 開始;

· sr-Server Received:服務端接收請求,利用 sr-cs 就屬於傳送的網路延遲;

· ss-Server Sent:服務端傳送請求(迴應處理),ss-sr 就屬於服務端的消耗時間;

· cr-Client Received:客戶端接收到服務端資料,cr-ss 就表示回覆所需要的時間。

 2.2、SpringCloudSleuth 基本配置

 SpringCloudSleuth 使用的核心元件在於 Twitter 推出的 zipkin 監控元件,所以本次的配置的模組一定要包含 zipkin 相關配置依賴,本次實現一個基礎的呼叫邏輯:consumer-zuul-dept。

 1、 【microcloud-sleuth-8601】通過“microcloud-provider-company-8101”專案複製得來;

 2、 【microcloud-sleuth-8601】修改 pom.xml 配置檔案:

 · 由於 sleuth 的應用比較複雜,而且也牽扯到埋點的資料分析,本次不使用安全處理模組:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
        </dependency>

 3、 【microcloud-sleuth-8601】修改 application.yml 配置檔案:

server:
  port: 8601
spring: 
  application:
    name: microcloud-zipkin-server

 4、 【microcloud-sleuth-8601】修改程式啟動類:

package cn.study.microcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import zipkin.server.EnableZipkinServer;
@SpringBootApplication
@EnableCircuitBreaker
@EnableZipkinServer
public class Zipkin_8601_StartSpringCloudApplication {
    public static void main(String[] args) {
        SpringApplication.run(Zipkin_8601_StartSpringCloudApplication.class, args);
    }
}

 5、 修改 hosts 配置檔案,追加一個新的主機名稱對映:

 127.0.0.1 zipkin.com

 6、 【microcloud-consumer-feign、microcloud-zuul-gateway-9501、microcloud-provider-dept-8001】修改 pom.xml 配置檔案,追加 zipkin 相關依賴程式包:

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

 7、 【microcloud-consumer-feign、microcloud-zuul-gateway-9501、microcloud-provider-dept-8001】修改 application.yml 配置檔案:

spring:
  zipkin:
    base-url: http://zipkin.com:8601 # 所有的資料提交到此服務之中
  sleuth:
    sampler:
     percentage: 1.0 # 定義抽樣比率,預設為0.1  
  application:
    name: microcloud-consumer-feign 

 一定要有每一個微服務的名字,這樣會比較好觀察程式的執行軌跡。

 8、 依次啟動所有的服務:microcloud-sleuth-8601、microcloud-consumer-feign、microcloud-zuul-gateway-9501、microcloud-provider-dept-8001;

 輸入訪問地址:http://zipkin.com:8601;就可以看到各個微服務之間的呼叫關係了

 2.3、資料採集

 現在已經成功的實現了一個 SpringCloudSleuth 基礎操作,但是需要考慮一個實際的問題,現在所有的統計的彙總操作都是記錄在記憶體之中的,也就是說如果你現在已經關閉了 zipkin 服務端,那麼這些統計資訊就將消失,很明顯這樣的做法並不符合實際要求,資料應該被記錄下來,而且有可能你很多的微服務要傳送大量的資料資訊進入,為了解決這種高併發的問題,可以結合訊息元件(Stream)進行快取處理,而且本次為了方便可以將統計的結果儲存在資料庫之中(mysql)。

 

1、 需要建立資料庫指令碼,指令碼是從官網拷貝下來的直接複製使用即可:

DROP DATABASE IF EXISTS zipkin ;
CREATE DATABASE zipkin CHARACTER SET UTF8 ;
USE zipkin ;
CREATE TABLE IF NOT EXISTS zipkin_spans (
 `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds
instead of 64 bit',
 `trace_id` BIGINT NOT NULL,
 `id` BIGINT NOT NULL,
 `name` VARCHAR(255) NOT NULL,
 `parent_id` BIGINT,
 `debug` BIT(1),
 `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
 `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`);
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`);
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`);
ALTER TABLE zipkin_spans ADD INDEX(`name`);
ALTER TABLE zipkin_spans ADD INDEX(`start_ts`);
CREATE TABLE IF NOT EXISTS zipkin_annotations (
 `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds
instead of 64 bit',
 `trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
 `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
 `a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
 `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
 `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
 `a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
 `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',
 `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
 `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',
 `endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`,
`a_timestamp`);
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) ;
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`);
ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`);
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`);
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`);
CREATE TABLE IF NOT EXISTS zipkin_dependencies (
 `day` DATE NOT NULL,
 `parent` VARCHAR(255) NOT NULL,
 `child` VARCHAR(255) NOT NULL,
 `call_count` BIGINT
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);

 2、 【microcloud-sleuth-8601】修改 pom.xml 配置檔案,追加相關的依賴程式包:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
<!--         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency> -->

 3、 【microcloud-sleuth-8601】修改 application.yml 配置檔案:

server:
  port: 8601
spring: 
  rabbitmq:
   host: rabbitmq-server
   port: 5672
   username: studyjava
   password: hello
   virtual-host: /
  datasource:
    driver-class-name: org.gjt.mm.mysql.Driver      # 配置MySQL的驅動程式類
    url: jdbc:mysql://localhost:3306/zipkin           # 資料庫連線地址
    username: root                                  # 資料庫使用者名稱
    password: mysqladmin                          # 資料庫連線密碼
    initialize: true                          
  application:
    name: microcloud-zipkin-server
zipkin:
 storage: # 設定zipkin收集的資訊通過mysql進行儲存
   type: mysql
 

 4、 【microcloud-sleuth-8601】可以開啟安全配置項:

        <dependency>
            <groupId>cn.study</groupId>
            <artifactId>microcloud-security</artifactId>
        </dependency>

 5、 【microcloud-consumer-feign、microcloud-zuul-gateway-9501、microcloud-provider-dept-8001】修改 pom.xml 配置檔案:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
<!--         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency> -->

 6、 【microcloud-consumer-feign、microcloud-zuul-gateway-9501、microcloud-provider-dept-8001】修改 application.yml 配置檔案:

spring: 
  rabbitmq:
   host: rabbitmq-server
   port: 5672
   username: studyjava
   password: hello
   virtual-host: /

 同時刪除掉已有的 zipkin.base-url 的配置項。

 7、 【microcloud-sleuth-8601】修改啟動程式類的使用註解:

package cn.study.microcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamServer;

import zipkin.server.EnableZipkinServer;
@SpringBootApplication
@EnableCircuitBreaker
@EnableZipkinStreamServer
public class Zipkin_8601_StartSpringCloudApplication {
    public static void main(String[] args) {
        SpringApplication.run(Zipkin_8601_StartSpringCloudApplication.class, args);
    }
}

 8、 此時依次啟動各個微服務之後所有的資訊都將被記錄到 MySQL 資料庫之中,這樣即使當前的 zipkin 服務關閉了,那麼也可以進行資訊的持久化儲存,下次啟動之後依然可以讀取到執行順序。

相關推薦

SpringCloud系列SpringCloudStreamSpringCloudStream 簡介創建消息生產者創建消息消費者自定義消息通道分組與持久化設置 RoutingKey

javax sun 就是 eas nts discovery junit4 IE 程序包 1、概念:SpringCloudStream 2、具體內容 2.1、SpringCloudStream 簡介 SpringCloudStream 就是使用了基於消息系統的微服務處理架構

SpringCloud系列SpringCloudSleuthSpringCloudSleuth 簡介SpringCloudSleuth 基本配置資料採集

宣告:本文來源於MLDN培訓視訊的課堂筆記,寫在這裡只是為了方便查閱。 1、概念:SpringCloudSleuth 2、具體內容 Sleuth 是一種提供的跟蹤服務,也就是說利用 sleuth 技術可以實現完整的微服務的訪問路徑的跟蹤操作。 2.1、SpringCloudSleuth 簡介 微服務可以將整個

Silverlight & Blend動畫設計系列三角函數Trigonometry動畫之自由旋轉Free-form rotation

name angle 最終 clas oot pos ftp 旋轉動畫 one 說到對象的旋轉,或許就會聯想到對象角度的概念。對象的旋轉實現實際上就是利用對象的角度改變來實現的位置變換,在《Silverlight & Blend動畫設計系列二:旋轉動畫(Rotate

springcloud+springboot()使用Spring Cloud Sleuth和Zipkin進行分散式鏈路跟蹤

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

katalon系列自動化上傳檔案下載檔案

一、下載檔案1.下載檔案時,需要先設定好Chrome/Firefox下載路徑、不彈出下載框等,大家先學習下在selenium下如何設定:https://www.cnblogs.com/fnng/p/7700620.html 在Katalon中設定Chrome的DesiredCapabilities如圖:

SpringBoot系列SpringBoot整合 Shiro

1、概念:SpringBoot 整合 Shiro 2、具體內容 Shiro 是現在最為流行的許可權認證開發框架,與它起名的只有最初的 SpringSecurity(這個開發框架非常不好用,但是千萬不要 以為 SpringSecurity 沒有用處,它在 SpringClo

ElasticSearch系列掌握ES使用Java API

一、Java連線ElasticSearch6.x版本(可整合到spring中) <dependencies> <!-- ES --> <dependency> <group

STL原始碼學習系列 容器配接器( Priority_queue

容器配接器( Priority_queue) 概述 priority_queue是擁有優先順序的queue,不過它容器內的元素並不是根據加入順序排列,而是根據使用者定義的優先順序進行排列。priority_queue只能在佇列尾部加入元素,在頭部取出元素。不能遍歷容器,因

ORM系列EF4 Model First

  前面我們已經介紹過EF中Code First開發模式,簡而言之,就是不管三七二十一直接寫程式碼,不過對於很多開發人員來說,可能並不習慣這樣來開發,並且安裝標準的開發流程,應該是先建模再進行編碼,當然EF也是支援這樣做的,那我們今天就簡單介紹一些現有模型的開發模式——Model First。   具

springcloud系列—Config—第6章-3: Spring Cloud Config 高可用配置安全與加密解密

資料參考:《Spring Cloud 微服務實戰》 目錄 安全保護 加密解密 使用前提 相關端點 配置金鑰 非對稱加密 高可用配置 安全保護 由於配置中心儲存的內容比較敏感,做一定的安全處理是必要的。為配置中心實現安全保護的方式有很多,比如物理網路限制,O

SSE影象演算法優化系列二十三: 基於value-and-criterion structure 系列濾波器如Kuwahara,MLV,MCV濾波器的優化。 SSE影象演算法優化系列十區域性均方差及區域性平方差演算法的優化 SSE影象演算法優化系列基於SSE實現的極速的矩形核腐蝕和膨脹

       基於value-and-criterion structure方式的實現的濾波器在原理上其實比較簡單,感覺下面論文中得一段話已經描述的比較清晰了,直接貼英文吧,感覺翻譯過來反而失去了原始的韻味了。        T

算法系列多邊形區域填充演算法--掃描線填充演算法有序邊表法

、掃描線演算法(Scan-Line Filling)         掃描線演算法適合對向量圖形進行區域填充,只需要直到多邊形區域的幾何位置,不需要指定種子點,適合計算機自動進行圖形處理的場合使用,比如電腦遊戲和三維CAD軟體的渲染等等。         對向量多邊形區域

【Java並發編程】之線程間通信中notifyAll造成的早期通知問題含代碼

data light lan 添加項 article util tool 元素 seconds 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/17229601 如果線程在等待時接到通知,但線程等待的條件

Java系列講座Socket網絡通信實現聊天軟件項目講解UDP

tcp 網絡通信 udp socket 上一篇我們講了通過TCP方式實現網絡通信軟件開發的原理,思路及實現,今天跟大家談談Socket通信中UDP方式通信的軟件開發步驟及主要代碼講解,UDP實現方式實現的通信軟件特點是不分客戶端與服務器端,一個程序既是客戶端與是服務器端,典型軟件是一些

Hulu機器學習問題與解答系列 | 特征工程—結構化數據

實現 adk n) 過程 結果 點擊 推薦算法 cti 特征工程 聽說最近冒出的大批呱兒子個個都是撐著眼皮也要看書的無眠小青蛙。我們學習Machine Learning的腳步又怎能停下來?動動手指,上滑開始~ 今天的內容是 【特征工程—結構化數據】 場景描述 特

SpringBoot系列SpringBoot整合Restful架構使用 RestTemplate 模版實現 Rest 服務調用Swagger 集成動態修改日誌級別

attribute tar ring 動態修改 包含 分布式 restfu pen 負載 1、概念:SpringBoot整合Restful架構 2、背景 Spring 與 Restful 整合才是微架構的核心,雖然在整個 SpringBoot(SpringCloud)之中提

SpringCloud系列Hystrix 熔斷機制Hystrix基本配置服務降級HystrixDashboard服務監控Turbine聚合監控

bsp 但是 mem style 查詢 packages discover seconds ID 1、概念:Hystrix 熔斷機制 2、具體內容 所謂的熔斷機制和日常生活中見到電路保險絲是非常相似的,當出現了問題之後,保險絲會自動燒斷,以保護我們的電器, 那麽如果換到了程

搜索引擎系列LuceneLucene介紹Lucene架構Lucene集成

核心模塊 純java 進行 org sea 能力 高亮 排序 hat 一、Lucene介紹 1. Lucene簡介   最受歡迎的java開源全文搜索引擎開發工具包。提供了完整的查詢引擎和索引引擎,部分文本分詞引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發人

SpringCloud系列Eureka 服務發現框架定義 Eureka 服務端Eureka 服務信息Eureka 發現管理Eureka 安全配置Eureka-HA(高可用) 機制Eureka 服務打包部署

pac elf figure 傳遞 uri rect body 情況 服務組 1、概念:Eureka 服務發現框架 2、具體內容 對於服務發現框架可以簡單的理解為服務的註冊以及使用操作步驟,例如:在 ZooKeeper 組件,這個組件裏面已經明確的描述了一個服務的註冊以及發

Silverlight & Blend動畫設計系列沿路徑動畫Animation Along a Path

幀動畫 -- long png ref wid found 不用 system.in 原文:Silverlight & Blend動畫設計系列十一:沿路徑動畫(Animation Along a Path)  Silverlight 提供一個好的動畫基礎,但缺少一種