写点什么

go-zero docker-compose 搭建课件服务(八):集成 jaeger 链路追踪

作者:六月的
  • 2022-10-19
    上海
  • 本文字数:2100 字

    阅读完需:约 1 分钟

0、转载

go-zero docker-compose 搭建课件服务(八):集成jaeger链路追踪

0.1 源码地址

https://github.com/liuyuede123/go-zero-courseware

1、链路追踪

一个外部请求需要内部若干服务的联动响应,这时候完整的调用轨迹将跨越多个服务,同时包括服务间的网络传输信息与各个服务内部的调用堆栈信息。追踪的主要目的是排查故障,如分析调用链的哪一部分、哪个方法出现错误或阻塞,输入输出是否符合预期,等等。


链路追踪中有几个比较重要的概念:


  1. trace:从客户端发起请求抵达系统的边界开始,记录请求流经的每一个服务,直到到向客户端返回响应为止,这整个过程就称为一次 trace

  2. span:由于每次 Trace 都可能会调用数量不定、坐标不定的多个服务,为了能够记录具体调用了哪些服务,以及调用的顺序、开始时点、执行时长等信息,每次开始调用服务前都要先埋入一个调用记录,这个记录称为一个 Span。应含有时间戳、起止时间、Trace 的 ID、当前 Span 的 ID、父 Span 的 ID 等能够满足追踪需要的信息

  3. OpenTracing:OpenTracing 是一套与平台无关、与厂商无关、与语言无关的追踪协议规范,只要遵循 OpenTracing 规范,任何公司的追踪探针、存储、界面都可以随时切换,也可以相互搭配使用。



参考凤凰架构

2、jaeger

Jaeger 受 Dapper 和 OpenZipkin 的启发,是 Uber Technologies 以开源形式发布的分布式跟踪系统。 它由检测 SDK、用于数据收集和存储的后端、用于可视化数据的 UI 以及用于聚合跟踪分析的 Spark/Flink 框架组成。


jaeger 架构如下:



  1. Instrumentation SDKs:集成到应用程序和框架中以捕获跟踪数据的库。 从历史上看,Jaeger 项目支持使用各种编程语言编写的自己的客户端库。 它们现在被弃用,取而代之的是 OpenTelemetry

  2. Jaeger Agent: Jaeger 代理是一个网络守护程序,用于侦听通过 UDP 从 Jaeger 客户端接收到的 span。 它收集成批的它们,然后将它们一起发送给收集器。 如果 SDK 被配置为将 span 直接发送到收集器,则不需要代理

  3. Jaeger Collector: Jaeger 收集器负责从 Jaeger 代理接收跟踪,执行验证和转换,并将它们保存到选定的存储后端

  4. Storage Backends: Jaeger 支持各种存储后端来存储跨度。 支持的存储后端有 In-Memory、Cassandra、Elasticsearch 和 Badger(用于单实例收集器部署)

  5. **Jaeger Query:**这是一项服务,负责从 Jaeger 存储后端检索跟踪信息,并使其可供 Jaeger UI 访问。

  6. **Jaeger UI:**一个 React 应用程序,可让您可视化跟踪并分析它们。 对于调试系统问题很有用。

  7. **Ingester:**只有当我们使用 Kafka 作为收集器和存储后端之间的缓冲区时,ingester 才是相关的。 它负责从 Kafka 接收数据并将其摄取到存储后端。 更多信息可以在官方 Jaeger Tracing 文档中找到。

3、go-zero 中集成 jaeger

首先我们需要在项目根目录下增加 jaeger 和 elasticsearch 的 Dockerfile。


jaeger 的查询和收集器服务配置了支持的存储类型 - 目前是 Cassandra 或 Elasticsearch。


这里我们使用 elasticsearch 做存储


FROM rancher/jaegertracing-all-in-one:1.20.0
LABEL maintainer="liuyuede123 <liufutianoppo@163.com>"
复制代码


FROM elasticsearch:7.13.1
LABEL maintainer="liuyuede123 <liufutianoppo@163.com>"
复制代码


docker-compose.yml 中增加 jaeger 和 elasticsearch 的配置。


...
jaeger: build: context: ./jaeger environment: - TZ=Asia/Shanghai - SPAN_STORAGE_TYPE=elasticsearch - ES_SERVER_URLS=http://elasticsearch:9200 - LOG_LEVEL=debug privileged: true ports: - "6831:6831/udp" - "6832:6832/udp" - "5778:5778" - "16686:16686" - "4317:4317" - "4318:4318" - "14250:14250" - "14268:14268" - "14269:14269" - "9411:9411" networks: - backend restart: always
elasticsearch: build: context: ./elasticsearch environment: - TZ=Asia/Shanghai - discovery.type=single-node - "ES_JAVA_OPTS=-Xms512m -Xmx512m" privileged: true ports: - "9200:9200" networks: - backend restart: always
复制代码


相关的端口解释可以参考官方文档


go-zero 中已经内置支持 jaeger,所以只需要配置下就可以使用


我们在之前创建的 user-api,user-rpc,courseware-api,courseware-rpc 中增加链路追踪相关的配置


需要在.yaml 中增加配置


...
Telemetry: Name: user-api Endpoint: http://jaeger:14268/api/traces Sampler: 1.0 Batcher: jaeger
复制代码


Telemetry:  Name: user-rpc  Endpoint: http://jaeger:14268/api/traces  Sampler: 1.0  Batcher: jaeger
复制代码


Telemetry:  Name: courseware-api  Endpoint: http://jaeger:14268/api/traces  Sampler: 1.0  Batcher: jaeger
复制代码


Telemetry:  Name: courseware-rpc  Endpoint: http://jaeger:14268/api/traces  Sampler: 1.0  Batcher: jaeger
复制代码


dcoker-compose up -d启动新增的 jaeger 服务和 elasticsearch 服务


请求接口看下 jaeger 中服务是否写入成功


访问 http://localhost:16686/查看是否安装成功



用户头像

六月的

关注

还未添加个人签名 2019-07-23 加入

还未添加个人简介

评论

发布
暂无评论
go-zero docker-compose 搭建课件服务(八):集成jaeger链路追踪_Docker-compose_六月的_InfoQ写作社区