成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Cloud Sleuth 之Greenwich版本全攻略

PascalXie / 3730人閱讀

摘要:服務(wù)提供者提供一個(gè)接口,服務(wù)消費(fèi)者通過消費(fèi)服務(wù)。服務(wù)提供者服務(wù)提供者,對(duì)外提供一個(gè),并向服務(wù)注冊(cè)中心注冊(cè),這部分內(nèi)容,不再講述,見源碼。

微服務(wù)架構(gòu)是一個(gè)分布式架構(gòu),微服務(wù)系統(tǒng)按業(yè)務(wù)劃分服務(wù)單元,一個(gè)微服務(wù)系統(tǒng)往往有很多個(gè)服務(wù)單元。由于服務(wù)單元數(shù)量眾多,業(yè)務(wù)的復(fù)雜性較高,如果出現(xiàn)了錯(cuò)誤和異常,很難去定位。主要體現(xiàn)在一個(gè)請(qǐng)求可能需要調(diào)用很多個(gè)服務(wù),而內(nèi)部服務(wù)的調(diào)用復(fù)雜性決定了問題難以定位。所以在微服務(wù)架構(gòu)中,必須實(shí)現(xiàn)分布式鏈路追蹤,去跟進(jìn)一個(gè)請(qǐng)求到底有哪些服務(wù)參與,參與的順序又是怎樣的,從而達(dá)到每個(gè)請(qǐng)求的步驟清晰可見,出了問題能夠快速定位的目的。

在微服務(wù)系統(tǒng)中,一個(gè)來自用戶的請(qǐng)求先到達(dá)前端A(如前端界面),然后通過遠(yuǎn)程調(diào)用,到達(dá)系統(tǒng)的中間件B、C(如負(fù)載均衡、網(wǎng)關(guān)等),最后到達(dá)后端服務(wù)D、E,后端經(jīng)過一系列的業(yè)務(wù)邏輯計(jì)算,最后將數(shù)據(jù)返回給用戶。對(duì)于這樣一個(gè)請(qǐng)求,經(jīng)歷了這么多個(gè)服務(wù),怎么樣將它的請(qǐng)求過程用數(shù)據(jù)記錄下來呢?這就需要用到服務(wù)鏈路追蹤。

Spring Cloud Sleuth

Spring Cloud Sleuth 為服務(wù)之間調(diào)用提供鏈路追蹤。通過 Sleuth 可以很清楚的了解到一個(gè)服務(wù)請(qǐng)求經(jīng)過了哪些服務(wù),每個(gè)服務(wù)處理花費(fèi)了多長(zhǎng)。從而讓我們可以很方便的理清各微服務(wù)間的調(diào)用關(guān)系。此外 Sleuth 可以幫助我們:

耗時(shí)分析: 通過 Sleuth 可以很方便的了解到每個(gè)采樣請(qǐng)求的耗時(shí),從而分析出哪些服務(wù)調(diào)用比較耗時(shí);

可視化錯(cuò)誤: 對(duì)于程序未捕捉的異常,可以通過集成 Zipkin 服務(wù)界面上看到;

鏈路優(yōu)化: 對(duì)于調(diào)用比較頻繁的服務(wù),可以針對(duì)這些服務(wù)實(shí)施一些優(yōu)化措施。

Google開源了Dapper鏈路追蹤組件,并在2010年發(fā)表了論文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,這篇論文是業(yè)內(nèi)實(shí)現(xiàn)鏈路追蹤的標(biāo)桿和理論基礎(chǔ),具有很高的參考價(jià)值。

Spring Cloud Sleuth采用了Google的開源項(xiàng)目Dapper的專業(yè)術(shù)語。

