SpringCloud系列十二:SpringCloudSleuth(SpringCloudSleuth 简介、SpringCloudSleuth 基本配置、数据采集)...
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅。
1、概念:SpringCloudSleuth
2、具体内容
Sleuth 是一种提供的跟踪服务,也就是说利用 sleuth 技术可以实现完整的微服务的访问路径的跟踪操作。
2.1、SpringCloudSleuth 简介
微服务可以将整个的系统拆分为无数个子系统,于是这样一来就有可能出现几种可怕的场景:
· 代码的调试:
|- 你的系统有可能变慢了,于是这个时候就需要去追踪每一个微服务的执行的速度;
|- 如果现在你的微服务采用了串联的方式进行了互相调用,那么如何确认某一个微服务出现了问题呢?
· 微服务混合调用:
|- 现在微服务变为了环形调用,那么这些关系该如何描述出来?
在创建微服务的时候一定要有一些合适的开发契约,所有的开发者以及服务的调用者要按照统一的方式进行程序的调用处理, 这样才可以成为一个优秀的微服务设计。
所以在 SpringCloud 之中提供的 Sleuth 技术就可以实现微服务的调用跟踪,也就是说它可以自动的形成一个调用连接线,通过这个连接线使得开发者可以轻松的找到所有微服务间关系,同时也可以获取微服务所耗费的时间, 这样就可以进行微服务调用状态的监控以及相应的数据分析。
Span 里面包含有如下内容:
· cs-Client Sent:客户端发出一个请求,描述的是一个 Span 开始;
· sr-Server Received:服务端接收请求,利用 sr-cs 就属于发送的网络延迟;
· ss-Server Sent:服务端发送请求(回应处理),ss-sr 就属于服务端的消耗时间;
· cr-Client Received:客户端接收到服务端数据,cr-ss 就表示回复所需要的时间。
2.2、SpringCloudSleuth 基本配置
SpringCloudSleuth 使用的核心组件在于 Twitter 推出的 zipkin 监控组件,所以本次的配置的模块一定要包含 zipkin 相关配置依赖,本次实现一个基础的调用逻辑:consumer-zuul-dept。
1、 【microcloud-sleuth-8601】通过“microcloud-provider-company-8101”项目复制得来;
2、 【microcloud-sleuth-8601】修改 pom.xml 配置文件:
· 由于 sleuth 的应用比较复杂,而且也牵扯到埋点的数据分析,本次不使用安全处理模块:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency><dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-server</artifactId></dependency><dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-autoconfigure-ui</artifactId></dependency>
3、 【microcloud-sleuth-8601】修改 application.yml 配置文件:
server:port: 8601 spring: application:name: microcloud-zipkin-server
4、 【microcloud-sleuth-8601】修改程序启动类:
package cn.study.microcloud;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import zipkin.server.EnableZipkinServer; @SpringBootApplication @EnableCircuitBreaker @EnableZipkinServer public class Zipkin_8601_StartSpringCloudApplication {public static void main(String[] args) {SpringApplication.run(Zipkin_8601_StartSpringCloudApplication.class, args);} }
5、 修改 hosts 配置文件,追加一个新的主机名称映射:
127.0.0.1 zipkin.com
6、 【microcloud-consumer-feign、microcloud-zuul-gateway-9501、microcloud-provider-dept-8001】修改 pom.xml 配置文件,追加 zipkin 相关依赖程序包:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency>
7、 【microcloud-consumer-feign、microcloud-zuul-gateway-9501、microcloud-provider-dept-8001】修改 application.yml 配置文件:
spring:zipkin:base-url: http://zipkin.com:8601 # 所有的数据提交到此服务之中sleuth:sampler:percentage: 1.0 # 定义抽样比率,默认为0.1 application:name: microcloud-consumer-feign
一定要有每一个微服务的名字,这样会比较好观察程序的执行轨迹。
8、 依次启动所有的服务:microcloud-sleuth-8601、microcloud-consumer-feign、microcloud-zuul-gateway-9501、microcloud-provider-dept-8001;
输入访问地址:http://zipkin.com:8601;就可以看到各个微服务之间的调用关系了
2.3、数据采集
现在已经成功的实现了一个 SpringCloudSleuth 基础操作,但是需要考虑一个实际的问题,现在所有的统计的汇总操作都是记录在内存之中的,也就是说如果你现在已经关闭了 zipkin 服务端,那么这些统计信息就将消失,很明显这样的做法并不符合实际要求,数据应该被记录下来,而且有可能你很多的微服务要发送大量的数据信息进入,为了解决这种高并发的问题,可以结合消息组件(Stream)进行缓存处理,而且本次为了方便可以将统计的结果保存在数据库之中(mysql)。
1、 需要创建数据库脚本,脚本是从官网拷贝下来的直接复制使用即可:
DROP DATABASE IF EXISTS zipkin ; CREATE DATABASE zipkin CHARACTER SET UTF8 ; USE zipkin ; CREATE TABLE IF NOT EXISTS zipkin_spans (`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',`trace_id` BIGINT NOT NULL,`id` BIGINT NOT NULL,`name` VARCHAR(255) NOT NULL,`parent_id` BIGINT,`debug` BIT(1),`start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',`duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query' ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`); ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`); ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`); ALTER TABLE zipkin_spans ADD INDEX(`name`); ALTER TABLE zipkin_spans ADD INDEX(`start_ts`); CREATE TABLE IF NOT EXISTS zipkin_annotations (`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',`trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',`span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',`a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',`a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',`a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',`a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',`endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',`endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',`endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',`endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null' ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`); ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) ; ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`); ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`); ALTER TABLE zipkin_annotations ADD INDEX(`a_type`); ALTER TABLE zipkin_annotations ADD INDEX(`a_key`); CREATE TABLE IF NOT EXISTS zipkin_dependencies (`day` DATE NOT NULL,`parent` VARCHAR(255) NOT NULL,`child` VARCHAR(255) NOT NULL,`call_count` BIGINT ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci; ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);
2、 【microcloud-sleuth-8601】修改 pom.xml 配置文件,追加相关的依赖程序包:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sleuth-zipkin-stream</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-rabbit</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency> <!-- <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency> -->
3、 【microcloud-sleuth-8601】修改 application.yml 配置文件:
server:port: 8601 spring: rabbitmq:host: rabbitmq-serverport: 5672username: studyjavapassword: hellovirtual-host: /datasource:driver-class-name: org.gjt.mm.mysql.Driver # 配置MySQL的驱动程序类url: jdbc:mysql://localhost:3306/zipkin # 数据库连接地址username: root # 数据库用户名password: mysqladmin # 数据库连接密码initialize: true application:name: microcloud-zipkin-server zipkin:storage: # 设置zipkin收集的信息通过mysql进行存储type: mysql
4、 【microcloud-sleuth-8601】可以打开安全配置项:
<dependency><groupId>cn.study</groupId><artifactId>microcloud-security</artifactId></dependency>
5、 【microcloud-consumer-feign、microcloud-zuul-gateway-9501、microcloud-provider-dept-8001】修改 pom.xml 配置文件:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sleuth-zipkin-stream</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-rabbit</artifactId></dependency> <!-- <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency> -->
6、 【microcloud-consumer-feign、microcloud-zuul-gateway-9501、microcloud-provider-dept-8001】修改 application.yml 配置文件:
spring: rabbitmq:host: rabbitmq-serverport: 5672username: studyjavapassword: hellovirtual-host: /
同时删除掉已有的 zipkin.base-url 的配置项。
7、 【microcloud-sleuth-8601】修改启动程序类的使用注解:
package cn.study.microcloud;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamServer;import zipkin.server.EnableZipkinServer; @SpringBootApplication @EnableCircuitBreaker @EnableZipkinStreamServer public class Zipkin_8601_StartSpringCloudApplication {public static void main(String[] args) {SpringApplication.run(Zipkin_8601_StartSpringCloudApplication.class, args);} }
8、 此时依次启动各个微服务之后所有的信息都将被记录到 MySQL 数据库之中,这样即使当前的 zipkin 服务关闭了,那么也可以进行信息的持久化存储,下次启动之后依然可以读取到执行顺序。
SpringCloud系列十二:SpringCloudSleuth(SpringCloudSleuth 简介、SpringCloudSleuth 基本配置、数据采集)...相关推荐
- Alamofire源码解读系列(十二)之请求(Request)
本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...
- kotlin杂谈系列十二(Kotlin和Java的互操作)
Kotlin杂谈系列十二 这次就主要来谈谈kotlin和java互操作的问题 kotlin出来的使命就是为了解决java的模板问题和一些冗长的问题所以kotlin天生就很好的支持了java 所以我们在 ...
- Reflex WMS入门系列十二:Reflex里的Location
Reflex WMS入门系列十二:Reflex里的Location 玩过SAP系统里的人都知道,在SAP系统里库存管理分为IM Level和WM Level.IM Level的仓库,在SAP里被定义为 ...
- Highcharts翻译系列十二:gauge测量图
Highcharts翻译系列十二:gauge测量图 说明 测量图需要highcharts-more.js的支持 属性 参数 描述 默认值 animation 动画 true color 主要颜色或序列 ...
- xen是服务器虚拟化,xen虚拟化实战系列(十二)之xen虚拟机高可用之在线迁移
xen虚拟化实战系列文章列表 xen虚拟化实战系列(十三)之xen虚拟机集中管理之convirt 1. 方案背景概述 本文是有对我们一个xen虚拟化生产环境将要改造的一个方案而来,在项目上线初期,没有 ...
- Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】
2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...
- 虚拟机dhcp服务器怎么检验,实验十二虚拟机上DHCP服务器的配置和验证.doc
实验十二 虚拟机上DHCP服务器的配置与验证 一.实验目的 了解DHCP的基本概念和服务器的新特性 掌握DHCP服务器的安装与配置 掌握DHCP的运行方式 掌握DHCP客户机的设置 掌握ipconfi ...
- 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探
SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...
- Start Developing iOS Apps Today系列(十二)
2019独角兽企业重金招聘Python工程师标准>>> Start Developing iOS Apps Today系列之后续 十二.iOS 技术 之前您已了解了如何编写一个具有简 ...
最新文章
- mysql社区版与cluster 区别_MySQL版本Enterprise/Community/Cluster等版本的区别
- [19/04/11-星期四] 多线程_并发协作(生产者/消费者模式_2种解决方案(管程法和信号灯法))...
- 史上比较用心的纯代码实现 AutoLayout
- redis报错:jedis connection exception unexpected end of stream
- kafka中处理超大消息的一些考虑
- linux是否有安装java_Linux 安装 Java
- Linux中的重定向
- 图片涂改了怎么给复原_图片马赛克怎么去掉 怎么去除马赛克方法介绍
- studio one 3 机架声道设置_雅马哈UR242声卡宿主机架直播跳线设置
- 3dmax导出fbx事项注意
- 特殊域名后缀如何申请备案?
- 台式计算机如何安装摄像头,台式机怎样安装摄像头
- 如何手动启动消防广播_消防应急广播的设置要求是怎样的?
- Linux软件安装管理的三种方式——源码安装/deb/rpm/yum/apt
- ASBR上配置外部OSPF路由汇总
- 如何像「西瓜足迹」一样,将用户导流到公众号上变现?
- 最小生成树 算法思想及模板代码
- EDG的夺冠之路充满荆棘,电子竞技又何尝不是?
- 使用OpenCV实现偏斜文档校正
- 喜闻乐见的「手算题」技巧3:巧用 Python
热门文章
- Ubuntu Linux root password - default password
- 2021年最后几天,使用SSM实现网上购物商城系统
- MySQL数据库--连接
- hexo d 部署博客时出错
- 谷歌浏览器插件,当前网页地址的二维码
- 计算MySQL的内存峰值公式
- DDD:用 “四色原型” 进行 “聚合设计”
- mysql导出excel命令,在命令行导出MySQL数据到excel表
- mysql 添加int列_在MySQL中现有的int列的值中添加字符?
- java线程 kill linux_linux查看进程和线程的命令