2

我正在尝试自动检测 AWS SDKs for Java 使用 X-Ray 进行的所有调用。

当您在构建依赖项中包含 AWS SDK Instrumentor 子模块时,适用于 Java 的 X-Ray 开发工具包会自动检测所有 AWS 开发工具包客户端。(来自文档

我已将这些添加到我的 POM
aws-xray-recorder-sdk-core
aws-xray-recorder-sdk-aws-sdk
aws-xray-recorder-sdk-spring
aws-xray-recorder-sdk-aws-sdk-instrumentor

并且正在使用例如aws-java-sdk-ssmaws-java-sdk-sqs

我希望只需将 X-Ray 包添加到我的 POM 并提供足够的 IAM 策略。
但是,当我启动我的应用程序时,会出现以下异常:

com.amazonaws.xray.exceptions.SegmentNotFoundException: Failed to begin subsegment named 'AWSSimpleSystemsManagement': segment cannot be found.

我尝试将 SSM 调用包装在手动段中,这样就可以了,但随后来自另一个 AWS 开发工具包的下一个调用立即引发了类似的异常。

如何实现文档中提到的自动检测?我是不是误会了什么?

4

1 回答 1

0

这取决于您如何在应用程序中调用 AWS 开发工具包。如果您已按照https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java-filters.html将 X-Ray servlet 添加到您的 Spring 应用程序,那么每次您的应用程序收到请求时, X-Ray servlet 过滤器将打开一个段并将其存储在为该请求提供服务的线程中。作为该请求/响应周期的一部分,您进行的任何 AWS 开发工具包调用都将选择该段作为父段。

您收到的错误意味着 X-Ray 仪器尝试将 AWS API 调用记录到子段,但找不到父级(该调用属于哪个请求)。

根据您的使用案例,如果其中一些客户端在后台工作程序中进行调用,您可能希望显式检测某些 AWS 开发工具包客户端并保留其他客户端。

于 2018-03-07T19:30:38.497 回答