我在Go中构建了一个演示REST,其中MongoDB作为数据存储,Gin作为HTTP框架。我已经遵循了Datadog网站上的所有说明,然而,我得到的痕迹很少或根本没有信息。追踪到的只有http.request。在Datadog博客上有一个带有Go跟踪的截图(见下文)。

下面是我所看到的--在请求中没有执行MongoDB查询的跟踪。

是否有其他配置或手动报告,我必须做?
我正在启动Datadog跟踪器,主要功能如下:
rules := []tracer.SamplingRule{tracer.RateRule(1)}
tracer.Start(
tracer.WithSamplingRules(rules),
tracer.WithService("Go Mongo"),
tracer.WithEnv("dev"),
)
defer tracer.Stop()完整代码可在以下网址获得:https://github.com/NG235/go-mongo
谢谢。
发布于 2022-07-07 02:10:16
首先,在所有处理程序中,您需要使用request.Context()
ctx := c.Request.Context()除了其他原因外,该上下文还包含当前的跟踪跨度ID,这是将跨范围连接在一起的最佳选择。
使用该上下文,您可以检测代码的各个部分,如正式文件中所述。
newCtx, span := otel.Tracer(name).Start(ctx, "Run")
defer span.End()最后一部分是像MongoDB这样的用过的库的工具。
import (
"go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo"
)
func Connect() *mongo.Database {
opts := options.Client()
opts.Monitor = otelmongo.NewMonitor()
opts.ApplyURI("mongodb://root:root@localhost:27017")
client, err := mongo.Connect(context.Background(), opts)现在,每个MongoDB操作都被跟踪,如果将request.Context传播到该操作中,它将连接到父span。
https://stackoverflow.com/questions/72866729
复制相似问题