2019独角兽企业重金招聘Python工程师标准>>>

随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构的兴起,看似一个简单的应用,后台可能很多服务在支撑;一个请求可能需要多个服务的调用;当请求迟缓或不可用时,无法得知是哪个微服务引起的,这时就需要解决如何快速定位服务故障点,Zipkin 分布式跟踪系统就能很好的解决这样的问题。
如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,里面有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

那么到底怎么使用呢?接下来完成一个具体的实例来体会一把微服务链路追踪:

本文使用的 Spring Cloud Finchley 版本,和其他版本会有不同

我们使用user-service,order-service 作为两个微服务,zuul-gateway 作为服务网关

zuul-gateway -> order-service -> user-service, 形成服务调用链路,完成一次请求。

注意:Zipkin 不再推荐我们来自定义 Server 端,在最新版本的 Spring Cloud 依赖管理里已经找不到 Zipkin-server 了 ,根本就不需要自己新建一个 Zipkin-server 服务,网上的各种教程都数互相抄的,请无视

一,环境安装

  1. 本人使用 centos 7 ,java-10
  2. 安装 Zipkin:聚合各个业务系统之间的调用延迟数据
  3. 安装 RabbitMQ:系统调用数据传输
  4. 安装 Elasticsearch:系统调用数据持久化
  5. 安装Elasticsearch-head:Elasticsearch 可视化

二,创建微服务

  1. user-service
  2. 以下是pom依赖文件
 
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</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> <!--数据传输--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-rabbit</artifactId> </dependency> 
  1. 新建@RestController 接口 UserOrderController,代码如下:
 
@RestController public class UserOrderController { @Autowired private UserOrderService orderService; @RequestMapping(value = "/getUserOrder", method = RequestMethod.GET) public String getUserOrder() { return orderService.getOrder(); } } 说明:在 user-service 使用 FeignClient 调用 order-service 的 getOrder 服务 
  1. application.yml 配置文件如下:
 
spring:  application:  name: user-service  sleuth:  web:  client:  enabled: true  sampler:  probability: 1.0  zipkin:  base-url: http://192.168.10.100:9411/  enabled: true  sender:  type: RABBIT  rabbitmq:  addresses: 192.168.10.100  port: 15672  username: admin  password: 12345  virtual-host: sleuth  server:  port: 9100 zipkin 参数说明:  probability: 1.0 #将采样比例设置为 1.0,也就是全部都需要。默认是 0.1  base-url: http://192.168.10.100:9411/ #Zipkin 服务器的地址 
  1. order-service
  2. pom依赖文件和user-service相同
  3. 新建@RestController 接口 OrderController,代码如下:
 
@RestController public class OrderController { @Value("${server.port}") private String port;  @RequestMapping(value = "/getOrder", method = RequestMethod.GET) public String getOrder() { return "Success, Order-Service, Port :" + port;  } } 说明:getOrder接口就是给 user-service 调用的 
  1. application.yml 配置文件和user-service相同
  2. zuul-gateway网关
  3. 以下是pom依赖文件
 
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</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> <!--数据传输--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-rabbit</artifactId> </dependency> 
  1. application.yml 配置文件如下:
 
spring:  application:  name: zuul-gateway  sleuth:  web:  client:  enabled: true  sampler:  probability: 1.0  zipkin:  base-url: http://192.168.10.100:9411/  enabled: true  sender:  type: RABBIT  rabbitmq:  addresses: 192.168.10.100  port: 15672  username: admin  password: 12345  virtual-host: sleuth  server:  port: 9310  eureka:  client:  service-url:  defaultZone: http://localhost:8080/eureka/  zuul:  prefix: /v1  routes: # http://localhost:9310/v1/user/ # user Api  user-api:  path: /user/**  serviceId: user-service # order Api  order-api:  path: /order/**  serviceId: order-service 
  1. zipkin配置和user-service相同
  2. zuul 路由配置自己找资料参考啊,这里不做说明
  3. 以上我们微服务全部完成,然后全部启动
  4. 三,启动各系统和组件
  5. 前面说不推荐用户自己创建 Zipkin服务,那怎么把数据传输到 Zipkin服务器呢?就是利用Zipkin的环境变量,通过环境变量让 Zipkin 从 RabbitMQ 中读取信息
  6. 1,启动Zipkin服务,并指定 RabbitMQ做数据传输,Elasticsearch持久化数据,启动命令如下:
 
java -jar zipkin.jar --RABBIT_URI=amqp://admin:12345@localhost:5672/sleuth --STORAGE_TYPE=elasticsearch --ES_HOSTS=http//:localhost:9200 --ES_HTTP_LOGGING=BASIC 
  1. 说明:

--RABBIT_URI=amqp://admin:12345@localhost:5672/sleuth 指定用 RabbitMQ 做数据传输

--STORAGE_TYPE=elasticsearch --ES_HOSTS=http//:localhost:9200 --ES_HTTP_LOGGING=BASIC 指定用 Eelasticsearch 做数据传输

可配置的环境变量,请参考:https://www.rabbitmq.com/uri-spec.html

当然你觉得 搭建Elasticsearch太麻烦了,也可以用MYSQL 生成环境推荐使用 Elasticsearch,或者你只想自己试一下,那你可以不用存储,数据就在内存中。

2,启动RabbitMQ服务 http://192.168.10.100:15672/ 查看启动生个,推荐自己新建个用户,然后登录 查看。