Span:基本工作單元,發(fā)送一個(gè)遠(yuǎn)程調(diào)度任務(wù)就會(huì)產(chǎn)生一個(gè)Span,Span是用一個(gè)64位ID唯一標(biāo)識(shí)的,Trace是用另一個(gè)64位ID唯一標(biāo)識(shí)的。Span還包含了其他的信息,例如摘要、時(shí)間戳事件、Span的ID以及進(jìn)程ID。

Trace:由一系列Span組成的,呈樹狀結(jié)構(gòu)。請(qǐng)求一個(gè)微服務(wù)系統(tǒng)的API接口,這個(gè)API接口需要調(diào)用多個(gè)微服務(wù)單元,調(diào)用每個(gè)微服務(wù)單元都會(huì)產(chǎn)生一個(gè)新的Span,所有由這個(gè)請(qǐng)求產(chǎn)生的Span組成了這個(gè)Trace。

Annotation:用于記錄一個(gè)事件,一些核心注解用于定義一個(gè)請(qǐng)求的開始和結(jié)束,這些注解如下。

cs-Client Sent:客戶端發(fā)送一個(gè)請(qǐng)求,這個(gè)注解描述了Span的開始。

sr-Server Received:服務(wù)端獲得請(qǐng)求并準(zhǔn)備開始處理它,如果將其sr減去cs時(shí)間戳,便可得到網(wǎng)絡(luò)傳輸?shù)臅r(shí)間。

ss-Server Sent:服務(wù)端發(fā)送響應(yīng),該注解表明請(qǐng)求處理的完成(當(dāng)請(qǐng)求返回客戶端),用ss的時(shí)間戳減去sr時(shí)間戳,便可以得到服務(wù)器請(qǐng)求的時(shí)間。

cr-Client Received:客戶端接收響應(yīng),此時(shí)Span結(jié)束,如果cr的時(shí)間戳減去cs時(shí)間戳,便可以得到整個(gè)請(qǐng)求所消耗的時(shí)間。

Spring Cloud Sleuth 也為我們提供了一套完整的鏈路解決方案,Spring Cloud Sleuth 可以結(jié)合 Zipkin,將信息發(fā)送到 Zipkin,利用 Zipkin 的存儲(chǔ)來存儲(chǔ)鏈路信息,利用 Zipkin UI 來展示數(shù)據(jù)。

Zipkin

Zipkin是一種分布式鏈路追蹤系統(tǒng)。 它有助于收集解決微服務(wù)架構(gòu)中的延遲問題所需的時(shí)序數(shù)據(jù)。 它管理這些數(shù)據(jù)的收集和查找。 Zipkin的設(shè)計(jì)基于Google Dapper論文。

跟蹤器存在于應(yīng)用程序中,記錄請(qǐng)求調(diào)用的時(shí)間和元數(shù)據(jù)。跟蹤器使用庫(kù),它們的使用對(duì)用戶是無感知的。例如,Web服務(wù)器會(huì)在收到請(qǐng)求時(shí)和發(fā)送響應(yīng)時(shí)會(huì)記錄相應(yīng)的時(shí)間和一些元數(shù)據(jù)。一次完整鏈路請(qǐng)求所收集的數(shù)據(jù)被稱為Span。

我們可以使用它來收集各個(gè)服務(wù)器上請(qǐng)求鏈路的跟蹤數(shù)據(jù),并通過它提供的 REST API 接口來輔助我們查詢跟蹤數(shù)據(jù)以實(shí)現(xiàn)對(duì)分布式系統(tǒng)的監(jiān)控程序,從而及時(shí)地發(fā)現(xiàn)系統(tǒng)中出現(xiàn)的延遲升高問題并找出系統(tǒng)性能瓶頸的根源。除了面向開發(fā)的 API 接口之外,它也提供了方便的 UI 組件來幫助我們直觀的搜索跟蹤信息和分析請(qǐng)求鏈路明細(xì),比如:可以查詢某段時(shí)間內(nèi)各用戶請(qǐng)求的處理時(shí)間等。
Zipkin 提供了可插拔數(shù)據(jù)存儲(chǔ)方式:In-Memory、MySql、Cassandra 以及 Elasticsearch。接下來的測(cè)試為方便直接采用 In-Memory 方式進(jìn)行存儲(chǔ),生產(chǎn)推薦 Elasticsearch.

