0、索引
go-zero docker-compose 搭建课件服务(一):编写服务 api 和 proto
go-zero docker-compose 搭建课件服务(二):编写 courseware rpc 服务
go-zero docker-compose 搭建课件服务(三):编写 courseware api 服务
go-zero docker-compose 搭建课件服务(四):生成 Dockerfile 并在 docker-compose 中启动
go-zero docker-compose 搭建课件服务(五):欠缺 user 服务
go-zero docker-compose 搭建课件服务(六):欠缺 jwt 鉴权和返回构造
go-zero docker-compose 搭建课件服务(七):prometheus+grafana 服务监控
go-zero docker-compose 搭建课件服务(八):集成 jaeger 链路追踪
0.1 源码地址
https://github.com/liuyuede123/go-zero-courseware
1、链路追踪
一个内部申请须要外部若干服务的联动响应,这时候残缺的调用轨迹将逾越多个服务,同时包含服务间的网络传输信息与各个服务外部的调用堆栈信息。追踪的次要目标是排查故障,如剖析调用链的哪一部分、哪个办法呈现谬误或阻塞,输入输出是否合乎预期,等等。
链路追踪中有几个比拟重要的概念:
- trace:从客户端发动申请到达零碎的边界开始,记录申请流经的每一个服务,直到到向客户端返回响应为止,这整个过程就称为一次 trace
- span:因为每次 Trace 都可能会调用数量不定、坐标不定的多个服务,为了可能记录具体调用了哪些服务,以及调用的程序、开始时点、执行时长等信息,每次开始调用服务前都要先埋入一个调用记录,这个记录称为一个 Span。应含有工夫戳、起止工夫、Trace 的 ID、以后 Span 的 ID、父 Span 的 ID 等可能满足追踪须要的信息
- OpenTracing:OpenTracing 是一套与平台无关、与厂商无关、与语言无关的追踪协定标准,只有遵循 OpenTracing 标准,任何公司的追踪探针、存储、界面都能够随时切换,也能够互相搭配应用。
参考 :凤凰架构
2、jaeger
Jaeger 受 Dapper 和 OpenZipkin 的启发,是 Uber Technologies 以开源模式公布的分布式跟踪零碎。它由检测 SDK、用于数据收集和存储的后端、用于可视化数据的 UI 以及用于聚合跟踪剖析的 Spark/Flink 框架组成。
jaeger 架构如下:
- Instrumentation SDKs:集成到应用程序和框架中以捕捉跟踪数据的库。从历史上看,Jaeger 我的项目反对应用各种编程语言编写的本人的客户端库。它们当初被弃用,取而代之的是 OpenTelemetry
- Jaeger Agent: Jaeger 代理是一个网络守护程序,用于侦听通过 UDP 从 Jaeger 客户端接管到的 span。它收集成批的它们,而后将它们一起发送给收集器。如果 SDK 被配置为将 span 间接发送到收集器,则不须要代理
- Jaeger Collector: Jaeger 收集器负责从 Jaeger 代理接管跟踪,执行验证和转换,并将它们保留到选定的存储后端
- Storage Backends: Jaeger 反对各种存储后端来存储跨度。反对的存储后端有 In-Memory、Cassandra、Elasticsearch 和 Badger(用于单实例收集器部署)
- Jaeger Query: 这是一项服务,负责从 Jaeger 存储后端检索跟踪信息,并使其可供 Jaeger UI 拜访。
- Jaeger UI: 一个 React 应用程序,可让您可视化跟踪并剖析它们。对于调试零碎问题很有用。
- 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/ 查看是否装置胜利