一、Zipkin简介
Zipkin是Twitter的一个开源项目,它基于Google Dapper实现。我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的REST API接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。除了面向开发的API接口之外,它也提供了方便的UI组件来帮助我们直观的搜索跟踪信息和分析请求链路明细,比如:可以查询某段时间内各用户请求的处理时间等。
上图展示了Zipkin的基础架构,它主要有4个核心组件构成:
- Collector:收集器组件,它主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin内部处理的Span格式,以支持后续的存储、分析、展示等功能。
- Storage:存储组件,它主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中。
- RESTful API:API组件,它主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是外接系统访问以实现监控等。
- Web UI:UI组件,基于API组件实现的上层应用。通过UI组件用户可以方便而有直观地查询和分析跟踪信息。
二、Sleuth与Zipkin的基础整合
第一步:搭建Zipkin Server
1.创建一个基础的Spring Boot应用,命名为zipkin-server
,并在pom.xml
中引入Zipkin Server的相关依赖,具体如下:
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
2.创建应用主类ZipkinApplication
,使用@EnableZipkinServer
注解来启动Zipkin Server,具体如下:
@EnableZipkinServer
@SpringBootApplication
public class ZipkinApplication { public static void main(String[] args) {
SpringApplication.run(ZipkinApplication.class, args);
} }
3.增加配置信息:
在application.properties
中做一些简单配置,比如:设置服务端口号为9411
(客户端整合时候,自动化配置会连接9411
端口,所以在服务端设置了端口为9411
的话,客户端可以省去这个配置)。
spring.application.name=zipkin-server
server.port=
4.访问http://localhost:9411/
,我们可以看到如下图所示的Zipkin管理页面:
第二步:为应用引入和配置Zipkin服务
在完成了Zipkin Server的搭建之后,我们还需要对应用做一些配置,以实现将跟踪信息输出到Zipkin Server。我们以之前实现的trace-1
和trace-2
为例,对它们做以下改造内容:
1.在trace-1
和trace-2
的pom.xml
中引入spring-cloud-sleuth-zipkin
依赖,具体如下所示。(spring-cloud-starter-zipkin)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
2.在trace-1
和trace-2
的application.properties
中增加Zipkin Server的配置信息,具体如下所示(如果在zip-server
应用中,我们将其端口设置为9411
,并且均在本地调试的话,该参数也可以不配置,因为默认值就是http://localhost:9411
)。
spring.zipkin.base-url=http://localhost:9411
测试与分析
到这里我们已经完成了接入Zipkin Server的所有基本工作,我们可以继续将eureka-server
、trace-1
和trace-2
启动起来,然后我们做一些测试实验,以对它的运行机制有一些初步的理解。
我们先来向trace-1
的接口发送几个请求:http://localhost:9101/trace-1
,当我们在日志中出现跟踪信息的最后一个值为true
的时候,说明该跟踪信息会输出给Zipkin Server,所以此时我们可以去Zipkin Server的管理页面中选择合适的查询条件后,点击Find Traces
,就可以查询出刚才在日志中出现的跟踪信息了(也可以根据日志中的Trace ID,在页面的右上角输入框中来搜索),具体如下页面所示:
点击下方trace-1
端点的跟踪信息,我们还可以得到Sleuth收集到的跟踪到详细信息,其中包括了我们关注的请求时间消耗等。
点击导航栏中的Dependencies
菜单,我们还可以查看Zipkin Server根据跟踪信息分析生成的系统请求链路依赖关系图:
转自:http://blog.didispace.com/spring-cloud-starter-dalston-8-4/