【问题标题】:Spring rest template with aws x-ray带有 aws x 射线的弹簧休息模板
【发布时间】:2018-01-15 10:47:56
【问题描述】:

我想使用 aws x-ray 跟踪部署为 aws lambdas 的 spring 微服务之间的调用。

设置如下:

  1. 具有 api 端点的微服务 A 部署为 aws lambda

  2. 具有 api 端点的微服务 B 部署为 aws lambda,通过 https 调用微服务 A

两个微服务都包含 xray 的 aws 依赖项:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-xray-recorder-sdk-bom</artifactId>
            <version>1.2.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-core</artifactId>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-apache-http</artifactId>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-aws-sdk</artifactId>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-aws-sdk-instrumentor</artifactId>
    </dependency>
</dependencies>

对于这两个微服务,已通过无服务器应用程序模型 sam.yaml 文件启用跟踪:

Resources:
  FunctionA:
    Type: AWS::Serverless::Function
    Properties:
      Handler: example.HandlerA::handleRequest
      Runtime: java8
      CodeUri: target/foo.jar
      MemorySize: 512
      Tracing: Active
      Policies:
        - AWSLambdaBasicExecutionRole
        - AWSXrayWriteOnlyAccess 
      Timeout: 20
      Events:
        GetResource:
          Type: Api
          Properties:
            Path: /{proxy+}
            Method: any

虽然我可以在 X 射线 Web 界面中看到服务 A 和 B 的单独调用的跟踪,但 B 对 A 的调用不会显示为复合跟踪。

有什么想法吗?可能我需要实例化一个 servlet 过滤器。仅包含依赖项是不够的,对吗?

【问题讨论】:

    标签: spring amazon-web-services aws-lambda aws-api-gateway aws-xray


    【解决方案1】:

    此时,Amazon API Gateway 为not propagating x-amzn-trace-id headers

    听起来好像您的 AWS Lambda 函数可能部署在 API Gateway 端点后面。由于 API Gateway 与 AWS X-Ray 集成的这一限制,今天不可能将此操作作为一个连续的跟踪进行跟踪。

    在单个连续跟踪中跟踪此操作的一种方法是让微服务 B 直接使用 AWS Lambda Invoke API 调用微服务 A。此 API 确实尊重 x-amzn-trace-id 标头(它将自动添加到 Invoke 请求中,因为您已在项目中包含 aws-xray-recorder-sdk-aws-sdk-instrumentor 工件)。

    【讨论】:

    • 哇。真可惜。感谢您的链接。是的,似乎服务 B 需要通过 lambda 调用调用 A 才能获得复合跟踪。
    猜你喜欢
    • 2014-02-28
    • 2020-03-19
    • 2016-12-24
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多