一、概述

为什么要有服务跟踪,分布式系统中有很多个服务在相互调用,调用关系是错综复杂的,如果这时出现了问题,我们在进行问题排查的时候,或者在优化架构的时候,工作量就比较大,这时候就需要我们能够准确的跟踪到每个网络请求,了解整个运行流程,如网络请求经过了哪些微服务,在每个微服务里是否有延迟等信息,这样就方便我们排查问题,这时我们就可以使用Spring Cloud Zipkin来实现。

Spring Cloud Zipkin是一个可以采集并且跟踪分布式系统中请求数据的组件,让开发者可以更加直观的监控到请求在各个微服务所耗费的时间等,Zipkin包括Zipkin Server服务端和Zipkin Client客户端。Zipkin Server服务端是用来采集微服务之间的追踪数据的,通过Zipkin Client客户端完成数据的生成和展示。接下来就让我们进入实战演练!

二、实战!快速搭建Zipkin Server和Zipkin client

1.创建子工程zipkinServer,pom.xml配置如下:

    <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.9.4</version>
</dependency> <dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.9.4</version>
</dependency>

2.创建配置文件,代码如下:

server:
port: 9090

3.创建启动类,代码如下:

package com.zing;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import zipkin.server.internal.EnableZipkinServer; @SpringBootApplication
@EnableZipkinServer
public class ZipkinApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(ZipkinApplication.class, args);
}
}

注解说明

​ * @EnableZipkinServer:声明启动Zipkin Server

4.创建zipkin Client。创建一个子工程,pom.xml文件配置如下:

    <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>

5.创建配置文件application.yml,配置如下:

server:
port: 8090
spring:
application:
name: zipkinclient
sleuth:
web:
client:
enabled: true
sampler:
probability: 1.0
zipkin:
base-url: http://localhost:9090/
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/

属性说明

​ * spring.sleuth.web.client.enabled:设置开启请求跟踪

​ * spring.sleuth.sampler.probability:设置采样比例,默认是1.0

​ * spring.zipkin.base-url:Zipkin Server的地址

6.创建启动类,代码如下:

package com.zing;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class ZipKinClientApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(ZipKinClientApplication.class, args);
} }

7.创建controller进行测试,代码如下:

package com.zing.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/zipkin")
public class ZipkinHandler { @Value("${server.port}")
private String port; @GetMapping("/index")
public String index() {
return this.port;
} }

8.依次启动注册中心,zipkinserver,zipkinclient三个服务,访问 http://localhost:9090/zipkin/ 可出现以下可视化界面:

9.我们访问一下要跟踪的接口 http://localhost:8090/zipkin/index 显示如下界面:

10.再次访问zipkin服务跟踪可视化界面地址http://localhost:9090/zipkin/ ,点击Find Traces按钮进入到如下页面

11.点击上图列表中数据,可进入具体展示列表,如下图:

12.点击列表中的数据,即可查看跟踪的服务的详细信息,如下图:

三、总结

本篇文章我们通过zipkin来对我们微服务之间的请求进行了监控,可以看到一些详细信息,如耗费的时间,具体请求的路径方法都可以看到,以上就是Zipkin的使用。

最新文章

  1. C#设计模式系列:访问者模式(Visitor)
  2. blade and soul pvp guide
  3. CSS3 3D Transform
  4. java的nio之:java的nio系列教程之serverSocketChannel
  5. TSP(旅行者问题)——动态规划详解(转)
  6. ubuntu14.04离线配置cm5.5.1
  7. JavaScript 之 弹出窗口总结
  8. Ext入门学习系列(四)面板控件
  9. android ORMlite的应用
  10. linux服务器下tomcat部署项目内存溢出
  11. mysql分表方法实现
  12. Effective Java 第三版——12. 始终重写 toString 方法
  13. C#面试常见题目
  14. Linux下LNMP启动不了的问题总结(2015.05)
  15. 使用Java+MySQL+Apache开发后台项目(一)
  16. centos 6.5升级内核到3.1
  17. 03-body标签中相关标签-2
  18. windows + php7.1 + redis3.1.4
  19. TCGA系列--GDCRNATools
  20. vue每次请求加头部(shiro+vue)

热门文章

  1. node-redis基本操作
  2. unity怎么把工程打包成unitypackage文件
  3. spring和mybatis整合时Access denied for user &#39;***&#39;@&#39;localhost&#39; (using password: YES)错误的解决方案
  4. 修改composer配置(以修改cache-files-maxsize为例)修改composer拉取包出现&quot;Content-Length mismatch&quot;的问题
  5. 集成Spring Data JPA
  6. repo sync error: .repo/manifests/: contains uncommitted changes
  7. 并发王者课 - 青铜 2:峡谷笔记 - 简单认识Java中的线程
  8. [bug] C:warning: implicit declaration of function ‘getline’
  9. Linux利用nc命令脚本批量检测服务器指定端口是否开放
  10. 搭建LAMP环境部署Nextcloud私人网盘