上圖展示了 Zipkin 的基礎(chǔ)架構(gòu),它主要由 4 個(gè)核心組件構(gòu)成:

Collector:收集器組件,它主要用于處理從外部系統(tǒng)發(fā)送過來的跟蹤信息,將這些信息轉(zhuǎn)換為 Zipkin 內(nèi)部處理的 Span 格式,以支持后續(xù)的存儲(chǔ)、分析、展示等功能。

Storage:存儲(chǔ)組件,它主要對(duì)處理收集器接收到的跟蹤信息,默認(rèn)會(huì)將這些信息存儲(chǔ)在內(nèi)存中,我們也可以修改此存儲(chǔ)策略,通過使用其他存儲(chǔ)組件將跟蹤信息存儲(chǔ)到數(shù)據(jù)庫(kù)中。

RESTful API:API 組件,它主要用來提供外部訪問接口。比如給客戶端展示跟蹤信息,或是外接系統(tǒng)訪問以實(shí)現(xiàn)監(jiān)控等。

Web UI:UI 組件,基于 API 組件實(shí)現(xiàn)的上層應(yīng)用。通過 UI 組件用戶可以方便而有直觀地查詢和分析跟蹤信息。

案例實(shí)戰(zhàn)

在本案例一共有三個(gè)應(yīng)用,分別為注冊(cè)中心,eureka-server、eureka-client、eureka-client-feign,三個(gè)應(yīng)用的基本信息如下:

應(yīng)用名 端口 作用
eureka-server 8761 注冊(cè)中心
eureka-client 8763 服務(wù)提供者
eureka-client-feign 8765 服務(wù)消費(fèi)者

其中eureka-server 應(yīng)用為注冊(cè)中心,其他兩個(gè)應(yīng)用向它注冊(cè)。eureka-client為服務(wù)提供者,提供了一個(gè)RESTAPI,eureka-client-feign為服務(wù)消費(fèi)者,通過Feign Client向服務(wù)提供者消費(fèi)服務(wù)。

在之前的文章已經(jīng)講述了如何如何搭建服務(wù)注冊(cè)中心,在這里就省略這一部分內(nèi)容。服務(wù)提供者提供一個(gè)REST接口,服務(wù)消費(fèi)者通過FeignClient消費(fèi)服務(wù)。

服務(wù)提供者

eureka-client服務(wù)提供者,對(duì)外提供一個(gè)RESTAPI,并向服務(wù)注冊(cè)中心注冊(cè),這部分內(nèi)容,不再講述,見源碼。需要在工程的pom文件加上sleuth的起步依賴和zipkin的起步依賴,代碼如下:


    org.springframework.cloud
    spring-cloud-starter-sleuth


    org.springframework.cloud
    spring-cloud-starter-zipkin

在工程的配置文件application.yml需要做以下的配置:

spring:
  sleuth:
    web:
      client:
        enabled: true
    sampler:
      probability: 1.0 # 將采樣比例設(shè)置為 1.0,也就是全部都需要。默認(rèn)是 0.1
  zipkin:
    base-url: http://localhost:9411/ # 指定了 Zipkin 服務(wù)器的地址

其中spring.sleuth.web.client.enable為true設(shè)置的是web開啟sleuth功能;spring.sleuth.sampler.probability可以設(shè)置為小數(shù),最大值為1.0,當(dāng)設(shè)置為1.0時(shí)就是鏈路數(shù)據(jù)100%收集到zipkin-server,當(dāng)設(shè)置為0.1時(shí),即10%概率收集鏈路數(shù)據(jù);spring.zipkin.base-url設(shè)置zipkin-server的地址。

