SpingCloud 2020微服务教程【43】Sleuth、Zipkin

视频链接:2020最新版SpringCloud框架开发教程-周阳
文章源码:https://github.com/geyiwei-suzhou/cloud2020/

在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败
sleuth
Spring Cloud Sleuth 提供了一套完整的服务跟踪的解决方案,在分布式系统中提供追踪解决方案并且兼容支持了zipkin

zipkin

Spring Cloud从F版起已不需要自己构建Zipkin Server了,只需调用jar包即可
zipkin下载地址:zipkin-server-2.12.9-exec.jar
下载完成后使用如下命令运行:

java -jar zipkin-server-2.12.9-exec.jar
➜  Desktop java -jar zipkin-server-2.12.9-exec.jar
                                    ********
                                  **        **
                                 *            *
                                **            **
                                **            **
                                 **          **
                                  **        **
                                    ********
                                      ****
                                      ****
        ****                          ****
     ******                           ****                                 ***
  ****************************************************************************
    *******                           ****                                 ***
        ****                          ****
                                       **
                                       **


             *****      **     *****     ** **       **     **   **
               **       **     **  *     ***         **     **** **
              **        **     *****     ****        **     **  ***
             ******     **     **        **  **      **     **   **

:: Powered by Spring Boot ::         (v2.1.4.RELEASE)

2021-01-12 17:34:18.101  INFO 9790 --- [           main] z.s.ZipkinServer                         : Starting ZipkinServer on MacBook-Pro.local with PID 9790 (/Users/geyiwei/Desktop/zipkin-server-2.12.9-exec.jar started by geyiwei in /Users/geyiwei/Desktop)
2021-01-12 17:34:18.107  INFO 9790 --- [           main] z.s.ZipkinServer                         : The following profiles are active: shared
2021-01-12 17:34:19.620  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.verboseExceptions: false (default)
2021-01-12 17:34:19.620  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.verboseSocketExceptions: false (default)
2021-01-12 17:34:19.620  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.verboseResponses: false (default)
2021-01-12 17:34:19.625  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.useEpoll: false (default)
2021-01-12 17:34:22.987  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.useOpenSsl: true (default)
2021-01-12 17:34:22.987  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.maxNumConnections: 2147483647 (default)
2021-01-12 17:34:22.988  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.numCommonWorkers: 16 (default)
2021-01-12 17:34:22.988  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.numCommonBlockingTaskThreads: 200 (default)
2021-01-12 17:34:22.989  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultMaxRequestLength: 10485760 (default)
2021-01-12 17:34:22.990  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultMaxResponseLength: 10485760 (default)
2021-01-12 17:34:22.990  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultRequestTimeoutMillis: 10000 (default)
2021-01-12 17:34:22.990  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultResponseTimeoutMillis: 15000 (default)
2021-01-12 17:34:22.990  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultConnectTimeoutMillis: 3200 (default)
2021-01-12 17:34:22.991  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultServerIdleTimeoutMillis: 15000 (default)
2021-01-12 17:34:22.991  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultClientIdleTimeoutMillis: 10000 (default)
2021-01-12 17:34:22.991  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultHttp2InitialConnectionWindowSize: 1048576 (default)
2021-01-12 17:34:22.992  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultHttp2InitialStreamWindowSize: 1048576 (default)
2021-01-12 17:34:22.992  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultHttp2MaxFrameSize: 16384 (default)
2021-01-12 17:34:22.992  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultHttp2MaxStreamsPerConnection: 2147483647 (default)
2021-01-12 17:34:22.992  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultHttp2MaxHeaderListSize: 8192 (default)
2021-01-12 17:34:22.993  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultHttp1MaxInitialLineLength: 4096 (default)
2021-01-12 17:34:22.993  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultHttp1MaxHeaderSize: 8192 (default)
2021-01-12 17:34:22.993  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultHttp1MaxChunkSize: 8192 (default)
2021-01-12 17:34:22.994  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultUseHttp2Preface: true (default)
2021-01-12 17:34:22.994  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultUseHttp1Pipelining: false (default)
2021-01-12 17:34:22.994  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultBackoffSpec: exponential=200:10000,jitter=0.2 (default)
2021-01-12 17:34:22.994  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.defaultMaxTotalAttempts: 10 (default)
2021-01-12 17:34:22.995  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.routeCache: maximumSize=4096 (default)
2021-01-12 17:34:22.995  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.compositeServiceCache: maximumSize=256 (default)
2021-01-12 17:34:22.995  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.parsedPathCache: maximumSize=4096 (default)
2021-01-12 17:34:22.995  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.headerValueCache: maximumSize=4096 (default)
2021-01-12 17:34:22.995  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.cachedHeaders: :authority,:scheme,:method,accept-encoding,content-type (default)
2021-01-12 17:34:22.997  INFO 9790 --- [           main] c.l.a.c.Flags                            : com.linecorp.armeria.annotatedServiceExceptionVerbosity: unhandled (default)
2021-01-12 17:34:22.999  INFO 9790 --- [           main] c.l.a.c.Flags                            : /dev/epoll not available: java.lang.IllegalStateException: Only supported on Linux
2021-01-12 17:34:22.999  INFO 9790 --- [           main] c.l.a.c.Flags                            : Using OpenSSL: BoringSSL, 0x1010007f
2021-01-12 17:34:23.246  INFO 9790 --- [           main] c.l.a.c.u.SystemInfo                     : Hostname: macbook-pro.local (from 'hostname' command)
2021-01-12 17:34:23.770  INFO 9790 --- [oss-http-*:9411] c.l.a.s.Server                           : Serving HTTP at /0:0:0:0:0:0:0:0:9411 - http://127.0.0.1:9411/
2021-01-12 17:34:23.771  INFO 9790 --- [           main] c.l.a.s.ArmeriaAutoConfiguration         : Armeria server started at ports: {/0:0:0:0:0:0:0:0:9411=ServerPort(/0:0:0:0:0:0:0:0:9411, [http])}
2021-01-12 17:34:23.811  INFO 9790 --- [           main] c.d.d.core                               : DataStax Java driver 3.7.1 for Apache Cassandra
2021-01-12 17:34:23.829  INFO 9790 --- [           main] c.d.d.c.GuavaCompatibility               : Detected Guava >= 19 in the classpath, using modern compatibility layer
2021-01-12 17:34:24.308  INFO 9790 --- [           main] c.d.d.c.ClockFactory                     : Using native clock to generate timestamps.
2021-01-12 17:34:24.467  INFO 9790 --- [           main] z.s.ZipkinServer                         : Started ZipkinServer in 6.918 seconds (JVM running for 7.776)

