OpenTelemetry 的概念有初步了解后,我们接着以 Jaeger 为例来演示如何在程序中使用实现链路追踪。

Jaeger

Jaeger\ˈyā-gər\ 是Uber开源的分布式追踪系统,是支持 OpenTelemetry 的系统之一,也是 CNCF 项目。本篇将使用 Jaeger 来演示如何在系统中引入分布式追踪。以下是 Opentracing+Jaeger 的架构图,针对于使用 OpenTelemetry 也是如此。

链路跟踪-准备工作 - 图1

准备工作

Jaeger 提供了 all-in-one 镜像,方便我们快速开始测试:

  1. docker run --rm --name jaeger \
  2. -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  3. -p 6831:6831/udp \
  4. -p 6832:6832/udp \
  5. -p 5778:5778 \
  6. -p 16686:16686 \
  7. -p 4317:4317 \
  8. -p 4318:4318 \
  9. -p 14250:14250 \
  10. -p 14268:14268 \
  11. -p 14269:14269 \
  12. -p 9411:9411 \
  13. jaegertracing/all-in-one:1.55

如果 docker 镜像拉取太慢,您可以尝试修改 docker 拉取站点的镜像地址,例如: http://mirrors.ustc.edu.cn/help/dockerhub.html?highlight=docker

镜像启动后,通过 http://localhost:16686 可以打开 Jaeger UI

链路跟踪-准备工作 - 图2

示例代码地址

我们的示例代码在 gf 主库中,地址: https://github.com/gogf/gf/tree/master/example/trace

Jaeger注册封装(即将在2.6.0版本移除)

为方便开发者使用,我们通过社区模块的形式,已经封装好了对 jaeger 的初始化逻辑,代码地址: https://github.com/gogf/gf/tree/master/contrib/trace/jaeger

OTLP HTTP注册封装

为方便开发者使用,我们通过社区模块的形式,已经封装好了对 otelhttp 的初始化逻辑,代码地址: https://github.com/gogf/gf/tree/master/contrib/trace/otlphttp

OTLP GRPC注册封装

为方便开发者使用,我们通过社区模块的形式,已经封装好了对 otelgrpc 的初始化逻辑,代码地址: https://github.com/gogf/gf/tree/master/contrib/trace/otlpgrpc