5.2:可视化链路追踪系统:Zipkin

一. Zipkin的介绍和部署

  1. 什么是zipkin

    1. 官网:https://zipkin.io/

    2. 大规模分布式系统的APM工具(Application Performance Management应用程序性能管理),基于Google Dapper的基础实现,和sleuth结合可以提供可视化web界面分析调用链路耗时情况    

  2. 同类产品

    1. 鹰眼(EagleEye)

    2. CAT(大众点评)

    3. twitter开源zipkin,结合sleuth

    4. Pinpoint,运用JavaAgent字节码增强技术

    5. StackDriver Trace (Google)

  3. zipkin组成:

    1. Collector、Storage、Restful API、Web UI组成

  4. 使用:quickstart

    1. https://github.com/openzipkin/zipkin

    2. https://zipkin.io/pages/quickstart.html

  5. OpenTracing:

    1. OpenTracing 已进入 CNCF,正在为全球的分布式追踪,提供统一的概念和数据标准

    2. 通过提供平台无关、厂商无关的 API,使得开发人员能够方便的添加(或更换)追踪系统的实现。

        推荐阅读:

            http://blog.daocloud.io/cncf-3/

            https://www.zhihu.com/question/27994350

            https://yq.aliyun.com/articles/514488?utm_content=m_43347


二. 自己搭建zipkin服务器

  • ZipkinServer

  1. 创建springBoot应用,在pom.xml中添加依赖

<parent>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-parent</artifactId>

  <version>1.5.10.RELEASE</version>

  <relativePath/>

</parent>

<dependencies>

  <dependency>

         <groupId>io.zipkin.java</groupId>

         <artifactId>zipkin-server</artifactId>

  </dependency>

  <dependency>

         <groupId>io.zipkin.java</groupId>

         <artifactId>zipkin-autoconfigure-ui</artifactId>

  </dependency>

</dependencies>

<dependencyManagement>

  <dependencies>

          <dependency>

             <groupId>org.springframework.cloud</groupId>

              <artifactId>spring-cloud-dependencies</artifactId>

                <version>Dalston.SR5</version>

            <type>pom</type>

                  <scope>import</scope>

     </dependency>

  </dependencies>

</dependencyManagement>

  1. 创建应用主类ZipkinApplication,使用@EnableZipkinServer注解来启动Zipkin Server

@EnableZipkinServer

@SpringBootApplication

public class ZipkinApplication {

  public static void main(String[] args) {

    SpringApplication.run(ZipkinApplication.class, args);

  }

}

  1. 在application.properties中配置端口号以及name

spring.application.name=zipkin-server

server.port=9411

  1. 访问http://localhost:9411/

  • 在服务中引入Zipkin服务

  1. 在服务的pom.xml中引入spring-cloud-sleuth-zipkin依赖

<dependency>

  <groupId>org.springframework.cloud</groupId>

  <artifactId>spring-cloud-sleuth-zipkin</artifactId>

</dependency>

  1. 在application.properties中配置base-url

spring.zipkin.base-url=http://localhost:9411


三. 消息中间件收集

  • 修改需要监控的服务

  1. 引入依赖:为了让需要监控的服务在产生跟踪信息之后,能够将抽样记录输出到消息中间件中,要引入一下依赖

    1. 引入spring-cloud-starter-sleuth依赖

    2. 引入zipkin对Spring Cloud Stream的扩展依赖spring-cloud-sleuth-stream

    3. 引入基于Spring Cloud Stream实现的消息中间件绑定器依赖,以使用RabbitMQ为例,引入spring-cloud-starter-stream-rabbit

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-sleuth</artifactId>

</dependency>

<dependency>

      <groupId>org.springframework.cloud</groupId>

      <artifactId>spring-cloud-sleuth-stream</artifactId>

</dependency>

<dependency>

      <groupId>org.springframework.cloud</groupId>

      <artifactId>spring-cloud-starter-stream-rabbit</artifactId>

</dependency>

  1. 在application.properties配置中去掉HTTP方式实现时使用的spring.zipkin.base-url参数,并根据实际部署情况,增加消息中间件的相关配置,比如下面这些关于RabbitMQ的配置信息:

spring.rabbitmq.host=localhost

spring.rabbitmq.port=5672

spring.rabbitmq.username=springcloud

spring.rabbitmq.password=123456

  • 修改zipkin-server服务端

  1. 为了让zipkin-server服务端能够从消息中间件中获取跟踪信息,我们只需要在pom.xml中引入针对消息中间件收集封装的服务端依赖spring-cloud-sleuth-zipkin-stream,同时为了支持具体使用的消息中间件,我们还需要引入针对消息中间件的绑定器实现,比如以使用RabbitMQ为例,我们可以在依赖中增加如下内容

<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>io.zipkin.java</groupId>

<artifactId>zipkin-autoconfigure-ui</artifactId>

</dependency>

分析:

在完成了上述改造内容之后,我们继续将eureka-server、需要监控的服务、zipkin-server都启动起来,同时确保RabbitMQ也处于运行状态。此时,我们可以在RabbitMQ的控制页面中看到一个名为sleuth的交换器,它就是zipkin的消息中间件收集器实现使用的默认主题。

发布了96 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq919694688/article/details/103199523