對(duì)外提供一個(gè)Api,代碼如下:

@RestController
public class HiController {

    @Value("${server.port}")
    String port;
    @GetMapping("/hi")
    public String home(@RequestParam String name) {
        return "hi "+name+",i am from port:" +port;
    }

}
服務(wù)消費(fèi)者

服務(wù)消費(fèi)者通過FeignClient消費(fèi)服務(wù)提供者提供的服務(wù)。同服務(wù)提供者一樣,需要在工程的pom文件加上sleuth的起步依賴和zipkin的起步依賴,另外也需要在配置文件application.yml做相關(guān)的配置,具體同服務(wù)提供者。

服務(wù)消費(fèi)者通過feignClient進(jìn)行服務(wù)消費(fèi),feignclient代碼如下:

@FeignClient(value = "eureka-client",configuration = FeignConfig.class)
public interface EurekaClientFeign {

    @GetMapping(value = "/hi")
    String sayHiFromClientEureka(@RequestParam(value = "name") String name);
}

servcie層代碼如下:

@Service
public class HiService {

    @Autowired
    EurekaClientFeign eurekaClientFeign;

 
    public String sayHi(String name){
        return  eurekaClientFeign.sayHiFromClientEureka(name);
    }
}

controller代碼如下:

@RestController
public class HiController {
    @Autowired
    HiService hiService;

    @GetMapping("/hi")
    public String sayHi(@RequestParam( defaultValue = "forezp",required = false)String name){
        return hiService.sayHi(name);
    }

上面的代碼對(duì)外暴露一個(gè)API,通過FeignClient的方式調(diào)用eureka-client的服務(wù)。

zipkin-server

在Spring Cloud D版本,zipkin-server通過引入依賴的方式構(gòu)建工程,自從E版本之后,這一方式改變了,采用官方的jar形式啟動(dòng),所以需要通過下載官方的jar來啟動(dòng),也通過以下命令一鍵啟動(dòng):

curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar

上面的第一行命令會(huì)從zipkin官網(wǎng)下載官方的jar包。
如果是window系統(tǒng),建議使用gitbash執(zhí)行上面的命令。

如果用 Docker 的話,使用以下命令:

docker run -d -p 9411:9411 openzipkin/zipkin

通過java -jar zipkin.jar的方式啟動(dòng)之后,在瀏覽器上訪問lcoalhost:9411,顯示的界面如下:

鏈路數(shù)據(jù)驗(yàn)證

依次啟動(dòng)eureka-server,eureka-client,eureka-client-feign的三個(gè)應(yīng)用,等所有應(yīng)用啟動(dòng)完成后,在瀏覽器上訪問http://localhost:8765/hi(如果報(bào)錯(cuò),是服務(wù)與發(fā)現(xiàn)需要一定的時(shí)間,耐心等待幾十秒),訪問成功后,再次在瀏覽器上訪問zipkin-server的頁(yè)面,顯示如下:

從上圖可以看出每次請(qǐng)求所消耗的時(shí)間,以及一些span的信息。

從上圖可以看出具體的服務(wù)依賴關(guān)系,eureka-feign-client依賴了eureka-client。

使用rabbitmq進(jìn)行鏈路數(shù)據(jù)收集

在上面的案例中使用的http請(qǐng)求的方式將鏈路數(shù)據(jù)發(fā)送給zipkin-server,其實(shí)還可以使用rabbitmq的方式進(jìn)行服務(wù)的消費(fèi)。使用rabbitmq需要安裝rabbitmq程序,下載地址http://www.rabbitmq.com/。

下載完成后,需要eureka-client和eureka-client-feign的起步依賴加上rabbitmq的依賴,依賴如下:


