用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

sc-sc    -  云代码空间

——

springcloud+springboot(十二):使用Spring Cloud Sleuth和Z

2019-02-25|388阅||

摘要:springcloud+springboot(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

Spring Cloud Sleuth

一般的,一个分布式服务跟踪系统,主要有三部分:数据收集、数据存储和数据展示。根据系统大小不同,每一部分的结构又有一定变化。譬如,对于大规模分布式系统,数据存储可分为实时数据和全量数据两部分,实时数据用于故障排查(troubleshooting),全量数据用于系统优化;数据收集除了支持平台无关和开发语言无关系统的数据收集,还包括异步数据收集(需要跟踪队列中的消息,保证调用的连贯性),以及确保更小的侵入性;数据展示又涉及到数据挖掘和分析。虽然每一部分都可能变得很复杂,但基本原理都类似。

服务追踪的追踪单元是从客户发起请求(request)抵达被追踪系统的边界开始,到被追踪系统向客户返回响应(response)为止的过程,称为一个“trace”。每个 trace 中会调用若干个服务,为了记录调用了哪些服务,以及每次调用的消耗时间等信息,在每次调用服务时,埋入一个调用记录,称为一个“span”。这样,若干个有序的 span 就组成了一个 trace。在系统向外界提供服务的过程中,会不断地有请求和响应发生,也就会不断生成 trace,把这些带有span 的 trace 记录下来,就可以描绘出一幅系统的服务拓扑图。附带上 span 中的响应时间,以及请求成功与否等信息,就可以在发生问题的时候,找到异常的服务;根据历史数据,还可以从系统整体层面分析出哪里性能差,定位性能优化的目标。

Spring Cloud Sleuth为服务之间调用提供链路追踪。通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。从而让我们可以很方便的理清各微服务间的调用关系。此外Sleuth可以帮助我们:

  • 耗时分析: 通过Sleuth可以很方便的了解到每个采样请求的耗时,从而分析出哪些服务调用比较耗时;
  • 可视化错误: 对于程序未捕捉的异常,可以通过集成Zipkin服务界面上看到;
  • 链路优化: 对于调用比较频繁的服务,可以针对这些服务实施一些优化措施。

spring cloud sleuth可以结合zipkin,将信息发送到zipkin,利用zipkin的存储来存储信息,利用zipkin ui来展示数据。

这是Spring Cloud Sleuth的概念图:

ZipKin

Zipkin 是一个开放源代码分布式的跟踪系统,由Twitter公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。

每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图,显示了多少跟踪请求通过每个服务,该系统让开发者可通过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。

Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。接下来的测试为方便直接采用In-Memory方式进行存储,生产推荐Elasticsearch。

快速上手

创建zipkin-server项目

项目依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-server</artifactId>
    </dependency>
    <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-autoconfigure-ui</artifactId>
    </dependency>
</dependencies>

启动类

@SpringBootApplication @EnableEurekaClient @EnableZipkinServer public class ZipkinApplication { public static void main(String[] args) {
        SpringApplication.run(ZipkinApplication.class, args);
    }

}

使用了@EnableZipkinServer注解,启用Zipkin服务。

配置文件

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/ server:
  port: 9000 spring:
  application:
    name: zipkin-server

配置完成后依次启动示例项目:spring-cloud-eureka、zipkin-server项目。刚问地址:http://localhost:9000/zipkin/可以看到Zipkin后台页面

项目添加zipkin支持

在项目spring-cloud-producer和spring-cloud-zuul中添加zipkin的支持。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

Spring应用在监测到Java依赖包中有sleuth和zipkin后,会自动在RestTemplate的调用过程中向HTTP请求注入追踪信息,并向Zipkin Server发送这些信息。

同时配置文件中添加如下代码:

spring:
  zipkin:
    base-url: http://localhost:9000 sleuth:
    sampler:
      percentage: 1.0

spring.zipkin.base-url指定了Zipkin服务器的地址,spring.sleuth.sampler.percentage将采样比例设置为1.0,也就是全部都需要。

Spring Cloud Sleuth有一个Sampler策略,可以通过这个实现类来控制采样算法。采样器不会阻碍span相关id的产生,但是会对导出以及附加事件标签的相关操作造成影响。 Sleuth默认采样算法的实现是Reservoir sampling,具体的实现类是PercentageBasedSampler,默认的采样比例为: 0.1(即10%)。不过我们可以通过spring.sleuth.sampler.percentage来设置,所设置的值介于0.0到1.0之间,1.0则表示全部采集。

这两个项目添加zipkin之后,依次进行启动。

进行验证

这样我们就模拟了这样一个场景,通过外部请求访问Zuul网关,Zuul网关去调用spring-cloud-producer对外提供的服务。

四个项目均启动后,在浏览器中访问地址:http://localhost:8888/producer/hello?name=neo 两次,然后再打开地址:http://localhost:9000/zipkin/点击对应按钮进行查看。

点击查找看到有两条记录

点击记录进去页面,可以看到每一个服务所耗费的时间和顺序

点击依赖分析,可以看到项目之间的调用关系

Spring Cloud大型企业分布式微服务云架构源码请加企鹅求求:yuncode.net

顶 0踩 0收藏
文章评论
    发表评论

    个人资料

    • 昵称: sc-sc
    • 等级: 高级设计师
    • 积分: 7490
    • 代码: 0 个
    • 文章: 302 篇
    • 随想: 0 条
    • 访问: 15 次
    • 关注

    人气代码

      标签

      java(63)api(1)教程(26)Spring(84)cache(1)+(10)springmvc(6)mybatis(10)(十)(1)(十一)(1)Cloud(44)Boot(12)Cloud-hong(1)Cloud分布式微服(1)Cloud-Hong(1)Cloud分布式微服(1)Cloud--Hon(1)Cloud分布式微服(1)Cloud--Hon(1)Cloud分布式微服(1)Cloud-鸿鹄Cl(1)Cloud--hon(1)Cloud分布式微服(1)Cloud--Hon(1)分布式微服务云系统-(1)cloud--鸿鹄C(1)源码(3)简介(1)Cloud微服务分布(1)-(33)cloud集成项目(6)Cloud--Hon(1)Cloud分布式微服(1)Cloud--hon(1)Cloud分布式微服(1)Cloud-鸿鹄Cl(1)Cloud--Hon(1)Cloud分布式微服(1)Cloud微服务分布(1)Cloud微服务分布(1)Cloud-Hong(1)Cloud分布式微服(1)Cloud-鸿鹄Cl(1)使用(1)搭建微服务基础设施(1)Cloud云服务(3)HongHu架构co(1)项目构建过程(5)springclou(1)Eureka服务器搭(1)Cloud--Hon(1)Cloud分布式微服(1)关于Spring(6)Cloud的核心特性(4)Cloud微服务分布(1)Config-快速开(1)Cloud企业微服务(1)Config-快速开(1)Cloud--Hon(1)Cloud分布式微服(1)企业分布式微服务云架(1)Config-快速开(1)Cloud--Hon(1)Cloud分布式微服(1)整合spring(8)cloud云服务架构(11)企业云架构commo(1)企业分布式微服务云架(1)介绍一下Spring(1)Cloud微服务架构(1)总结Spring(4)Cloud各个组件配(1)Config客户端使(1)cloud架构(1)HongHu(1)common-ser(1)RestTempla(1)particle云架(1)Cloud+Spri(1)Boot+Mybat(1)企业分布式微服务云架(1)Config-快速开(1)Config(1)加密和解密(1)Cloud自定义引导(1)Cloud各个组件配(1)Cloud构建微服务(1)Cloud云架构(8)SSO单点登录之OA(1)SSO单点登录之OA(1)Cloud+Spri(1)Boot+Mybat(1)企业分布式微服务云架(1)commonserv(1)4.2.2以上版本和(1)SSO单点登录之OA(1)登出流程(3)(1)Cloud--Hon(1)Cloud分布式微服(1)Netflix(1)Commons(1)普通抽象(1)项目过程构建(1)Cloud微服务分布(1)Cloud微服务分布(1)企业分布式微服务云架(1)Cloud各个组件配(1)云架构代码结构构建(2)Cloud云服务架构(1)分享Spring(1)Cloud分布式微服(1)HongHu架构co(1)企业分布式微服务云架(1)Cloud大型互联网(1)Cloud--Hon(1)Cloud分布式微服(1)Cloud--Hon(1)Cloud分布式微服(1)企业分布式微服务云架(1)Cloud微服务分布(1)Cloud大型互联网(1)Config-Git(1)commonserv(1)cloud微服务分布(1)Cloud微服务分布(1)Cloud微服务分布(1)HongHu架构co(1)Cloud微服务架构(1)Cloud大型互联网(1)Cloud大型互联网(1)Config服务器(1)springclou(1)Cloud-hong(1)Cloud分布式微服(1)SpringClou(1)SpringBoot(73)mybatis分布式(1)SpringClou(1)mybatis分布式(1)mybatis分布式(1)mybatis分布式(1)mybatis分布式(1)Cloud微服务分布(1)Cloud各个组件配(1)(十六)(1)-使用spring(1)企业级(26)(一)(1)(二)(1)(三)(1)cloud项目(2)(五)(1)(六)整合sprin(1)企业云架构commo(1)(七)整合sprin(1)common-ser(1)(八)整合sprin(1)commonserv(1)(十二)(1)(九)整合sprin(1)commonserv(1)SSO单点登录之OA(1)SSO单点登录之OA(1)SSO单点登录之OA(1)java电子商务系统(1)MVC+mybati(1)cloud+spri(1)boot+sprin(1)电子商务云平台b2b(1)b2c(1)o2o(1)springmvc+(1)springclou(1)Cloud简介(1)springclou(1)springclou(1)springclou(1)B2B2C(66)mybatis电子商(1)Springclou(1)Springboot(1)关于SpringCl(1)(九)Java(3)o2o多用户商城(27)(十)Java(1)(十一)Java(1)(十二)(1)springclou(1)springclou(1)springclou(1)SSO单点登录之OA(1)springclou(1)SSO单点登录之OA(1)springclou(1)(十三)java(2)b2b2c多用户商城(6)SSO单点登录之OA(1)(十四)Java(3)springclou(1)springclou(1)(十五)Java(3)springclou(1)springclou(1)(十六)Java(3)springclou(1)springclou(1)(十七)Java(2)springclou(1)springclou(1)springclou(1)springclou(1)java版(1)o2o电子商务云商平(1)Cloud构建分布式(1)Config)(6)ssm(12)springclou(1)springclou(1)企业级java(12)springclou(1)b2bc商城系统开源(1)springclou(1)shop(20)多用户商城系统源码:(2)多用户商城系统源码(3)(十二)java(1)多用户商城系统源码-(2)Bus)(1)Sleuth)(2)springclou(1)springclou(1)SpringClou(1)多级分销Spring(1)高可用的分布式配置中(1)springclou(1)springclou(1)springclou(1)b2b2c多用户商城(1)(十一)JAVA(2)b2bc商城系统开源(1)b2bc商城系统开源(1)b2bc商城系统开源(1)b2b2c多用户商城(1)SpringClou(1)SpringClou(1)SpringClou(1)SpringClou(1)配置管理(1)配置自动刷新(1)springclou(1)springboot(1)(五)springb(1)beatlsql(5)b2b2c多用户商城(1)b2bc商城系统开源(1)(七)springb(1)多用户商城系统(2)(十)用spring(1)(二)Spring(3)Boot配置文件详解(3)整合JPA(1)springclou(1)springclou(1)多用户商城系统源码((1)springclou(1)b2b2c多用户商城(1)(四)断路器(Hys(1)Dashboard)(3)Turbine)(2)o2o分布式(1)b2bc商城系统开源(1)commonserv(1)项目构建过程(八)(1)springclou(1)springclou(1)(十)微服务多用户商(1)b2b2c多用户商城(1)mybatis多租户(1)mybatis多租户(1)mybatis多租户(1)springClou(1)mybatis分布式(1)mybatis多租户(1)(十三)java(1)mybatis仿淘宝(1)微服务java_b2(1)springboot(1)多用户商城系统源码-(1)多用户商城系统源码-(1)(五)JAVA(1)(六)(1)(八)java(1)多用户商城系统源码:(1)微服务b2b2c电子(1)SpringClou(1)springboot(1)SpringClou(1)多用户商城系统源码-(1)springclou(1)springclou(1)springclou(1)springclou(1)b2b2c多用户商城(1)多级分销多租户电子商(1)Dashboard和(1)springclou(1)springclou(1)springclou(1)SpringClou(1)Springclou(1)B2B2C-服务消费(1)(十二)JAVA(1)b2b2c多用户商城(1)Sleuth和Zip(1)(二)企业级java(1)b2bc商城系统开源(1)(三)java(1)springclou(1)springclou(1)springboot(1)Java多用户商城系(1)(一)构建第一个Sp(1)Java版本多用户B(1)Java多用户商城系(1)Dashboard和(1)Java版本多用户B(1)springboot(1)(五)springb(1)springclou(1)springboot(1)SpringBoot(1)多用户商城系统(八)(1)springboot(1)SpringClou(1)springclou(1)b2b2c多用户商城(1)SpringClou(1)springclou(1)springclou(1)(十)springb(1)b2b2c多用户商城(1)b2b2c多用户商城(1)SSO单点登录之OA(1)springclou(1)springclou(1)springclou(1)springclou(1)springclou(1)springclou(1)springboot(1)多级分销Spring(1)整合企业架构的技术点(1)Java版本多用户B(1)Cloud集成项目简(1)springclou(1)springclou(1)Springclou(1)B2B2C-服务消费(1)b2b2c多用户商城(1)b2bc商城系统开源(1)多用户商城系统源码((1)b2bc商城系统开源(1)(十四)服务注册(c(1)多用户商城系统源码((1)b2bc商城系统开源(1)Dashboard和(1)多用户商城系统源码((1)(六)分布式配置中心(1)springclou(1)b2bc商城系统开源(1)多用户商城系统源码-(1)多用户商城系统-(五(1)springboot(1)Java版本多用户B(1)b2b2c多用户商城(1)b2bc商城系统开源(1)多用户商城系统源码-(1)springclou(1)多用户商城系统源码((1)Java多用户商城系(1)-JAVA(1)多用户商城(二)Eu(1)springboot(1)springclou(1)b2b2c多用户商城(1)b2bc商城系统开源(1)多用户商城系统源码((1)微服务java_b2(1)(一)构建第一个Sp(1)springboot(1)Java多用户商城系(1)(三)SpringB(1)多用户商城系统源码((1)多用户商城系统(五)(1)企业分布式微服务云S(1)(十一)docker(1)企业分布式微服务云S(1)(十二)断路器监控((1)企业分布式微服务云S(1)(十三)断路器聚合监(1)企业分布式微服务云S(1)(十四)服务注册(c(1)微服务架构(4)企业分布式微服务云S(1)mybatis(八)(1)企业分布式微服务云S(1)(九)服务链路追踪((1)springclou(1)Sleuth和Zip(1)springclou(1)Sleuth和Zip(1)springclou(1)springclou(1)springclou(1)springclou(1)springclou(1)Dashboard和(1)springclou(1)springclou(1)Dashboard和(1)springclou(1)springclou(1)springclou(1)springclou(1)springclou(1)(六)springb(1)(七)springb(1)(八)springb(1)(九)springb(1)Restdocs创建(1)(十一)spring(1)(十二)spring(1)(十三)spring(1)企业分布式微服务云S(1)(十)高可用的服务注(1)企业分布式微服务云S(1)(十一)docker(1)企业分布式微服务云S(1)(十二)断路器监控((1)企业分布式微服务云S(1)(十三)断路器聚合监(1)企业分布式微服务云S(1)(十四)服务注册(c(1)SpringClou(1)SpringClou(1)SpringClou(1)SpringClou(1)(一)构建第一个Sp(1)(四)(1)(七)(1)(一)构建第一个Sp(1)(三)SpringB(1)(四)SpringB(1)(五)springb(1)(六)springb(1)(七)springb(1)(八)springb(1)(九)springb(1)SpringClou(1)服务的注册与发现(E(1)SpringClou(1)服务消费者(rest(1)SpringClou(1)服务消费者(Feig(1)SpringClou(1)断路器(Hystri(1)SpringClou(1)(五)路由网关(zu(1)SpringClou(1)分布式配置中心(Sp(1)SpringClou(1)高可用的分布式配置中(1)(一)微服务分布式云(1)

      最新提问

        站长推荐