19. 服务追踪

Spring Cloud Sleuth 链路监控

在这里插入图片描述
请求下单接口时间太长,那么如果要追踪原因该怎么去追踪呢?可能是因为查询商品列表时间长,也可能是因为扣库存时间长,也可能是因为订单服务调用商品服务 商品服务又调用了其他服务造成的,这个时候需要使用Spring Cloud Sleuth组件去查询。

Spring Cloud Sleuth实现了一种分布式的服务链路跟踪解决方案,通过使用Sleuth可以让我们快速定位某个服务的问题。

一些概念:
Span,Span是基本的工作单元。Span包括一个64位的唯一ID,一个64位trace码,描述信息,时间戳事件,key-value 注解(tags),span处理者的ID(通常为IP)。
最开始的初始Span称为根span,此span中span id和 trace id值相同。

Trance,包含一系列的span,它们组成了一个树型结构

Annotation,用于及时记录存在的事件。常用的Annotation如下:
cs - Client Sent:客户端发送一个请求,表示span的开始
sr - Server Received:服务端接收请求并开始处理它。(sr-cs)等于网络的延迟
ss - Server Sent:服务端处理请求完成,开始返回结束给服务端。(sr-ss)表示服务端处理请求的时间
cr - Client Received:客户端完成接受返回结果,此时span结束。(cr-cs)表示客户端接收服务端数据的时间

如果一个服务的调用关系如下:
在这里插入图片描述
那么此时Span和Trace在一个系统中使用Zipkin的过程图形化如下:
在这里插入图片描述
每个颜色的表明一个span(总计7个spans,从A到G),每个span有类似的信息
Trace Id = X
Span Id = D
Client Sent

此span表示span的Trance Id是X,Span Id是D,同时它发送一个Client Sent事件

spans 的parent/child关系图形化如下:
在这里插入图片描述
Spring Cloud Sleuth 使用
1.导入依赖

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

2.访问接口,查看日志
日志类似这样
在这里插入图片描述
[]中第一个参数:代表了服务名称
[]中第二个参数:是TranceId,一条链路中,只有一个TranceId
[]中第三个参数:是spanId,链路中的基本工作单元id,一个链路里可以有多个基本单元,比如发送一个http请求
[]中第四个参数:表示是否将数据输出到其他服务,true则会把信息输出到其他可视化的服务上观察

3.给product(商品服务)也加入监控依赖然后重新访问
在这里插入图片描述在这里插入图片描述
可以看到第二个参数一样说明是同一个链路,第三个参数是不同的。监控的内容已经产生了 接下来就需要一个界面化的东西去看,将信息展示出来。

zipKin

Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据。分布式跟踪系统还有其他比较成熟的实现,例如:Naver的Pinpoint、Apache的HTrace、阿里的鹰眼Tracing、京东的Hydra、新浪的Watchman,美团点评的CAT,skywalking等。
在这里插入图片描述
Zipkin Server主要包括四个模块:
(1)Collector 接收或收集各应用传输的跟踪信息,将这些信息转化为zipkin内部处理的Span格式以支持后续的储存 分析 展示等功能
(2)Storage 存储接受或收集过来的数据,当前支持Memory,MySQL,Cassandra,ElasticSearch等,默认存储在内存中,在内存中会随着服务端的启动清空历史数据
(3)API(Query) 负责查询Storage中存储的数据,提供简单的JSON API获取数据,提供给外部服务访问的resultful接口,主要提供给web UI使用

(4)Web 提供简单的web界面

1.使用docker进行下载安装
docker run -d -p 9411:9411 openzipkin/zipkin

2.使用docker ps命令查看 启动成功映射端口是9411
在这里插入图片描述
3.浏览器输入地址和端口进入可视化界面,如果是在虚拟机安装需要虚拟机ip
在这里插入图片描述
4.添加pom文件依赖 之前添加的sleuth可以注释掉

<!-- 包含sleuth和sleuth-zipkin -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>

5.配置zipkin

spring:
  zipkin:
    base-url: http://172.16.15.89:9411

6.重新请求可以发现在zipkin 可视化界面中依然什么都没有,原因是
在这里插入图片描述
第四个参数为false 也就是不将信息输出到其他服务器中
添加配置

spring:
	sleuth:
	    sampler:
	      probability: 1

这个是抽样的百分比。点入probability中,可以看到默认0.1也就是说它会默认输出百分之十的请求的信息,而不是全部输出,开发环境可以改为1也就是百分百输出
在这里插入图片描述
7.重启 重新访问接口
在这里插入图片描述
在这里插入图片描述
点进去可以查看具体信息
在这里插入图片描述

总结

集成步骤
1.引入依赖
2.启动ZipKin Server 我们使用的是dockers的方式
3.配置参数

分布式追踪系统核心步骤
数据采集
数据存储
数据展示

在数据采集过程中,由于不同系统的api不兼容 导致如果切换数据采集系统就会有较大改变,因此产生了OpenTracing规范

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值