可观测性是很重要的,目前已经有比较不错的 OpenTelemetry
标准,各个第三方组件以及厂商都按照这套标准库来暴露和对接观测数据将会更加简便。我们本次聊到的,是链路跟踪,它是可观测性中很重要的一项指标。
GoFrame
框架具有很高的前瞻性,在 OpenTelemetry
标准草稿阶段便开始持续关注,并在发布 OTEL
标准发布了 alpha
版本时,框架便开始支持。目前 OTEL
的 Golang
实现已经稳定。 GoFrame
是目前众多"框架"中对 OTEL
标准及实现支持得最好的框架,使用 GoFrame
框架即隐式自带链路跟踪特性。并且可观测性也是框架未来发展的重点特性。
一、项目实践的痛点
在项目实践中,实现链路跟踪往往会遇到以下常见的痛点。
1、组件没有严格执行标准
虽然已经有 OTEL
标准,但是第三方组件没有严格执行。例如,在日志和 ORM
组件中,没有严格约束传递 ctx
上下文变量。
2、第三方组件杂乱无章
业务项目拼凑使用的第三方组件众多,有的组件没有实现链路跟踪支持,更别提 OTEL
标准。例如,命令管理、配置管理、缓存管理、数据校验、定时任务等等常用组件,表象就是没有提供 ctx
上下文变量传递。当使用到的组件不支持链路传递时,链路信息便丢失。
3、业务逻辑易丢失链路
业务项目中,链路跟踪没有检测手段,也就是写着写着,链路跟踪不小心就弄丢了。例如在链路传递 中新建 ctx
或者传递 nil
的 ctx
。当战略设计在战术实施时遭遇到了猪队友,遇到问题需要定位时就GG。特别是在 toB
业务中,遇到工单限时会很抓狂。
二、框架全链路跟踪
1、统一框架
由于 GoFrame
是一款工程完备的基础框架,提供了项目所需的通用核心基础组件,因此可以非常方便统一地的基础组件实现链路跟踪标准。
2、标准落地
在框架的核心组件中均增加了对 ctx
上下文变量的支持,并严格执行 OTEL
标准,保障标准的顺利落地。
3、日志支持
在工程实践中,日志对于链路跟踪来说是非常重要的组件,在大部分的业务场景中,我们需要通过链路跟踪和日志内容来排查和定位具体问题。GoFrame
框架的日志组件也支持并且严格执行 OTEL
标准,因此只要使用框架的日志组件,那么也会自动打印链路相关信息。
4、规范检测工具
框架通过开发工具提供工程规范检测功能,可以自动检测出业务项目中的链路丢失问题,进一步推进 OTEL
标准落地,保障项目质量。
5、链路传递支持
链路的传递也需要统一组件。目前比较常见的协议是 HTTP/GRPC
协议,因此框架也提供了 HTTP Client/Server
以及 GRPC Client/Server
组件来保障链路的传递。并且为提高介入性和易用性,屏蔽复杂的底层功能细节,这种链路传递是底层 隐式实现 的,使用者对此事完全无感知的。