登录
首页 >  Golang >  Go问答

如何确认是否已设置 AWS X-Ray

来源:stackoverflow

时间:2024-03-11 18:06:28 387浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《如何确认是否已设置 AWS X-Ray》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我们有一个在 go 中运行的 aws lambda,初始化时运行以下命令来初始化 aws x-ray

err := xray.configure(xray.config{
  loglevel:       "info",
  serviceversion: "1.2.3",
})

在一个单独的存储库中,我们有一个 utils 存储库,它为我们的内部内容公开了一个 http 库。这是作为 git 子模块导入到所有其他 lambda 中的。代码如下:

ctx, subseg := xray.beginsubsegment(incomingcontext, "outbound http call")
client := xray.client(&http.client{transport: tr})
// further down
client.do(req)
// finally
subseg.close(resp)

当部署在 aws 上时,这会按预期工作,生成漂亮的图表。

问题出在 utils 存储库上运行单元测试。仅在该存储库的上下文中,x-ray 尚未配置,因此在 beginsubsegment 调用中我感到恐慌:

panic: failed to begin subsegment named 'Outbound HTTP call': segment cannot be found.

我想优雅地处理 x-ray 尚未配置的情况,记录它,然后继续执行。

当 beginsubsegment 不返回错误对象时,如何确保正确处理对 beginsubsegment 的调用?


解决方案


在 lambda 的情况下,这段代码执行时没有任何恐慌,因为 lambda 创建了一个外观段,然后您的代码将创建子段。在非 lambda 环境中,您必须先创建一个段,然后再创建子段。如果你不这样做,就会产生恐慌。现在,如果您想记录此恐慌并继续执行单元测试,那么我建议您将 AWS_XRAY_CONTEXT_MISSING 环境变量设置为 LOG_ERROR。它基本上会记录您的恐慌并继续执行您的单元测试。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

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