前言

参考资料

《Spring Microservices in Action》

《Spring Cloud Alibaba 微服务原理与实战》

《B站 尚硅谷 SpringCloud 框架开发教程 周阳》

Zipkin 允许开发人员以图形方式查看事务占用的时间量,并分解在调用中涉及的每个微服务所用的时间。在微服务架构中,Zipkin 是识别性能问题的宝贵工具;


1. Zipkin 基础知识

1.1 Zipkin 链路监控的原理

  • 上图表示一请求链路,一条链路通过 Trace Id 唯一标识,Span 标识发起的请求信息,各 Span 通过 Parent id 关联起来;
  • Span 表示调用链路来源,通俗的理解 Span 就是一次请求信息;
  • 简略理解图如下:



2. 下载 Zipkin 服务器

Spring Cloud 从 F 版起不需要自己构建 Zipkin Server 了,只需调用 jar 包即可;

2.1 下载 zipkin-server-2.12.9-exec.jar 包

2.2 启动 Zipkin Server

  • 使用命令启动 Zipkin Server:java -jar zipkin-server-2.12.9-exec.jar

2.3 *Docker 部署方式

也可以使用 Docker 部署省去下载的麻烦;

  • docker run -d -p 9411:9411 openzipkin/zipkin

3. 手动安装和配置 Zipkin 服务器

虽然 Spring Cloud 从 F 版起不需要自己构建 Zipkin Server,但这里还是提供手动构建的方法;

3.1 引入 pom.xml 依赖文件

<!-- 用于创建 Zipkin 服务器所需的核心类 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
<!-- 用于运行 Zipkin 服务器的 UI 部分所需的核心类 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>

3.2 在主程序类上添加注解

  • @EnableZipkinServer:创建相对简单。缺点是 Zipkin 服务器不可用时数据会丢失;

    • 注意:该注解不是 Spring Cloud 提供的,是 Zipkin 提供的;
  • @EnableZipkinStreamServer:需要创建和配置正在跟踪的服务以发布消息到 RabbitMQ 或 Kafka。优点是即使 Zipkin 服务器不可用,也可以继续收集跟踪数据,直到 Zipkin 服务器可用于处理消息记录;
    • 该注解是 Spring Cloud 提供的;

3.3 配置跟踪数据存储方式

  • Zipkin 支持四种不同的后端数据存储,如下:

    • 内存数据;
    • MySQL;
    • Cassandra;
    • Elasticsearch;
  • 默认情况下 Zipkin 使用内存数据来存储跟踪数据,可以进行配置到其他存储方式;

4. 使用 Zipkin 进行分布式跟踪

4.1 添加 pom.xml 依赖文件

需要给 Zuul 网关服务、消费者服务、提供者服务等所有服务添加依赖;

<!-- 包含在服务中启用 sleuth 的基本库 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency> <!-- 【可选】当开发人员需要以编程方式与 sleuth 交互时添加 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-core</artifactId>
</dependency> <!-- 与 Zipkin 集成 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>

4.2 修改 application.yml 配置文件

在每个想与 Zipkin 进行通信的服务的 application.yml 配置文件中进行修改;

spring:
zipkin:
baseUrl: http://localhost:9411 #Zipkin 服务器的地址
sleuth:
sampler:
percentage: 1 #设置跟踪级别,也即定义每个服务应该向 Zipkin 写入数据的频率,默认 10%
  • spring.sleuth.sampler.percentage = 0 表示不发送任何事物数据;
  • 上述 spring.sleuth.sampler.percentage = 1 属性也可用下面的代码替代。表示为所有服务发送跟踪信息;
@Bean
public Sampler defaultSampler() {
return new AlwaysSampler();
}

4.3 访问 9411 端口查看可视化日志

  • 先调用服务 API;
  • 再进入:http://localhost:9411
  • 即可查看 Zipkin 的日志捕获跟踪结果;
  • Zipkin 界面可以查询一些基本的信息:



  • 点击事务后可以查看更详细的信息:



  • 点击组织服务跨度,可以查看调用中的额外细节:

  • 点击依赖,可以查看依赖关系:


最后

新人制作,如有错误,欢迎指出,感激不尽!
欢迎关注公众号,会分享一些更日常的东西!
如需转载,请标注出处!

最新文章

  1. (翻译)编写属于你的jQuery插件
  2. [No000059]知道这些,你的时间会比别人多一大截
  3. grep如何忽略.svn目录,以及如何忽略多个目录
  4. POJ 1740 A New Stone Game
  5. django分页工具
  6. ASP.NET 资料下载
  7. PHP之CI框架架设错误--Only variable references should be returned by reference
  8. Android SQLite系列
  9. 一个经典的PHP验证码类分享
  10. Linux之特殊权限(SUID/SGID/SBIT)
  11. Linux恢复误删除的文件或者目录(转)
  12. NOIP2018游记(划掉) 滚粗记
  13. windows 10系统 上安装scrapy
  14. 2017.11.10 重读C++ Primer
  15. linux进程虚拟地址空间
  16. 一个Web页面的问题分析
  17. python之随机验证码
  18. Problem C Dist 解题报告
  19. Javascript Get or Set Checked Radio Value
  20. 原生js--键盘事件

热门文章

  1. fork之后,子进程从父进程那继承了什么(转载)
  2. Eclipse控制台Console使用说明
  3. Ranger-Solr审计日志安装
  4. Oracle打怪升级之路一【Oracle基础、Oracle查询】
  5. 自动化集成:Kubernetes容器引擎详解
  6. Python_类型转换
  7. Selenium_界面的刷新、后退、前进操作(4)
  8. js箭头函数 的 (e) =&gt; { } 写法笔记
  9. Spark案例练习-打包提交
  10. win10中查看开关机时间及查看admin的RID的方法