    org.springframework.cloud
    spring-cloud-stream-binder-rabbit

在配置文件上需要配置rabbitmq的配置,配置信息如下:

spring:
  rabbitmq:
    host: localhost
    username: guest
    password: guest
    port: 5672

另外需要把spring.zipkin.base-url去掉。

在上面2個(gè)工程中,rabbitmq通過發(fā)送鏈路數(shù)據(jù),那么zipkin-server是怎么樣知道rabbitmq的地址呢,怎么監(jiān)聽收到的鏈路數(shù)據(jù)呢?這需要在程序啟動(dòng)的時(shí)候,通過環(huán)境變量的形式到環(huán)境中,然后zikin-server從環(huán)境變量中讀取。
可配置的屬性如下:

屬性 環(huán)境變量 描述
zipkin.collector.rabbitmq.addresses RABBIT_ADDRESSES 用逗號(hào)分隔的 RabbitMQ 地址列表,例如localhost:5672,localhost:5673
zipkin.collector.rabbitmq.password RABBIT_PASSWORD 連接到 RabbitMQ 時(shí)使用的密碼,默認(rèn)為 guest
zipkin.collector.rabbitmq.username RABBIT_USER 連接到 RabbitMQ 時(shí)使用的用戶名,默認(rèn)為guest
zipkin.collector.rabbitmq.virtual-host RABBIT_VIRTUAL_HOST 使用的 RabbitMQ virtual host,默認(rèn)為 /
zipkin.collector.rabbitmq.use-ssl RABBIT_USE_SSL 設(shè)置為true則用 SSL 的方式與 RabbitMQ 建立鏈接
zipkin.collector.rabbitmq.concurrency RABBIT_CONCURRENCY 并發(fā)消費(fèi)者數(shù)量,默認(rèn)為1
zipkin.collector.rabbitmq.connection-timeout RABBIT_CONNECTION_TIMEOUT 建立連接時(shí)的超時(shí)時(shí)間,默認(rèn)為 60000毫秒,即 1 分鐘
zipkin.collector.rabbitmq.queue RABBIT_QUEUE 從中獲取 span 信息的隊(duì)列,默認(rèn)為 zipkin

比如,通過以下命令啟動(dòng):

RABBIT_ADDRESSES=localhost java -jar zipkin.jar

上面的命令等同于一下的命令:

java -jar zipkin.jar --zipkin.collector.rabbitmq.addressed=localhost

用上面的2條命令中的任何一種方式重新啟動(dòng)zipkin-server程序,并重新啟動(dòng)eureka-client、eureka-server、eureka-client-feign,動(dòng)完成后在瀏覽器上訪問http://localhost:8765/hi,再訪問http://localhost:9411/zipkin/,就可以看到通過Http方式發(fā)送鏈路數(shù)據(jù)一樣的接口。

自定義Tag

在頁(yè)面上可以查看每個(gè)請(qǐng)求的traceId,每個(gè)trace又包含若干的span,每個(gè)span又包含了很多的tag,自定義tag可以通過Tracer這個(gè)類來自定義。

@Autowired
Tracer tracer;

 @GetMapping("/hi")
    public String home(@RequestParam String name) {
        tracer.currentSpan().tag("name","forezp");
        return "hi "+name+",i am from port:" +port;
    }
將鏈路數(shù)據(jù)存儲(chǔ)在Mysql數(shù)據(jù)庫(kù)中

上面的例子是將鏈路數(shù)據(jù)存在內(nèi)存中,只要zipkin-server重啟之后,之前的鏈路數(shù)據(jù)全部查找不到了,zipkin是支持將鏈路數(shù)據(jù)存儲(chǔ)在mysql、cassandra、elasticsearch中的。
現(xiàn)在講解如何將鏈路數(shù)據(jù)存儲(chǔ)在Mysql數(shù)據(jù)庫(kù)中。
首先需要初始化zikin存儲(chǔ)在Mysql的數(shù)據(jù)的scheme,可以在這里查看https://github.com/openzipkin...,具體如下:

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`) COMMENT "ignore insert on duplicate";
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT "for joining with zipkin_annotations";
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT "for getTracesByIds";
ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT "for getTraces and getSpanNames";
ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT "for getTraces ordering and range";

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`) COMMENT "Ignore insert on duplicate";
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT "for joining with zipkin_spans";
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT "for getTraces/ByIds";
ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT "for getTraces and getServiceNames";
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT "for getTraces and autocomplete values";
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT "for getTraces and autocomplete values";
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT "for dependencies job";

