【发布时间】:2019-11-26 04:59:46
【问题描述】:
我已经开始使用 go-gRPC-middleware 检测我的 gRPC 服务。我已经使用 zap 和为 Prometheus 公开的指标来运行日志。
现在我正在尝试使用 jaeger go 客户端配置跟踪,它需要我在指标存储和记录器周围添加包装器。我不确定我是否理解为什么需要这些包装器
【问题讨论】:
标签: go opentracing jaeger
我已经开始使用 go-gRPC-middleware 检测我的 gRPC 服务。我已经使用 zap 和为 Prometheus 公开的指标来运行日志。
现在我正在尝试使用 jaeger go 客户端配置跟踪,它需要我在指标存储和记录器周围添加包装器。我不确定我是否理解为什么需要这些包装器
【问题讨论】:
标签: go opentracing jaeger
Jaeger 客户端旨在具有最少的依赖项。我们不知道您的应用程序使用的是 Prometheus 指标还是 Zap 记录器。这就是为什么jaeger-client-go(以及其他许多其他语言的 Jaeger 客户端)为 Logger 和 MetricsFactory 提供两个轻量级接口的原因,可以为您的应用程序正在使用的特定日志/指标后端实现。当然,Prometheus 和 Zap 的绑定已经在 jaeger-lib 中实现了,可以随意包含。
【讨论】:
您可以将其绑定到指标和日志框架,但您不必这样做。您可以简单地调用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()
}
查看 Jaeger Go 客户端自述文件以获取有关指标/日志集成的更多信息:https://github.com/jaegertracing/jaeger-client-go
【讨论】:
jaeger-client-go 是我正在使用的。我有单独的跟踪工作,但我想建立绑定。我的困惑来自于我不能将*zap.Logger 和*prometheus.Registry 传递给cfg.NewTracer(config.Logger(...)) 以获取jaeger-client-go。相反,我需要按照hotrod 示例将其包装到一个简化的记录器和一些指标工厂中。我是这个系统的新手,想知道为什么需要它。