spring cloud 学习之-10-链路追踪和健康检查

18 链路追踪

18.1 概念

分布式计算八大误区

网络可靠。

延迟为零。

带宽无限。

网络绝对安全。

网络拓扑不会改变。

必须有一名管理员。

传输成本为零。

网络同质化。(操作系统,协议)

链路追踪的必要性

如果能跟踪每个请求,中间请求经过哪些微服务,请求耗时,网络延迟,业务逻辑耗时等。我们就能更好地分析系统瓶颈、解决系统问题。因此链路跟踪很重要。

《链路追踪》看看微服务之熵。

我们自己思考解决方案:在调用前后加时间戳。捕获异常。

链路追踪目的:解决错综复杂的服务调用中链路的查看。排查慢服务。

市面上链路追踪产品,大部分基于google的Dapper论文。

zipkin,twitter开源的。是严格按照谷歌的Dapper论文来的。

pinpoint 韩国的 Naver公司的。

Cat 美团点评的

EagleEye 淘宝的

链路追踪要考虑的几个问题

  1. 探针的性能消耗。尽量不影响 服务本尊。
  2. 易用。开发可以很快接入,别浪费太多精力。
  3. 数据分析。要实时分析。维度足够。

Sleuth简介

Sleuth是Spring cloud的分布式跟踪解决方案。

  1. span(跨度),基本工作单元。一次链路调用,创建一个span,

    span用一个64位id唯一标识。包括:id,描述,时间戳事件,spanId,span父id。

    span被启动和停止时,记录了时间信息,初始化span叫:root span,它的span id和trace id相等。

  2. trace(跟踪),一组共享“root span”的span组成的树状结构 称为 trace,trace也有一个64位ID,trace中所有span共享一个trace id。类似于一颗 span 树。

  3. annotation(标签),annotation用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。

    • CS(Client Send客户端发起请求)。客户端发起请求描述了span开始。
    • SR(Server Received服务端接到请求)。服务端获得请求并准备处理它。SR-CS=网络延迟。
    • SS(Server Send服务器端处理完成,并将结果发送给客户端)。表示服务器完成请求处理,响应客户端时。SS-SR=服务器处理请求的时间。
    • CR(Client Received 客户端接受服务端信息)。span结束的标识。客户端接收到服务器的响应。CR-CS=客户端发出请求到服务器响应的总时间。

其实数据结构是一颗树,从root span 开始。

《链路树演示》

18.2 使用

Sleuth单独
  1. pom

    每个需要监控的系统

<!-- 引入sleuth依赖 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-sleuth</artifactId>
		</dependency>

测试点:

  1. 启动eureka 7900,service-sms 8002,api-driver 9002.
  2. 访问一次。看日志结果。
 [api-driver,1a409c98e7a3cdbf,1a409c98e7a3cdbf,true] 
 
 [服务名称,traceId(一条请求调用链中 唯一ID),spanID(基本的工作单元,获取数据等),是否让zipkin收集和展示此信息]

看下游
[service-sms,1a409c98e7a3cdbf,b3d93470b5cf8434,true]

traceId, 是一样的。

服务名必须得写。
zipkin

上面拍错看日志,很原始。刀耕火种,加入利器 zipkin。

zipkin是twitter开源的分布式跟踪系统。

原理收集系统的时序数据,从而追踪微服务架构中系统延时等问题。还有一个友好的界面。

由4个部分组成:

Collector、Storage、Restful API、Web UI组成

采集器,存储器,接口,UI。

原理:

sleuth收集跟踪信息通过http请求发送给zipkin server,zipkin将跟踪信息存储,以及提供RESTful API接口,zipkin ui通过调用api进行数据展示。

默认内存存储,可以用mysql,ES等存储。

操作步骤:

  1. 每个需要监听的服务的pom中添加。
<!-- zipkin -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zipkin</artifactId>
		</dependency>
  1. 每个需要监听的服务yml中
spring:
  #zipkin
  zipkin:
    base-url: http://localhost:9411/
    #采样比例1
  sleuth:
    sampler:
      rate: 1  
  1. 启动zipkin。
jar包下载:curl -sSL https://zipkin.io/quickstart.sh | bash -s
我放到了 目录:C:\github\online-taxi-demo  下面。


java -jar zipkin.jar

或者docker:
docker run -d -p 9411:9411 openzipkin/zipkin

测试点:

访问zipkin:http://localhost:9411/zipkin/

启动:eureka7900,service-sms 8002,api-driver 9002

发起一次 yapi ->api-driver->司机发送验证码。

观察zip界面,点查找,点依赖。

看查找下的时间。

再制造一次熔断,看看zipkin。停止service-sms,访问。会看到变红。

zipkin:最好和rabbitmq,mysql配合使用。

19 健康检查

使用

  1. admin 组件端 = 项目:(cloud-admin):pom
server端:
<!-- Admin 服务 -->
		<dependency>
			<groupId>de.codecentric</groupId>
			<artifactId>spring-boot-admin-starter-server</artifactId>
		</dependency>
		<!-- Admin 界面 -->
		<dependency>
			<groupId>de.codecentric</groupId>
			<artifactId>spring-boot-admin-server-ui</artifactId>
		</dependency>
  1. 每个需要监控的服务,都加
pom:
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

yml:
management:
  endpoints:
    web:
      exposure:
        #yml加双引号,properties不用加
        include: "*" 
    health:
      ##默认是never
      show-details: ALWAYS
      enabled: true   

  1. 访问server
http://localhost:6010/

root/root

小插曲 正六边形算法。

邮件监控 ,在admin组件中。

  1. pom

    <dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-mail</artifactId>
    		</dependency>
    
  2. yml

    spring: 
      application: 
        name: cloud-admin
      security:
        user:
          name: root
          password: root
      # 邮件设置
      mail:
        host: smtp.qq.com
        username: 单纯QQ号
        password: xxxxxxx授权码
        properties:
          mail: 
            smpt: 
              auth: true
              starttls: 
                enable: true
                required: true
    #收件邮箱
    spring.boot.admin.notify.mail.to: 2634982208@qq.com   
    # 发件邮箱
    spring.boot.admin.notify.mail.from: xxxxxxx@qq.com   
    
  3. 下线一个服务。

  4. 去邮箱查看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值