CREATE TABLE IF NOT EXISTS zipkin_dependencies (
  `day` DATE NOT NULL,
  `parent` VARCHAR(255) NOT NULL,
  `child` VARCHAR(255) NOT NULL,
  `call_count` BIGINT,
  `error_count` BIGINT
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);

在數(shù)據(jù)庫(kù)中初始化上面的腳本之后,需要做的就是zipkin-server如何連接數(shù)據(jù)庫(kù)。zipkin如何連數(shù)據(jù)庫(kù)同連接rabbitmq一樣。zipkin連接數(shù)據(jù)庫(kù)的屬性所對(duì)應(yīng)的環(huán)境變量如下:

屬性 環(huán)境變量 描述
zipkin.torage.type STORAGE_TYPE 默認(rèn)的為mem,即為內(nèi)存,其他可支持的為cassandra、cassandra3、elasticsearch、mysql
zipkin.torage.mysql.host MYSQL_HOST 數(shù)據(jù)庫(kù)的host,默認(rèn)localhost
zipkin.torage.mysql.port MYSQL_TCP_PORT 數(shù)據(jù)庫(kù)的端口,默認(rèn)3306
zipkin.torage.mysql.username MYSQL_USER 連接數(shù)據(jù)庫(kù)的用戶名,默認(rèn)為空
zipkin.torage.mysql.password MYSQL_PASS 連接數(shù)據(jù)庫(kù)的密碼,默認(rèn)為空
zipkin.torage.mysql.db MYSQL_DB zipkin使用的數(shù)據(jù)庫(kù)名,默認(rèn)是zipkin
zipkin.torage.mysql.max-active MYSQL_MAX_CONNECTIONS 最大連接數(shù),默認(rèn)是10
STORAGE_TYPE=mysql MYSQL_HOST=localhost MYSQL_TCP_PORT=3306 MYSQL_USER=root MYSQL_PASS=123456 MYSQL_DB=zipkin java -jar zipkin.jar

等同于以下的命令

java -jar zipkin.jar --zipkin.torage.type=mysql --zipkin.torage.mysql.host=localhost --zipkin.torage.mysql.port=3306 --zipkin.torage.mysql.username=root --zipkin.torage.mysql.password=123456

使用上面的命令啟動(dòng)zipkin.jar工程,然后再瀏覽數(shù)上訪問http://localhost:8765/hi,再訪問http://localhost:9411/zipkin/,可以看到鏈路數(shù)據(jù)。這時(shí)去數(shù)據(jù)庫(kù)查看數(shù)據(jù),也是可以看到存儲(chǔ)在數(shù)據(jù)庫(kù)的鏈路數(shù)據(jù),如下:

這時(shí)重啟應(yīng)用zipkin.jar,再次在瀏覽器上訪問http://localhost:9411/zipkin/,仍然可以得到之前的結(jié)果,證明鏈路數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,而不是內(nèi)存中。

將鏈路數(shù)據(jù)存在在Elasticsearch中

zipkin-server支持將鏈路數(shù)據(jù)存儲(chǔ)在ElasticSearch中。讀者需要自行安裝ElasticSearch和Kibana,下載地址為https://www. elastic.co/products/elasticsearch。安裝完成后啟動(dòng),其中ElasticSearch的默認(rèn)端口號(hào)為9200,Kibana的默認(rèn)端口號(hào)為5601。

