【问题标题】:Automatically instrumenting Java application using AWS X-Ray使用 AWS X-Ray 自动检测 Java 应用程序
【发布时间】:2018-03-07 10:44:44
【问题描述】:

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

当您在构建依赖项中包含 AWS SDK Instrumentor 子模块时,适用于 Java 的 X-Ray 开发工具包会自动检测所有 AWS 开发工具包客户端。 (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 开发工具包的下一次调用立即引发了类似的异常。

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

【问题讨论】:

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


    【解决方案1】:

    这取决于您如何在应用程序中调用 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 开发工具包客户端并保留其他客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多