amazon-web-services - 如何检查 AWS X-Ray 是否已配置

标签 amazon-web-services go error-handling aws-xray

我们有一个在 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 :

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

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

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

最佳答案

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

关于amazon-web-services - 如何检查 AWS X-Ray 是否已配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60485688/

相关文章:

hadoop - 连接 S3 文件以在 EMR 中读取

amazon-web-services - 有没有办法使用 s3.putbucketreplication API 为 AWS S3 复制管理启用 ReplicationConfiguration?

hadoop - hadoop中的不同文件进程

regex - Go:用逗号分隔字符串,但忽略双引号内的逗号

angular - 发生错误时获取完整的 http 响应

amazon-web-services - Amazon Athena 可以用于查询动态架构吗?

go - 为AirOS编译golang

json - 使用 json.Unmarshal 与 json.NewDecoder.Decode 解码 JSON

php - PHP警告和通知显示,其中display_errors已打开但未记录

java - 错误: ORA-00900 Invalid SQLStatement but statement still works as intended