同理,zipkin連接elasticsearch也是從環(huán)境變量中讀取的,elasticsearch相關(guān)的環(huán)境變量和對(duì)應(yīng)的屬性如下:

屬性 環(huán)境變量 描述
zipkin.torage.elasticsearch.hosts ES_HOSTS ES_HOSTS,默認(rèn)為空
zipkin.torage.elasticsearch.pipeline ES_PIPELINE ES_PIPELINE,默認(rèn)為空
zipkin.torage.elasticsearch.max-requests ES_MAX_REQUESTS ES_MAX_REQUESTS,默認(rèn)為64
zipkin.torage.elasticsearch.timeout ES_TIMEOUT ES_TIMEOUT,默認(rèn)為10s
zipkin.torage.elasticsearch.index ES_INDEX ES_INDEX,默認(rèn)是zipkin
zipkin.torage.elasticsearch.date-separator ES_DATE_SEPARATOR ES_DATE_SEPARATOR,默認(rèn)為“-”
zipkin.torage.elasticsearch.index-shards ES_INDEX_SHARDS ES_INDEX_SHARDS,默認(rèn)是5
zipkin.torage.elasticsearch.index-replicas ES_INDEX_REPLICAS ES_INDEX_REPLICAS,默認(rèn)是1
zipkin.torage.elasticsearch.username ES_USERNAME ES的用戶名,默認(rèn)為空
zipkin.torage.elasticsearch.password ES_PASSWORD ES的密碼,默認(rèn)是為空

采用以下命令啟動(dòng)zipkin-server:

STORAGE_TYPE=elasticsearch ES_HOSTS=http://localhost:9200 ES_INDEX=zipkin java -jar zipkin.jar
java -jar zipkin.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=http://localhost:9200 --ES_INDEX=zipkin 
java -jar zipkin.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=http://localhost:9200 --ES_INDEX=zipkin 
java -jar zipkin.jar --zipkin.torage.type=elasticsearch --zipkin.torage.elasticsearch.hosts=http://localhost:9200 --zipkin.torage.elasticsearch.index=zipkin 

啟動(dòng)完成后,然后在瀏覽數(shù)上訪問http://localhost:8765/hi,再訪問http://localhost:9411/zipkin/,可以看到鏈路數(shù)據(jù)。這時(shí)鏈路數(shù)據(jù)存儲(chǔ)在ElasticSearch。

在zipkin上展示鏈路數(shù)據(jù)

鏈路數(shù)據(jù)存儲(chǔ)在ElasticSearch中,ElasticSearch可以和Kibana結(jié)合,將鏈路數(shù)據(jù)展示在Kibana上。安裝完成Kibana后啟動(dòng),Kibana默認(rèn)會(huì)向本地端口為9200的ElasticSearch讀取數(shù)據(jù)。Kibana默認(rèn)的端口為5601,訪問Kibana的主頁(yè)http://localhost:5601,其界面如下圖所示。

在上圖的界面中,單擊“Management”按鈕,然后單擊“Add New”,添加一個(gè)index。我們將在上節(jié)ElasticSearch中寫入鏈路數(shù)據(jù)的index配置為“zipkin”,那么在界面填寫為“zipkin-*”,單擊“Create”按鈕,界面如下圖所示:

創(chuàng)建完成index后,單擊“Discover”,就可以在界面上展示鏈路數(shù)據(jù)了,展示界面如下圖所示。

參考資料

https://zipkin.io/

https://github.com/spring-clo...

https://cloud.spring.io/sprin...

https://github.com/openzipkin...

https://github.com/openzipkin...

https://windmt.com/2018/04/24...

https://segmentfault.com/a/11...

elatstic 版本為2.6.x,下載地址:https://www.elastic.co/downlo...

http://www.cnblogs.com/JreeyQ...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77429.html

