为什么go-jaeger-client要求使用包装器来度量和记录日志?

时间:2019-11-26 04:59:46

标签: go opentracing jaeger

我开始使用go-gRPC-middleware来检测gRPC服务。我已经使用zap记录日志,并为Prometheus公开了指标。

现在,我要尝试使用Jaeger Go客户端配置跟踪,这需要我在指标存储和记录器周围添加包装器。我不确定我为什么要使用这些包装器

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

2 个答案:

答案 0 :(得分:1)

Jaeger客户端被设计为具有最小的依赖关系集。我们不知道您的应用程序是使用Prometheus指标还是Zap记录器。这就是jaeger-client-go(以及其他许多其他Jaeger客户端其他语言)为Logger和MetricsFactory提供两个轻量级接口的原因,可以为应用程序所使用的特定日志/度量标准后端实现这些接口。当然,在jaeger-lib中已经实现了Prometheus和Zap的绑定,并且可以选择包括它们。

答案 1 :(得分:0)

您可以将其绑定到指标和日志记录框架,但不必这样做。您可以仅调用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自述文件,以获取有关度量标准/日志记录集成的更多信息:https://github.com/jaegertracing/jaeger-client-go