SpringCloud Sleuth+Zipkin
sleuth+zipkin用来实现分布式系统的链路追踪。
sleuth组件用于日志埋点、记录链路数据,zipkin组件用于展示链路数据。
sleuth的使用
(1)创建消费者、提供者时勾选spring cloud tracing -> sleuth
也可以手动添加依赖:
<dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-sleuth</artifactid> </dependency>
(2)在消费者、提供者处理业务的类中添加成员变量
//使用的是slf4j的日志,不要导错了
private final logger logger = loggerfactory.getlogger(this.getclass());
在处理业务的方法中(消费者调用提供者、提供者处理业务的方法中),输出日志
logger.info("正在执行user-service的findordersbyuserid方法,调用服务order-service");
内容根据需要修改。
sleuth输出的日志往往是空的,只输出服务名:[order-service,,,]
第(2)步是为了解决此问题,使sleuth输出的日志有内容。
[order-service,cd99e95b12d13310,b6e08d7f788441bf,false]
- 第一个是spring.application.name,服务名
- 第二个是sleuth生成的trace id,唯一标识一条请求链路
- 第三个是sleuth生成的span id,span id是链路的基本单元,标识一个http请求的元数据,比如一个服务调用产生的http请求。1条链路中包含1个trace id、多个span id。
- 第四个表示是否会将该信息传输到zipkin服务中收集、展示,配置了zipkin就是true,没配置就是false
zipkin的使用
zipkin是大规模分布式系统的一个apm工具(application performance management),基于google dapper实现,搭配sleuth可以实现可视化的链路调用分析。
apm工具常用的还有eagleeye 鹰眼、cat。
zipkin组成:collector、storage、restful api、web ui组成。
(1)搭建zipkin服务器
提供的方式下载速度都很慢,不推荐
到下面的地址直接下载编译打包好的jar,下载的是最新版的zipkin:
https://search.maven.org/remote_content?g=io.zipkin&a=zipkin-server&v=latest&c=exec
zipkin是springboot项目,运行jar需要jdk环境,如果没有配置jdk环境的需要先配置jdk环境。
双击jar运行(在linux上可以使用java -jar命令来运行),浏览器地址栏输入 127.0.0.1:9411 进入zipkin页面,ip是zipkin所在机器的ip,zipkin默认使用的端口时9411。
(2)创建消费者、生产者时勾选spring cloud tracing -> zipkin client
也可以手动加依赖:
<dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-zipkin</artifactid> </dependency>
(3)在消费者、提供者中添加配置
spring: application: #服务名称 name: order-service zipkin: #zipkin服务器的地址,sleuth会将链路数据传输到zipkin服务器,默认是localhost:9411 base-url: 192.168.1.9:9411 sleuth: sampler: #采样率,0-1上的小数,比如0.5是将sleuth 50%的链路的数据传输给zipkin probability: 1.0
采样率以前我搞的时候默认是0.1,现在的默认值似乎好像是1.0(不确定),开发的时候可以设置大些,上线的时候设置小些,
因为采样太多很占网络带宽,而且zipkin把采样的链路数据直接存储在内存中(定时清理),采样率太高zipkin服务器会很占机器内存。
启动应用,调用服务,在zipkin页面可看到链路各部分的耗时情况,优化耗时多的部分,比如加多线程、异步、缓存。
上一篇: 美团面试绝命7问答案以及解析Object 0 = new Object();
下一篇: 【JAVA】用Comparable接口学生的成绩做降序排序!请正确指定泛型;用Comparator实现按照姓名排序,请正确指定泛型!
推荐阅读
-
SpringCloud Hoxton版微服务-入门篇
-
springcloud整合gateway实现网关的示例代码
-
实战SpringCloud响应式微服务系列教程(第九章)使用Spring WebFlux构建响应式RESTful服务
-
SpringCloud面试 -- 什么是Hystrix?
-
SpringCloud-org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input
-
SpringCloud Zuul基于Consul配置及详解
-
F版本SpringCloud1—大白话为啥要有微服务?啥是微服务?SpringCloud为什么有那么多组件?
-
微服务技术系列教程(41)- SpringCloud -OAuth2搭建微服务开放平台
-
springcloud使用之断路器hystrix
-
SpringCloud-微服务配置统一管理SpringCloud Config(七)