博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsearch【Finchley 版】
阅读量:6679 次
发布时间:2019-06-25

本文共 6686 字,大约阅读时间需要 22 分钟。

随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构的兴起,看似一个简单的应用,后台可能很多服务在支撑;一个请求可能需要多个服务的调用;当请求迟缓或不可用时,无法得知是哪个微服务引起的,这时就需要解决如何快速定位服务故障点,Zipkin 分布式跟踪系统就能很好的解决这样的问题。

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

本文使用的 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依赖文件
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-openfeign
org.springframework.cloud
spring-cloud-starter-sleuth
org.springframework.cloud
spring-cloud-starter-zipkin
org.springframework.cloud
spring-cloud-stream-binder-rabbit
  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网关
    1. 以下是pom依赖文件
    org.springframework.cloud
    spring-cloud-starter-netflix-zuul
    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client
    org.springframework.cloud
    spring-cloud-starter-sleuth
    org.springframework.cloud
    spring-cloud-starter-zipkin
    org.springframework.cloud
    spring-cloud-stream-binder-rabbit
    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

    zipkin配置和user-service相同

    zuul 路由配置自己找资料参考啊,这里不做说明

    以上我们微服务全部完成,然后全部启动

    三,启动各系统和组件

    前面说不推荐用户自己创建 Zipkin服务,那怎么把数据传输到 Zipkin服务器呢?就是利用Zipkin的环境变量,通过环境变量让 Zipkin 从 RabbitMQ 中读取信息

    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

    说明:

--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-serviceorder-service,zuul-gateway 网关,请求你自己定义的接口,这个有错自己解决

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

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

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

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

 

详细代码:

参考:

转载于:https://www.cnblogs.com/gscq073240/articles/9758111.html

你可能感兴趣的文章
RelativeLayout(相对布局)
查看>>
2017年数据库漏洞安全威胁报告(附完整版下载)
查看>>
css案例学习之div ul li a 实现导航效果
查看>>
docker~save与load的使用
查看>>
[LeetCode] Binary Watch 二进制表
查看>>
Scala基础入门-3
查看>>
Chapter 2. mail user agent (MUA)
查看>>
Codeforces 706B Interesting drink
查看>>
html中target的用法
查看>>
Java 锁机制 synchronized
查看>>
iOS - Mac OS X 常用快捷键
查看>>
Jmeter教程索引贴
查看>>
Andoird Crash的跟踪方法,使用腾讯Bugly来捕捉一些疑难杂症,让我们APP稳定上线...
查看>>
五更转曲(转载)
查看>>
PowerDesigner使用教程
查看>>
ACE admin 后台管理框架
查看>>
Python模块探秘之smtplib,实现纯文本邮件的发送
查看>>
易语言入门之一 简介
查看>>
(转)神经网络和深度学习简史(第一部分):从感知机到BP算法
查看>>
scrapy 的 selector 练习
查看>>