【问题标题】:read apm env variable from env file golang从 env 文件 golang 读取 apm env 变量
【发布时间】:2019-04-15 11:30:48
【问题描述】:

我在我的 go 应用程序中使用弹性 apm 开发我通过终端导出环境变量并且它正在工作。 但现在我想部署应用程序,所以我需要从 .env 文件中读取变量

解释

我在我的应用程序中使用 go.elastic.co/apm/module/apmhttpgo.elastic.co/apm 读取环境变量时, 它看不到ELASTIC_APM_SERVICE_NAMEELASTIC_APM_SERVER_URLELASTIC_APM_SECRET_TOKEN 存在于我的应用文件中的 .env 中。

【问题讨论】:

  • 在初始化或初始化结构之前重新检查 gotenv.Load()
  • @MuhamedKeta gotenv.Load() 运行良好,但问题是go.elastic.co/apm 看不到环境变量
  • 这可能是initialization order 的问题。 go.elastic.co/apm reads the environment variables in its init method。如果没有看到一些代码,我们无法确定或提供解决方案。如果您在加载文件后create your own Tracer 它可能会起作用。
  • @Peter 谢谢彼得,我创建了新的跟踪器,它现在可以工作了
  • @HongboMiao 我希望我的解决方案能帮到你:)

标签: go environment-variables apm


【解决方案1】:

这是我的问题的答案,希望对你有帮助@HongboMiao

// close default Tracer
apm.DefaultTracer.Close()

tracer, err := apm.NewTracer(os.Getenv("ELASTIC_APM_SERVICE_NAME"), os.Getenv("VERSION"))
if err != nil {
    // handle err
}

transport, err := transport.NewHTTPTransport()
if err != nil {
    // handle err
}

transport.SetSecretToken(os.Getenv("ELASTIC_APM_SECRET_TOKEN"))
u, err := url.Parse(os.Getenv("ELASTIC_APM_SERVER_URL"))
if err != nil {
    // handle err
}

transport.SetServerURL(u)
tracer.Transport = transport

// this step will be difference depend on your webserver package
r.Use(apmchi.Middleware(apmchi.WithTracer(tracer)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2020-09-02
    • 2019-04-29
    • 2019-01-29
    • 2021-10-25
    • 2013-03-07
    • 2021-04-22
    • 2020-08-24
    相关资源
    最近更新 更多