3,启动Elasticsearch服务,http://192.168.10.100:9200/ 查看ES启动,注意Elasticsearch 不能用root用户启动,具体怎么操作请百度教程。

4,启动Elasticsearch-head,http://192.168.10.100:9100/ 可以看到界面,注意 集群健康值,要是未连接就是有问题,自己解决。

5,启动user-service,order-service,zuul-gateway 网关,请求你自己定义的接口,这个有错自己解决

查看RabbitMQ可视化界面,就能看到 数据传输信息。如下图:

查看Zipkin可视化界面,就能看到服务调用链路信息。如下图:

查看Elasticsearch-head可视化界面,就能看到 Elasticsearch 存储的数据信息。如下图:

以上一个完成的分布式服务链路追踪系统完成。

转载于:https://my.oschina.net/u/3990817/blog/2986374

Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsearch相关推荐

  1. SpringCloud版本Hoxton SR5 --- 第八讲:Sleuth 分布式链路跟踪 整合Zipkin + Elasticsearch持久化

    传送门:SpringCloud版本Hoxton SR5 --- 第一讲:认识 先看Sleuth.Zipkin.Elasticsearch 可以完成的功能,或者说他在项目中的定位和作用. Sleuth比 ...

  2. SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现

    SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现 一.概述 分布式链路追踪,是一种用于分析和监控应用程序的方法,尤其是那些使用微服务架构的那些应用.分布式链路跟踪 ...

  3. 跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

    SpringCloud系列教程 | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪 Springboot: 2.1.6.RELEASE SpringCloud: ...

  4. spring cloud分布式整合zipkin的链路跟踪

    为什么使用zipkin? 上篇主要写了:spring cloud分布式日志链路跟踪 从上篇中可以看出服务之间的调用,假设现在有十几台服务,那么在查找日志的时候比较繁琐.复杂,而且在查看调用的时候也会像 ...

  5. 使用zipKin构建NetCore分布式链路跟踪

    本文主要讲解使用ZipKin构建NetCore分布式链路跟踪 场景 因为最近公司业务量增加,而项目也需要增大部署数量,K8S中Pod基本都扩容了一倍,新增了若干物理机,部分物理机网络通信存在问题,导致 ...

  6. 原理 | 分布式链路跟踪组件 SOFATracer 和 Zipkin 模型转换

    SOFA 中间件是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链 ...

  7. 蚂蚁金服分布式链路跟踪组件 SOFATracer 数据上报机制和源码分析 | 剖析

    2019新春支付宝红包技术大揭秘在线峰会将于03-07日开始,点击这里报名届时即可参与大牛互动. SOFA Scalable Open Financial Architecture 是蚂蚁金服自主研发 ...

  8. 11|链路追踪:如何定制一个分布式链路跟踪系统?

    11|链路追踪:如何定制一个分布式链路跟踪系统 ? 你好,我是徐长龙,这节课我们讲一讲如何实现分布式链路跟踪. 分布式链路跟踪服务属于写多读少的服务,是我们线上排查问题的重要支撑.我经历过的一个系统, ...

  9. 蚂蚁金服分布式链路跟踪组件 SOFATracer 总览 | 剖析 1

    2019新春支付宝红包技术大揭秘在线峰会将于03-07日开始,点击这里报名届时即可参与大牛互动. SOFA Scalable Open Financial Architecture 是蚂蚁金服自主研发 ...

最新文章

  1. RocketMQ读书笔记7——吞吐量优先的场景
  2. 信息存储 整数表示 原码 反码 补码 无符号数 有符号数 转换 扩展 截断
  3. 同期及上期数据对比处理示例.sql
  4. Spring Validation 校验
  5. 又掌握了一项新技能 - 断点调试 Gradle 插件
  6. 【算法笔记】重刷PAT 题解合集
  7. 存储分类分析:DAS、NAS、SAN[转]
  8. Problem I: 函数---判断某年某月某日是这一年中的第几天
  9. Octave 作图 无响应
  10. hashmap允许null键和值吗_【29期】Java集合框架 10 连问,你有被问过吗?
  11. 系统视频教学视频教程_Amesim综合液压系统视频教程专题更新通知
  12. Ubuntu安装Adobe Reader
  13. matlab用Java绘图_Java中使用MATLAB作图
  14. 百度地图集成骑行导航和驾车导航
  15. 充分利用居室空间 让阳台尽显万种风情
  16. “太上,不知有之;其次,亲而誉之;其次,畏之;其次,侮之。”
  17. 微信小程序getWXACodeUnlimit接口调用和返回二进制流转换成图片保存到本地
  18. VsCode 跳转到函数之后怎么跳转回之前的位置 VSCode 返回上一个光标 (上一个浏览位置)
  19. Ubuntu18.04双系统配置记录
  20. 基于Centos7安装Docker1.19

热门文章

  1. Java匹马行天下之学编程的起点——走进编程的殿堂
  2. Ubuntu 12.04 中文输入法的安装
  3. 使用pygal.maps.world库读取JSON格式文件,显示世界人口地图图示
  4. java中的BigInteger
  5. [转] python提取计算结果的最大最小值及其坐标
  6. python画决策树
  7. centos下不重装php——给PHP添加新扩展库
  8. NOIP2010-普及组初赛C语言解析
  9. Android APK反编译详解(转)
  10. 移动的宽带真的很垃圾