springcloud分布式链路跟踪sleuth+zipkin+elasticsear

     2022-04-21     416

关键词:

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

org.springframework.cloud spring-cloud-starter-sleuth org.springframework.cloud spring-cloud-starter-zipkin org.springframework.cloud spring-cloud-stream-binder-rabbit 新建@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: http://192.168.10.100:9411/ #Zipkin 服务器的地址 order-service pom依赖文件和user-service相同 新建@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 调用的 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: ``` # 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:[email protected]:5672/sleuth --STORAGE_TYPE=elasticsearch --ES_HOSTS=http//:localhost:9200 --ES_HTTP_LOGGING=BASIC 说明: --RABBIT_URI=amqp://admin:[email protected]: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可视化界面,就能看到 数据传输信息。如下图: ![](http://i2.51cto.com/images/blog/201812/10/11efc7e6219f99476dd94b85590309d3.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 查看Zipkin可视化界面,就能看到服务调用链路信息。如下图: ![](http://i2.51cto.com/images/blog/201812/10/bbb6aacfa69b7a051f625fc382828027.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 查看Elasticsearch-head可视化界面,就能看到 Elasticsearch 存储的数据信息。如下图: ![](http://i2.51cto.com/images/blog/201812/10/98b12c8114c8d9cc165d873f7b8ef62d.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 以上一个完成的分布式服务链路追踪系统完成。

springcloud分布式链路跟踪sleuth+zipkin+elasticsear

...一个具体的实例来体会一把微服务链路追踪:本文使用的SpringCloudFinch 查看详情

springcloud微服务分布式链路跟踪sleuth与zipkin

Zipkin是一个开放源代码分布式的跟踪系统,由Twitter公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。它的理论模型来自于GoogleDapper论文。每个微服务向Zipkin报告... 查看详情

springcloud-springcloud之sleuth分布式链路跟踪;zipkin埋点数据;elasticsearch数据持久化(十八)(代码片段)

阅读本文前可先参考​​​​​​SpringCloud-SpringCloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客一、SpringCloudSleuth微服务有几种监控方式,如SpringBootActuator监控微服务,SpringBootAdmin监控微服务,Hy... 查看详情

sleuth+zipkin实现springcloud链路追踪(代码片段)

文章目录一、前言二、应用架构图三、快速了解Sleuth四、准备工作1、搭建Zipkin单机环境2、搭建naocos单机环境五、微服务整合Sleuth1、创建SpringBoot工程2、配置文件3、实现核心代码六、集成Zipkin1、引入客户端2、配置文件3、运行效... 查看详情

springcloud消息驱动(stream)和分布式链路跟踪(sleuth)(代码片段)

Stream和Sleuth🔺SpringCloudStream消息驱动一、消息驱动概述(1)是什么(2)设计思想①标准MQ②为什么用CloudStream③Stream中的消息通讯方式遵循了发布-订阅模式(3)SpringcloudStream标准流程套路(4)编码API和常用注解二、案例说明三、消息驱... 查看详情

springcloud整合分布式链路追踪系统sleuth和zipkin实战,分析系统瓶颈

...哪里出问题了,巴拉巴拉....,回归正题,今天我们使用SpringCloud组件,来分析一下微服务架构中系统调用的瓶颈问题~SpringCloud链路追踪组件Sleuth实战官网  主要功能:做日志埋点什么是Sleuth  专门用于追踪每个请求的完整调... 查看详情

springcloud--sleuth日志跟踪(十四)

参考技术A  SpringCloudSleuth[sluːθ]是SpringCloud提供的分布式系统服务链追踪组件,它大量借用了Google的Dapper,Twitter的Zipkin。场景:疑问:  在微服务中,通常根据业务模块分服务,项目中前端发起一个请求,后... 查看详情

第七章分布式链路跟踪(sleuth)

当我们进行微服务架构开发时,通常会根据业务来划分微服务,各业务之间通过REST进行调用。一个用户操作,可能需要很多微服务的协同才能完成,如果在业务调用链路上任何一个微服务出现问题或者网络超时,都会导致功能... 查看详情

sleuth+zipkin实现springcloud链路追踪(代码片段)

文章目录一、前言二、应用架构图三、快速了解Sleuth四、准备工作1、搭建Zipkin单机环境2、搭建naocos单机环境五、微服务整合Sleuth1、创建SpringBoot工程2、配置文件3、实现核心代码六、集成Zipkin1、引入客户端2、配置文件3、运行效... 查看详情

springcloud之链路追踪整合sleuth(十三)

前言SpringCloud是微服务中的翘楚,最佳的落地方案。在一个完整的微服务架构项目中,服务之间的调用是很复杂的,当其中某一个服务出现了问题或者访问超时,很难直接确定是由哪个服务引起的,所以就有了SpringCloudSleuth链路... 查看详情

springcloud(16)——链路追踪工具sleuth(代码片段)

追踪工具SleuthSpringCloudSleuth可以用来追踪微服务请求中的整个请求,通过它可以记录各个请求之间的耗时、异常等情况。使用SpringCloudSleuth时一般会跟Zipkin一起使用。SpringCloudSleuth收集到的一些跟踪信息可以发送给Zipkin,Zipkin提供... 查看详情

分布式链路跟踪sleuth(zipkin+kafka+elasticsearch)

...不是一个新鲜的东西,说白了就是一个APM的一个浓缩版,springCloudSleuth为springCloud提供了分布式跟踪的解决方案,它大量借用了GoogleDapper、TwitterZipkin和ApacheHTrace的设计构建了ELK的日志系统和监控系统这两个能够快速的发现系统中... 查看详情

springcloud集成sleuth(代码片段)

Springcloud集成SleuthSleuth是什么Sleuth之zipkin搭建安装Sleuth链路监控展现Sleuth是什么为什么会出现这个技术?要解决哪些问题?在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来... 查看详情

springcloud系列微服务的链路追踪(代码片段)

微服务的链路追踪概述1、微服务架构下的问题2、Sleuth概述2.1、Sleuth简介2.2、相关概念2.3、链路追踪Sleuth入门3、Zipkin的概述3.1、ZipkinServer的部署和配置4、客户端Zipkin+Sleuth整合5、基于消息中间件收集数据5.1、RabbitMQ的安装与启... 查看详情

springcloud教程——sleuth(f版本)

...。随着服务的越来越多,对调用链的分析会越来越复杂。SpringCloudSleuth服务链路跟踪功能就可以帮助我们快速的发现错误根源以及监控分析每条请求链路上的性 查看详情

springcloud分布式日志链路跟踪

首先要明白一点,为什么要使用链路跟踪?当我们微服务之间调用的时候可能会出错,但是我们不知道是哪个服务的问题,这时候就可以通过日志链路跟踪发现哪个服务出错。它还有一个好处:当我们在企业中,可能每个人都负... 查看详情

springcloudsleuth全链路日志跟踪解决方案(强烈推荐)(代码片段)

点击关注公众号,实用技术文章及时了解概述分布式系统面临的问题Sleuth是什么Zipkin是什么链路监控相关术语实战练习入门练习Zipkin下载与启动搭建链路监控步骤sleuth相关配置向Zipkin发送消息的方式Sleuth到底给Zipkin都发送了... 查看详情

springcloud使用zipkin实现链路跟踪

参考技术AZipkin主要提供链路追踪的可视化,原理为:在服务调用的请求和响应中加入ID,表明上下游请求的关系;利用这些关系;可以可视化分析服务调用链路和服务间的依赖关系。zipkin的依赖包含Sleuth的依赖。添加配置实现测... 查看详情