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

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

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

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

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

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

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

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

一,环境安装

本人使用 centos 7 ,java-10

安装 Zipkin:聚合各个业务系统之间的调用延迟数据
安装 RabbitMQ:系统调用数据传输
安装 Elasticsearch:系统调用数据持久化
安装Elasticsearch-head:Elasticsearch 可视化
二,创建微服务

user-service

以下是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>
新建@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 服务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: #Zipkin 服务器的地址

order-service

pom依赖文件和user-service相同
新建@RestController 接口 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 调用的
application.yml 配置文件和user-service相同
zuul-gateway网关
以下是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

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:

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 做数据传输

可配置的环境变量,请参考:

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

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

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

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

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

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

Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsear

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

Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsear

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

Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsear

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

转载于:https://blog.51cto.com/13954634/2328530

你可能感兴趣的文章
浅谈 SpringBoot 注解大全
查看>>
技术沙龙|区块链商用落地的策略与技术坑-区块链扩展和Fabric商用(杭州)
查看>>
Nginx自学手册(四)反向代理和缓存
查看>>
我的友情链接
查看>>
c3p0详细配置
查看>>
Cocos2d-x 3.1 Director ActionManger Scheduler初步分析
查看>>
记一次项目实施中的时间把控
查看>>
Java代码动态修改 ConstraintLayout 内控件布局的辅助类
查看>>
cisco+H3C交换机SSH配置实例
查看>>
lucene当中的各种query(三)
查看>>
互联网产品经理常用工具有哪些
查看>>
jdk 与jre的区别
查看>>
日志审计系统的全部不见得都是审计
查看>>
嵌入式开发之C基础学习笔记05--模块化设计和函数的使用
查看>>
我的友情链接
查看>>
scrapy_novel_python
查看>>
C++语言学习(十三)——C++对象模型分析
查看>>
java读写文件大全
查看>>
vue2.0自学教程(一):走进vue2.0大观园
查看>>
JNDI学习总结(1)——JNDI入门简介
查看>>