相關(guān)文章

  • springboot(2.1.0)+springcloud(Greenwich.M1)實(shí)現(xiàn)鏈路追蹤

    摘要:主要問題由于新版本新版本實(shí)現(xiàn)鏈路追蹤的一些新特性,使得我在實(shí)現(xiàn)的過程上踩了不少坑。同樣一些場(chǎng)景下需要保存鏈路追蹤的數(shù)據(jù),以備后面觀察對(duì)比,所以同樣需要一個(gè)來存儲(chǔ)數(shù)據(jù)。方法一,通過修改基配置文件后啟動(dòng)。 主要問題 ???? 由于springboot新版本(2.1.0)、springcloud新版本(Greenwich.M1)實(shí)現(xiàn)鏈路追蹤sleuth+zipkin的一些新特性,使得我在實(shí)...

    Joonas 評(píng)論0 收藏0
  • Spring Cloud Consul Greenwich版本攻略

    摘要:在我們的文檔中,我們使用來表明就選舉和事務(wù)的順序達(dá)成一致。提供成員關(guān)系,故障檢測(cè)和事件廣播。這是一個(gè)允許請(qǐng)求的請(qǐng)求響應(yīng)機(jī)制。這包括服務(wù)發(fā)現(xiàn),還包括豐富的運(yùn)行狀況檢查,鎖定,鍵值,多數(shù)據(jù)中心聯(lián)合,事件系統(tǒng)和。 轉(zhuǎn)載請(qǐng)標(biāo)明出處: http://blog.csdn.net/forezp/a...本文出自方志朋的博客 什么是Consul Consul是HashiCorp公司推出的開源軟件,使...

    qingshanli1988 評(píng)論0 收藏0
  • Dubbo Spring Cloud 重塑微服務(wù)治理

    摘要:在服務(wù)治理方面,相較于而言,并不成熟。遺憾的是,往往被部分開發(fā)者片面地視作服務(wù)治理的框架,而非微服務(wù)基礎(chǔ)設(shè)施。因此,建議開發(fā)人員將或者遷移為服務(wù)。因此,下一步需要將其配置服務(wù)遠(yuǎn)程。當(dāng)服務(wù)提供方啟動(dòng)后,下一步實(shí)現(xiàn)一個(gè)服務(wù)消費(fèi)方。 原文鏈接:Dubbo Spring Cloud 重塑微服務(wù)治理,來自于微信公眾號(hào):次靈均閣 摘要 在 Java 微服務(wù)生態(tài)中,Spring Cloud1 成為...

    wh469012917 評(píng)論0 收藏0
  • Spring Cloud 參考文檔(Spring Cloud Sleuth介紹)

    摘要:那個(gè)配置文件將來自應(yīng)用程序的信息以格式記錄到文件中。以下清單顯示了使用的集成測(cè)試設(shè)置代碼添加到項(xiàng)目本節(jié)介紹如何使用或?qū)⑻砑拥巾?xiàng)目中。以下示例顯示了如何為執(zhí)行此操作建議你通過添加依賴關(guān)系管理,這樣你就無需自行管理版本。 Spring Cloud Sleuth介紹 Spring Cloud Sleuth為Spring Cloud實(shí)現(xiàn)了分布式追蹤解決方案。 術(shù)語 Spring Cloud S...

    impig33 評(píng)論0 收藏0
  • Spring Cloud Greenwich 正式發(fā)布,Hystrix 即將壽終正寢。。

    摘要:正式版在這天正式發(fā)布了,下面我們來看下有哪些更新內(nèi)容。生命周期終止提醒版本將于正式退役,具體可以參考官方宣布版本作為的主要版本,的生命周期也會(huì)由版本的終止而終止。進(jìn)入維護(hù)模式最近,宣布進(jìn)入維護(hù)模式停止開發(fā)。。。 Spring Cloud Greenwich 正式版在 01/23/2019 這天正式發(fā)布了,下面我們來看下有哪些更新內(nèi)容。 生命周期終止提醒 Spring Cloud Edg...

    Magicer 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<