OpenTelemetry链路跟踪示例
Code Source: https://github.com/gogf/examples/tree/main/observability/trace/otlp
简介
本目录包含了演示在GoFrame应用程序中使用不同方法导出OpenTelemetry链路跟踪数据的示例。包括:
-
基于gRPC的导出 (
grpc/
)- 使用gRPC协议传输链路跟踪数据
- 适用于高性能、流式链路跟踪数据导出
- 支持双向流和连接复用
-
基于HTTP的导出 (
http/
)- 使用HTTP协议传输链路跟踪数据
- 适用于有HTTP代理或防火墙限制的环境
- 配置和调试更简单
目录结构
.
├── grpc/ # 基于gRPC的链路跟踪示例
│ └── main.go # gRPC链路跟踪导出器实现
├── http/ # 基于HTTP的链路跟踪示例
│ └── main.go # HTTP链路跟踪导出器实现
├── go.mod # Go模块文件
└── go.sum # Go模块校验和
环境要求
- Go 1.22 或更高版本
- GoFrame框架
- GoFrame OpenTelemetry gRPC链路跟踪
- GoFrame OpenTelemetry HTTP链路跟踪
前置条件
- 运行Jaeger实例:
docker run --rm --name jaeger \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 14250:14250 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 \
jaegertracing/all-in-one:1.55
导出方法对比
gRPC导出 (grpc/)
-
优势:
- 更高性能
- 双向流传输
- 连接复用
- 更适合大量链路跟踪数据
-
配置:
- 需要gRPC端点
- 支持认证令牌
- 可配置连接设置
-
使用场景:
- 大量链路跟踪数据
- 微服务架构
- 性能关键系统
HTTP导出 (http/)
-
优势:
- 设置更简单
- 可通过HTTP代理
- 更易调试
- 更好的防火墙兼容性
-
配置:
- 需要HTTP端点
- 支持路径配置
- 标准HTTP设置
-
使用场景:
- 有HTTP代理的环境
- 简单部署要求
- 开发和测试
使用说明
gRPC导出示例
-
进入gRPC示例目录:
cd grpc
-
运行示例:
go run main.go
HTTP导出示例
-
进入HTTP示例目录:
cd http
-
运行示例:
go run main.go
-
查看链路跟踪: 在浏览器中打开 http://localhost:16686 查看Jaeger UI中的链路跟踪信息。
实现说明
两个示例都演示了:
-
链路跟踪上下文管理
// 创建新的链路跟踪span
ctx, span := gtrace.NewSpan(gctx.New(), "StartRequests")
defer span.End()
// 设置链路跟踪的baggage值
ctx = gtrace.SetBaggageValue(ctx, "name", "john") -
错误处理
// 初始化导出器
shutdown, err = otlpgrpc.Init(serviceName, endpoint, traceToken)
if err != nil {
g.Log().Fatal(ctx, err)
}
defer shutdown(ctx) -
配置管理
// gRPC配置
const (
serviceName = "otlp-grpc-client"
endpoint = "tracing-analysis-dc-bj.aliyuncs.com:8090"
traceToken = "******_******"
)
// HTTP配置
const (
serviceName = "otlp-http-client"
endpoint = "tracing-analysis-dc-hz.aliyuncs.com"
path = "adapt_******_******/api/otlp/traces"
)