登录
首页 >  Golang >  Go问答

在 Go 语言中利用 Datadog 实现性能监控

来源:stackoverflow

时间:2024-03-24 12:03:45 263浏览 收藏

在 Go 应用程序中,尽管遵循了 Datadog 指南,但跟踪数据仅显示 HTTP 请求信息,而没有显示 MongoDB 查询执行的痕迹。要解决此问题,需要在所有处理程序中使用 `request.context()`,因为该上下文包含跟踪跨度 ID,可用于将跨度连接在一起。此外,对于已用库(如 MongoDB),需要使用专门的检测,例如 `otelmongo`,以便跟踪库操作并将其与父范围连接起来。

问题内容

我在 go 中构建了一个演示 rest api,使用 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

谢谢。


正确答案


最重要的是,在所有处理程序中,您需要使用 request.context()

ctx := c.request.context()

除了其他原因之外,该上下文包含当前跟踪跨度 id,并且是将跨度连接在一起的最佳选择。

使用该上下文,您可以按照 official documentation 中所述检测代码部分:

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 传播到该操作中,它就会连接到父范围。

到这里,我们也就讲完了《在 Go 语言中利用 Datadog 实现性能监控》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>