Sleuth
概述
1、Spring Cloud Sleuth 为 Spring Cloud 提供分布式跟踪解决方案的 API,它与 OpenZipkin Brave 集成
2、Spring Cloud Sleuth 能够追踪请求和消息,这样就可以将该通信与相应的日志条目联系起来
(1)还可以将追踪信息导出到外部系统,以可视化延迟
(3)Spring Cloud Sleuth 直接支持 OpenZipkin 兼容系统
OpenZipkin
1、启动
java -jar zipkin-server-2.23.19-exec.jar
2、控制台
http://localhost:9411/zipkin/
术语
1、Span
(1)工作的基本单位,例如:发送一个 RPC 是一个新的 Span,正如发送一个 RPC 的响应一样
(2)Span 也有其他数据,如:描述、有时间戳的事件、键值注释(标签)、产生它们的 Span 的 ID,以及进程 ID(通常是 IP 地址)
(3)Span 可以被启动和停止,并保持跟踪其时间信息,一旦创建了一个 Span,必须在未来的某个时间点停止它
2、Trace:一组 Span 形成一个树状结构,例如:如果运行一个分布式大数据存储,一个 Trace 可能由一个 PUT 请求形成
3、Annotation / Event
(1)用来记录一个事件在时间上的存在
(2)从概念上讲,在一个典型的 RPC 场景中,标记这些事件是为了强调发生了什么样的行动(这并不意味着在物理上这样的事件会被设置在一个 Span 上)
(3)cs:Client Sent。客户端已经发出了请求,这个注解表示 Span 的开始
(4)sr:Server Received。服务器端收到了请求并开始处理它,sr 时间戳中减去 cs 的时间戳,就可以看出网络延迟的情况
(5)ss:Server Sent。在请求处理完成后进行注释(当响应被发回给客户端时),ss 时间戳中减去 sr 时间戳,可以看出服务器端处理该请求所需的时间
(6)cr:Client Received。标志着 Span 的结束,客户端已成功收到服务器端的响应。cr 时间戳中减去 cs 的时间戳,可以看出客户端从服务器端接收响应所需的全部时间
示例
1、服务提供者
(1)核心依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<!-- zipkin包括了sleuth以及sleuth-zipkin这两个依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
</dependencies>
(2)yaml 配置
server:
port: 8001
spring:
application:
name: cloud-service
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
#采样率值介于 0 到 1 之间,1 则表示全部采集
probability: 1
#省略注册配置
(3)业务方法
@GetMapping("/payment/zipkin")
public String paymentZipkin() {
return "服务提供者被调用";
}
2、服务消费者
(1)核心依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
(2)yaml 配置
server:
port: 80
spring:
application:
name: cloud-service
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
#采样率值介于 0 到 1 之间,1 则表示全部采集
probability: 1
#省略注册配置
(3)业务方法
@GetMapping("/consumer/payment/zipkin")
public String paymentZipkin() {
String result = restTemplate.getForObject("http://localhost:8001/payment/zipkin/", String.class);
return result;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战