5.2:可视化链路追踪系统:Zipkin
一. Zipkin的介绍和部署
-
什么是zipkin
-
大规模分布式系统的APM工具(Application Performance Management应用程序性能管理),基于Google Dapper的基础实现,和sleuth结合可以提供可视化web界面分析调用链路耗时情况
-
同类产品
-
鹰眼(EagleEye)
-
CAT(大众点评)
-
twitter开源zipkin,结合sleuth
-
Pinpoint,运用JavaAgent字节码增强技术
-
StackDriver Trace (Google)
-
-
zipkin组成:
-
Collector、Storage、Restful API、Web UI组成
-
-
-
使用:quickstart
-
OpenTracing:
-
OpenTracing 已进入 CNCF,正在为全球的分布式追踪,提供统一的概念和数据标准
-
通过提供平台无关、厂商无关的 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
-
创建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>
-
创建应用主类ZipkinApplication,使用@EnableZipkinServer注解来启动Zipkin Server
@EnableZipkinServer
@SpringBootApplication
public class ZipkinApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinApplication.class, args);
}
}
-
在application.properties中配置端口号以及name
spring.application.name=zipkin-server
server.port=9411
-
访问http://localhost:9411/
-
在服务中引入Zipkin服务
-
在服务的pom.xml中引入spring-cloud-sleuth-zipkin依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
-
在application.properties中配置base-url
spring.zipkin.base-url=http://localhost:9411
三. 消息中间件收集
-
修改需要监控的服务
-
引入依赖:为了让需要监控的服务在产生跟踪信息之后,能够将抽样记录输出到消息中间件中,要引入一下依赖
-
引入spring-cloud-starter-sleuth依赖
-
引入zipkin对Spring Cloud Stream的扩展依赖spring-cloud-sleuth-stream
-
引入基于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>
-
在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服务端
-
为了让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的消息中间件收集器实现使用的默认主题。