使用AWS X-Ray自动检测Java应用程序

时间:2018-03-07 10:44:45

标签: amazon-web-services aws-sdk aws-xray

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

  

当您在构建依赖项中包含AWS SDK Instrumentor子模块时,X-Ray SDK for Java会自动检测所有AWS SDK客户端。   (from the documentation

我已将这些添加到我的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 SDK的下一次调用会立即引发类似的异常。

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

1 个答案:

答案 0 :(得分:0)

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

您获得的错误意味着X-Ray工具会尝试将AWS API调用记录到子段中,但无法找到父级(请求此调用属于该级别)。

根据您的使用案例,如果其中一些客户端正在后台工作人员中进行呼叫,您可能希望明确地检测某些AWS SDK客户端并使其他客户端保持原状。