我正在尝试使用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-ssm
和aws-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的下一次调用会立即引发类似的异常。
如何实现文档中提到的自动检测?我误解了什么吗?
答案 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客户端并使其他客户端保持原状。