在使用 go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin 时,我们需要知道 OpenTelemetry 的基本概念,其中包括 Tracer、Span 和 Exporter 等。这些是用于收集和传输遥测数据的关键组件。otelgin 中间件用于自动化地在 Gin 框架中收集请求相关的遥测数据。
要配置数据存储的后端,您需要设置一个或多个 Exporter。Exporter 负责将收集到的遥测数据发送到您选择的后端服务,例如 Prometheus、Jaeger、Zipkin 等。以下是配置 Exporter 并将其与 otelgin 中间件集成的基本步骤:
1. 导入必要的包
首先,确保我们已经安装了所需的包:
import (
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
"go.opentelemetry.io/otel/sdk/resource"
"go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/semconv"
otelgin "go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin"
)
2. 配置 Exporter
这里以 stdout Exporter 为例,您可以选择其他支持的 Exporter:
func main() {
// 创建并配置 stdout 导出器
exporter, err := stdouttrace.New(stdouttrace.WithPrettyPrint())
if err != nil {
log.Fatalf("创建导出器失败: %v", err)
}
// 配置资源信息
resource, err := resource.New(context.Background(),
resource.WithAttributes(
semconv.ServiceNameKey.String("您的服务名称"),
),
)
if err != nil {
log.Fatalf("配置资源信息失败: %v", err)
}
// 创建 tracer 提供者
tp := trace.NewTracerProvider(
trace.WithBatcher(exporter),
trace.WithResource(resource),
)
otel.SetTracerProvider(tp)
// 其他代码
}
3. 在 Gin 中间件中使用 otelgin
在我们的 Gin 应用程序中添加 otelgin 中间件:
func main() {
// ...
// 创建 Gin 路由器
r := gin.Default()
// 添加 OpenTelemetry 中间件
r.Use(otelgin.Middleware("您的服务名称"))
// 定义路由和处理函数
// ...
// 启动 Gin 服务器
r.Run()
}
4. 启动并测试
运行我们的 Gin 应用程序,所有通过 Gin 处理的请求现在将自动产生遥测数据,并通过配置的 Exporter 发送到指定的后端。
额外说明
- 可以选择不同的 Exporter(如 Jaeger, Zipkin 等),配置方式大同小异。
- 确保后端服务(如 Jaeger, Zipkin 等)已经运行并可以接收数据。
- OpenTelemetry 是一个相对复杂的系统,可能需要一定时间来熟悉其工作原理和配置方式。