是否有任何配置不在特定环境中使用跟踪
Are there any config NOT to use trace on specific environment
现在我在 GAE 上部署了一个带有堆栈驱动程序跟踪的 Golang 应用程序。
关于 stackdriver Trace,为了获取自定义跨度数据,我确实在我的代码中进行了设置,比如
exporter, err := stackdriver.NewExporter(stackdriver.Options{
ProjectID: os.Getenv("GOOGLE_CLOUD_PROJECT"),
})
if err != nil {
log.Fatal(err)
}
trace.RegisterExporter(exporter)
client := &http.Client{
Transport: &ochttp.Transport{
// Use Google Cloud propagation format.
Propagation: &propagation.HTTPFormat{},
},
}
参考。 https://cloud.google.com/trace/docs/setup/go
在 GAE 上,我成功地在我的 GCP 控制台上查看了跟踪记录。
但是,我不想在我的本地开发环境中跟踪这些日志(我正在使用 docker)。目前,我尝试 运行 我的应用程序 docker, nil pointer panic 出现在 Span.Export()
上,可以从 Span.End()
.
调用
所以,我想知道是否有人知道在特定环境中禁用 stackdriver trace 的方法(对于我的情况,docker)。
否则,我是否应该检查跟踪配置的情况,如下所示?
if trace.projectId != "" {
ctx := reque.Context()
_, span := trace.StartSpan(ctx,"Span blahblah")
defer span.End()
}
Google 没有必要在跟踪代码中添加您需要的额外逻辑,GAE 应用程序被检测,以便在 GAE 应用程序在某处执行时禁用该跟踪代码第三方环境,如 Docker 本地。该问题的答案很可能是 "No, there is no magic config for that"。因此,如何解决这个问题取决于您。
作为一个总体思路:遵循 Emile Pels 提供的 [NoopExporter] 的方法并承认我们无法使用 "magic config" 摆脱跟踪代码的事实,如果我开发我在 Python 中的应用程序 我考虑过使用装饰器作为包装器将智能部分带入 Trace 调用,或将它们重新定义为模拟函数。似乎 Golang 没有直接模拟 Python 装饰器,但这个功能可以以某种方式实现。 Internet 上正在对此进行讨论,例如此处:
现在我在 GAE 上部署了一个带有堆栈驱动程序跟踪的 Golang 应用程序。 关于 stackdriver Trace,为了获取自定义跨度数据,我确实在我的代码中进行了设置,比如
exporter, err := stackdriver.NewExporter(stackdriver.Options{
ProjectID: os.Getenv("GOOGLE_CLOUD_PROJECT"),
})
if err != nil {
log.Fatal(err)
}
trace.RegisterExporter(exporter)
client := &http.Client{
Transport: &ochttp.Transport{
// Use Google Cloud propagation format.
Propagation: &propagation.HTTPFormat{},
},
}
参考。 https://cloud.google.com/trace/docs/setup/go
在 GAE 上,我成功地在我的 GCP 控制台上查看了跟踪记录。
但是,我不想在我的本地开发环境中跟踪这些日志(我正在使用 docker)。目前,我尝试 运行 我的应用程序 docker, nil pointer panic 出现在 Span.Export()
上,可以从 Span.End()
.
所以,我想知道是否有人知道在特定环境中禁用 stackdriver trace 的方法(对于我的情况,docker)。
否则,我是否应该检查跟踪配置的情况,如下所示?
if trace.projectId != "" {
ctx := reque.Context()
_, span := trace.StartSpan(ctx,"Span blahblah")
defer span.End()
}
Google 没有必要在跟踪代码中添加您需要的额外逻辑,GAE 应用程序被检测,以便在 GAE 应用程序在某处执行时禁用该跟踪代码第三方环境,如 Docker 本地。该问题的答案很可能是 "No, there is no magic config for that"。因此,如何解决这个问题取决于您。
作为一个总体思路:遵循 Emile Pels 提供的 [NoopExporter] 的方法并承认我们无法使用 "magic config" 摆脱跟踪代码的事实,如果我开发我在 Python 中的应用程序 我考虑过使用装饰器作为包装器将智能部分带入 Trace 调用,或将它们重新定义为模拟函数。似乎 Golang 没有直接模拟 Python 装饰器,但这个功能可以以某种方式实现。 Internet 上正在对此进行讨论,例如此处: