为什么 go-jaeger-client 需要度量和日志的包装器?

Why go-jaeger-client requires wrappers for metrics and logs?

我已经开始使用 go-gRPC-middleware 检测我的 gRPC 服务。我已经使用 zap 和为 Prometheus 公开的指标来处理日志。

现在我正在尝试使用 jaeger go 客户端配置跟踪,它需要我添加围绕度量存储和记录器的包装器。我不确定我是否理解为什么需要这些包装器

https://github.com/jaegertracing/jaeger/blob/bf64373d1e690594fd8c279720faf32722cf1494/examples/hotrod/pkg/tracing/init.go#L46

您可以将其绑定到指标和日志记录框架,但不是必须的。您可以简单地调用 cfg.NewTracer(),如本例所示:

func ExampleFromEnv() {
    cfg, err := jaegercfg.FromEnv()
    if err != nil {
        // parsing errors might happen here, such as when we get a string where we expect a number
        log.Printf("Could not parse Jaeger env vars: %s", err.Error())
        return
    }

    tracer, closer, err := cfg.NewTracer()
    if err != nil {
        log.Printf("Could not initialize jaeger tracer: %s", err.Error())
        return
    }
    defer closer.Close()

    opentracing.SetGlobalTracer(tracer)
    // continue main()
}

来源:https://github.com/jaegertracing/jaeger-client-go/blob/3585cc566102e0ea2225177423e3fcc3d2e5fd7a/config/example_test.go#L88-L105

查看 Jaeger Go Client 自述文件以获取有关 metrics/logging 集成的更多信息:https://github.com/jaegertracing/jaeger-client-go

Jaeger 客户端设计为具有最少的依赖性。我们不知道您的应用程序使用的是 Prometheus 指标还是 Zap 记录器。这就是为什么 jaeger-client-go(以及许多其他语言的 Jaeger 客户端)为 Logger 和 MetricsFactory 提供两个轻量级接口,可以为您的应用程序使用的特定 logs/metrics 后端实现。当然,Prometheus 和 Zap 的绑定已经在 jaeger-lib 中实现,可以选择性地包含。