访问:http://localhost:9411/zipkin

Trace Id:一个请求链路,通过Trace Id唯一标识,Span标识发起的请求信息,各span通过parent id关联起来Trace id
Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识
span:表示调用链路来源,通俗的理解span就是一次请求信息

Sleuth链路追踪搭建

cloud-provider-payment8001模块

修改pom,添加zipkin依赖

<!-- 包含了sleuth + zipkin -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

修改yml,在spring节点下添加子节点:

zipkin:
    base-url: http://localhost:9411
sleuth:
  sampler:
    # 采样率值介于0到1之间,1则表示全部采集
    probability: 1

修改类:com.antherd.springcloud.controller.PaymentController,添加新接口

@GetMapping(value = "/payment/zipkin")
public String getPaymentZipkin() {
  return "Hi, I'm payment zipkin server fall back, welcome to antherd, O(∩_∩)O哈哈~";
}

cloud-consumer-order80模块
修改pom,添加zipkin依赖

<!-- 包含了sleuth + zipkin -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

修改yml,在spring节点下添加子节点:

zipkin:
    base-url: http://localhost:9411
sleuth:
  sampler:
    # 采样率值介于0到1之间,1则表示全部采集
    probability: 1

修改类:com.antherd.springcloud.controller.OrderController,添加新接口

// ==================> zipkin + sleuth
@GetMapping(value = "/consumer/payment/zipkin")
public String getPaymentZipkin() {
  return restTemplate.getForObject("http://localhost:8001" + "/payment/zipkin/", String.class);
}

启动测试

启动:cloud-eureka-server7001,cloud-provider-payment8001,cloud-consumer-order80 三个模块

访问:http://localhost/consumer/payment/zipkin ,打开http://localhost:9411/zipkin/ 网页,查找
zipkin

点击某一条记录进入查看详情zipkin detail

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值