GRPC: 如何实现分布式日志跟踪?
简介: 本文将介绍如何在 gRPC 分布式场景中,实现 API 的日志跟踪。
介绍
本文将介绍如何在 gRPC 分布式场景中,实现 API 的日志追踪。
什么是 API 日志追踪?一个 API 请求会跨多个微服务,我们希望通过一个唯一的 ID 检索到整个链路的日志。
请访问如下地址获取完整教程:
安装
快速开始
我们会创建 /api/v1/greeter API 进行验证,同时开启 logging, meta 和 tracing 拦截器以达到目的。
1. 创建 api/v1/greeter.proto
2. 创建 api/v1/gw_mapping.yaml
3. 创建 buf.yaml
4. 创建 buf.gen.yaml
5. 编译 proto file
如下的文件会被创建。
6. 创建 bootA.yaml & serverA.go
Server-A 监听 1949 端口,并且发送请求给 Server-B。
我们通过 rkgrpcctx.InjectSpanToNewContext() 方法把 Tracing 信息注入到 Context 中,发送给 Server-B。
7. 创建 bootB.yaml & serverB.go
Server-B 监听 2008 端口。
8. 文件夹结构
9. 启动 ServerA & ServerB
10. 往 ServerA 发送请求
11. 验证日志
两个服务的日志中,会有同样的 traceId,不同的 requestId。
我们可以通过 grep traceId 来追踪 RPC。
- ServerA
- ServerB
概念
当我们没有使用例如 jaeger 调用链服务的时候,我们希望通过日志来追踪分布式系统里的 RPC 请求。
rk-boot 的拦截器会通过 openTelemetry 库来向日志写入 traceId 来追踪 RPC。
当启动了日志拦截器,原数据拦截器,调用链拦截器的时候,拦截器会往日志里写入如下三种 ID。
EventId
当启动了日志拦截器,EventId 会自动生成。
RequestId
当启动了日志拦截器和原数据拦截器,RequestId 和 EventId 会自动生成,并且这两个 ID 会一致。
即使用户覆盖了 RequestId,EventId 也会保持一致。
TraceId
当启动了调用链拦截器,traceId 会自动生成。
原文链接
本文为阿里云原创内容,未经允许不得转载。