美文网首页
Spring Cloud Sleuth和zipkin微服务跟踪

Spring Cloud Sleuth和zipkin微服务跟踪

作者: 晓阳emmm | 来源:发表于2018-11-02 11:45 被阅读0次

    Spring Cloud Sleuth:

    Spring Cloud Sleuth是为Spring Cloud实现了分布式追踪解决方案,Spring Cloud Sleuth借用了Dapper的术语:
    跨度(Span):基本的工作单位。例如,发送一个RPC是一个新的跨度,就像向RPC发送响应一样。跨度由跨度的唯一64位ID和跨度所包含的另一个 64位ID标识。Spans还具有其他数据,例如描述,时间戳事件,键值注释(标记),导致它们的跨度的ID以及进程ID(通常为IP地址)。跨度启动和停止,并跟踪他们的时间信息。一旦你创建了一个跨度,你必须在将来某个时候停止它。开始追踪的初始跨度被称为 root span。该跨度的span id的值等于trace id
    痕迹(Trace):一组形成树状结构的跨度。例如,如果您正在运行分布式大数据存储,则跟踪可能由放入请求组成。

    标注(Annotation):用于及时记录事件的存在。用于定义请求开始和结束的一些核心注释是:

    • cs - 客户端发送 - 客户端发出请求。这个注释描述了跨度的开始。
    • sr - 服务器已收到 - 服务器端收到请求并开始处理。如果从这个时间戳中减去cs时间戳,将会收到网络延迟。
    • ss - 服务器发送 - 在请求处理完成时(当响应被发送回客户端时)注释。如果从这个时间戳中减去sr时间戳,将会收到服务器端处理请求所需的时间。
    • cr - 客户端收到 - 表示跨度结束。客户端已经成功接收到服务器端的响应。如果从这个时间戳中减去cs时间戳,那么将会收到客户端接收服务器响应所需的全部时间。

    SpanTrace在系统中与Zipkin Annotation一起显示的可视化示例:

    img

    Zipkin

    Zipkin是一个分布式追踪系统。它有助于收集解决微服务架构中延迟问题所需的时序数据。它管理这些数据的收集和查找。 应用程序用于向Zipkin报告时间数据。Zipkin UI还提供了一个依赖关系图,显示每个应用程序有多少跟踪请求。如果你正在解决延迟问题或错误问题,则可以根据应用程序,跟踪长度,注释或时间戳过滤或排序所有跟踪。一旦选择了一个跟踪,你可以看到每个跨度所花费的总跟踪时间的百分比,从而可以确定问题应用程序。

    • 在SpringCloud中使用Zipkin:

      springcloud创建zipkin-server,依赖除了springcloud的基础依赖外再添加zipkin依赖,如下

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

    启动类添加标签@EnableZipkinServer启动zipkin,代码如下

    /** 
    * @author wxy 
    */  
    @SpringBootApplication  
    @EnableZipkinServer  
    @EnableEurekaClient  
    public class ZipKinServerApplication {  
      
        public static void main(String[] args) {  
            SpringApplication.run(ZipKinServerApplication.class, args);  
        }  
    } 
    

    配置文件,如下

    spring:  
        application:  
            name: micoserice-zipkin-server  
    server:  
        port: 9994  
    eureka:  
        client:  
            serviceUrl:  
                defaultZone: http://localhost:8761/eureka/  
        instance:  
            instance-id: ${spring.application.name}:${server.port}  
            prefer-ip-address: true  
    

    启动后可直接访问localhost:9994,可看到zipkin的页面

    img

    ​ 除了这种方式还可通过docker安装,可查看教程https://github.com/openzipkin/zipkin

    • 为微服务提供者消费者添加zipkin依赖和配置

    ​ 添加依赖

    <!-- zipkin依赖jar-->  
    <dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-zipkin</artifactId>  
    </dependency> 
    

    添加配置

    spring:  
        zipkin:  
            base-url: http://localhost:9994   
            sleuth:  
                sampler:  
                percentage: 1.0  
    

    spring.sleuth.sampler.percentage 是监控的百分比,默认的是0.1表示10%,这里给1.0表示全部监控
    spring.zipkin.base-url是zipkin-server的服务路径

    依次启动服务如下

    img

    ​ 我这里启动了zuul,ribbon以及user服务,通过zuul网管依次访问ribbon和user,查看zipkin如下图:

    img img

    示例代码:microservice-sleuth-zipkin-server

    参考文档

    http://cloud.spring.io/spring-cloud-static/Edgware.SR1/multi/multi__introduction.html

    http://www.ityouknow.com/springcloud/2018/02/02/spring-cloud-sleuth-zipkin.html

    https://zipkin.io/

    相关文章

      网友评论

          本文标题:Spring Cloud Sleuth和zipkin微服务跟踪

          本文链接:https://www.haomeiwen.com/subject/xziqxqtx.html