调用链跟踪是微服务架构中的基础能力,Spring Cloud Zipkin+Sleuth为我们提供了该能力。首先我们先建立Zipkin服务端,它需要集成Eureka,用于发现服务提供方和消费方,进行数据的采集存储、数据分析与UI展示;然后我们在服务提供方和消费方中植入Zipkin+Sleuth作为客户端,进行追踪数据的生成与上报。

  zikpin服务端(三板斧):

  1、pom里引入第三方(Twitter的)zipkin的jar包:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId>
<artifactId>zipkin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.11.8</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.11.8</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

  注意标黄部分,日志jar包冲突会让zipkin无法启动的。

  2、application:

#本机端口
server.port=8899 #服务名
spring.application.name=zipkin #注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8888/eureka/ #关闭自动收集web请求
management.metrics.web.server.auto-time-requests=false

  3、主类通过@EnableZipkinServer启动zipkin:

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import zipkin2.server.internal.EnableZipkinServer; @EnableZipkinServer
@EnableEurekaClient
@SpringBootApplication
public class ZipkinApplication { public static void main(String[] args) {
SpringApplication.run(ZipkinApplication.class, args);
} }

  zipkin客户端只需干两件事:1、在pom里引入spring-cloud-starter-zipkin即可:

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

  2、在application中加入zipkin服务端地址和采用率(方便测试观察):

#zipkin服务端地址
spring.zipkin.base-url=http://127.0.0.1:8899 #调用链信息采样率
spring.sleuth.sampler.probability=1.0

  我们在api-gateway、a-bootiful-client、a-beautiful-client和a-feign-client中都引入zipkin客户端,现在打开localhost:8899点击Find Traces即可搜到它们最近1个小时的调用链:     

  随便点一个看看:  

  再点开一个具体的调用链,可以看到里面的调用详细信息:

  点导航菜单中的“Dependencies”可以看到调用关系图:

最新文章

  1. JavaScript中的面向对象
  2. 在Eclipse中导入文件和文件夹
  3. 二维树状数组(水题) POJ1195
  4. 浅谈IT员工管理
  5. Android 之 内存管理-查看内存泄露(三)
  6. [转]让程序在崩溃时体面的退出之Dump文件
  7. 使用Java语言开发微信公众平台(七)——音乐消息的回复
  8. C#中四步轻松使用log4net记录本地日志
  9. 第一个Appium脚本
  10. js中的instanceof运算符
  11. 几种简单的编码(为什么使用ASCII码)
  12. Nagios数据存储插件NDOUtils部署和测试
  13. Winform开发框架之通用Windows摄像头调用拍照--SNF快速开发平台3.3-Spring.Net.Framework
  14. 在SQL Server中使用CLR调用.NET类库中的方法 (转载)
  15. shell函数中eof报错(warning: here-document at line 9 delimited by end-of-file (wanted `EOF&#39;))
  16. pppoe应用概述
  17. uboot启动提示Error, wrong i2c adapter 0 max 0 possible后卡住了怎么办
  18. 面向对象三大特性一一多态(polymorphism)
  19. SpringBoot+SpringSecurity+Thymeleaf认证失败返回错误信息踩坑记录
  20. 配置Linux防火墙

热门文章

  1. charles overvoew
  2. IntentService使用
  3. Java 中抽象类与接口的区别
  4. tomcat启动之后,Chrome浏览器可以访问,IE不行(IE无法访问8080 端口)
  5. C#经纬度加减运算(度&#176;分′秒″格式)
  6. php面向对象之$this-&gt;用法简述
  7. 西门子二次开发--HMI failed to start
  8. vim命令整理
  9. Mysql数据库简单使用(二)
  10. P1197 [JSOI2008]星球大战——链式前向星+并查集