返回
链路追踪与调用链监控利器pinpoint之结构与用法介绍
后端
2023-12-11 22:28:45
在上一篇文章中,我们完成了七天的学习,今天是这个系列文章的第九天,我们将要讲的内容是链路追踪。一个庞大的服务往往会经历多次调用才能完成,随着系统的日益复杂和服务边界越来越模糊,会出现的问题也日益增多。链路追踪就是通过在分布式系统中每一个请求都赋予一个唯一的id,通过这个id追踪请求在系统内部各个组件之间的传播路径,实现对分布式系统的诊断。
链路追踪的优点:
- 可以快速定位服务问题:链路追踪可以快速定位请求在哪个服务组件出了问题,从而快速定位问题服务,减少问题修复时间。
- 可以分析服务性能:链路追踪可以分析每个请求在每个服务组件上的耗时,从而快速发现服务性能瓶颈。
- 可以分析服务依赖关系:链路追踪可以分析服务之间互相调用的关系,从而快速了解服务的依赖关系。
Pinpoint
链路追踪系统有很多,而pinpoint是spring cloud下的一个分布式链路追踪系统,它基于日志的方式进行追踪,通过记录日志的方式捕获链路的相关信息,然后通过日志分析工具对链路日志进行查询和分析。
Pinpoint 结构
Pinpoint 主要由以下组件组成:
- Pinpoint Agent:Pinpoint Agent 是运行在每个服务的 Java 虚拟机上,负责收集和发送链路追踪数据。
- Pinpoint Collector:Pinpoint Collector 负责接收和存储 Pinpoint Agent 发送的链路追踪数据。
- Pinpoint Web:Pinpoint Web 是一个 Web 管理界面,用于查看和分析链路追踪数据。
Pinpoint 用法
- 在每个服务的 Java 虚拟机上安装 Pinpoint Agent。
- 在 Pinpoint Collector 上配置 Pinpoint Agent 的地址。
- 启动 Pinpoint Collector。
- 在 Pinpoint Web 上配置 Pinpoint Collector 的地址。
- 启动 Pinpoint Web。
在 go-zero 中使用 pinpoint
go-zero 中有一个 pinpoint 模块,可以帮助我们快速集成 pinpoint。
- 首先,需要在 go.mod 中添加 pinpoint 模块:
require (
github.com/zeromicro/go-zero v1.3.7
github.com/zeromicro/go-zero/core/trace/pinpoint v0.0.0-20220613193835-f2fe05d0d7da
)
- 然后,在服务的 main 函数中,需要初始化 pinpoint:
func main() {
// 配置pinpoint collector的地址
collector := "http://127.0.0.1:9999"
// 指定pinpoint server name
serverName := "OrderService"
// 启动pinpoint
trace.StartAgent(collector, serverName)
// 其他代码...
}
- 在服务的请求处理函数中,需要添加 pinpoint 的日志记录:
func handleRequest(w http.ResponseWriter, r *http.Request) {
// 调用pinpoint记录接口
span, _ := trace.NewSpan(r.Context(), "handleRequest")
defer span.Finish()
// 其他代码...
}
- 启动服务,然后访问 Pinpoint Web,就可以看到服务链路追踪信息了。
总结
在本文中,我们介绍了链路追踪以及 pinpoit 的结构和用法,希望大家能够理解并掌握。在下一篇章中,我们将介绍微服务中的认证与授权。