2

我想使用 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 过滤器。仅仅包括依赖项是不够的,对吗?

4

1 回答 1

3

目前,Amazon API Gateway不传播x-amzn-trace-id标头

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

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

于 2018-01-15T19:52:28.840 回答