微服务架构 | 10.3 使用 Zipkin 可视化日志追踪
前言
参考资料:
《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 包
- 访问官网下载 Zipkin 的 Web UI:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
2.2 启动 Zipkin Server
- 使用命令启动 Zipkin Server:
java -jar zipkin-server-2.12.9-exec.jar;

- 默认端口为:9411;
- 访问 Zipkin Server 的管理后台:http://localhost:9411;
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 界面可以查询一些基本的信息:


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


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

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

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

微服务架构 | 10.3 使用 Zipkin 可视化日志追踪的更多相关文章
- 微服务架构 | 10.2 使用 Papertrail 实现日志聚合
目录 前言 1. Papertrail 基础知识 1.1 Papertrail 特点 1.2 Papertrail 是什么 2. 使用 Papertrail 进行日志聚合的示例 2.1 创建 Pape ...
- .NET Core微服务之基于Steeltoe使用Zipkin实现分布式追踪
Tip: 此篇已加入.NET Core微服务基础系列文章索引 => Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...
- 微服务架构之spring cloud zipkin
Spring Cloud Zipkin是微服务的链路跟踪组件,帮助详细了解一次request&response的总计时,及每个微服务的消耗时间.微服务名称.异常信息等等过程信息. (一) 版本 ...
- 微服务架构 | 10.1 使用 Sleuth 追踪服务调用链
目录 前言 1. Sleuth 基础知识 1.1 Sleuth 原理 2. 在服务中使用 Sleuth 追踪 2.1 引入 pom.xml 依赖文件 2.2 查看日志信息 最后 前言 参考资料: &l ...
- 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍
微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍 一.为什么会有 API Gateway 网关 随着微服务架构的流行,很多公司把原有的单 ...
- 《Spring Cloud与Docker微服务架构实战》配套代码
不才写了本使用Spring Cloud玩转微服务架构的书,书名是<Spring Cloud与Docker微服务架构实战> - 周立,已于2017-01-12交稿.不少朋友想先看看源码,现将 ...
- Spring Cloud与Docker微服务架构实战 PDF
电子版百度云下载 链接: https://pan.baidu.com/s/115u011CJ8MZzJx_NqutyTQ 提取码: 关注公众号[GitHubCN]回复2019获取 本书的代码 共计70 ...
- 【Spring Cloud】微服务架构选型方案
1.技术架构 2.组件介绍 1.服务注册与发现——Eureka 服务注册与发现中心采用Eureka,以AP为核心的高可用注册中心,保证高可用性和最终一致性,server之间互相注册的replicate ...
- Spring Cloud与Docker微服务架构实战 PDF版 内含目录
Spring Cloud与Docker微服务架构实战 目录 1 微服务架构概述 1 1.1 单体应用架构存在的问题1 1.2 如何解决单体应用架构存在的问题3 1.3 什么是微服务3 1.4 微服务 ...
随机推荐
- Anti-prime Sequences
Anti-prime Sequences Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 3355 Accepted: 1 ...
- 设计模式学习——JAVA动态代理原理分析
一.JDK动态代理执行过程 上一篇我们讲了JDK动态代理的简单使用,今天我们就来研究一下它的原理. 首先我们回忆下上一篇的代码: public class Main { public static v ...
- 如何把 MySQL 备份验证性能提升 10 倍
JuiceFS 非常适合用来做 MySQL 物理备份,具体使用参考我们的官方文档.最近有个客户在测试时反馈,备份验证的数据准备(xtrabackup --prepare)过程非常慢.我们借助 Juic ...
- LTD: Low Temperature Distillation for Robust Adversarial Training
目录 概 主要内容 Chen E. and Lee C. LTD: Low temperature distillation for robust adversarial training. arXi ...
- pycharm遇到的小问题
1. Pycharm编写的代码出现满屏的波浪线,如何去除>>>点击右下角的小人图标将箭头移到中间syntax处即可. 2. 运行时报错: UserWarning: No parser ...
- CapstoneCS5210|HDMI转VGA音视频转接线|CS5210转换器方案芯片
Capstone最新推出的一款HDMI转VGA音视频转接线或者转换器方案芯片CS5210. 其设计的优势在于内置晶振,外围电路器件较少设计简单,芯片封装集成度较高,方案BOM成本低,相比其他方案产品更 ...
- 4.1.4 统计“锦途网”旅游线路平均价格,并采用尽可能多的方式将该价格赋给用户会话变量 @avg_short_price,并输出该变量
查看本章节 查看作业目录 需求说明: 统计"锦途网"旅游线路平均价格,并采用尽可能多的方式将该价格赋给用户会话变量 @avg_short_price,并输出该变量 在 MySQL ...
- Spring Boot程序接收命令行参数
Spring Boot程序接收命令行参数 输入一行,回车,触发一次.如果想要调用service层,也是可以,能调用service层,就可以做很多事,触发一次就好比调用了一次http接口一样 packa ...
- Ubuntu16.04下,erlang安装和rabbitmq安装步骤
文章来源: Ubuntu16.04下,erlang安装和rabbitmq安装步骤 准备工作,先下载erlang和rabbitmq的安装包,注意他们的版本,版本不对可能会导致rabbitmq无法启动,这 ...
- Hadoop编译打包记录
Hadoop编译打包,基于2.7.2版本的源码. # 打包过程中需要使用到的工具 java -version mvn -version ant -version type protoc type cm ...