Spring 使用 aws x-ray 的休息模板
Spring rest template with aws x-ray
我想使用 aws x-ray 跟踪部署为 aws lambda 的 spring 微服务之间的调用。
设置如下:
具有 api 端点的微服务 A 部署为 aws lambda
具有 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-ray Web 界面中看到对服务 A 和 B 的单独调用的跟踪,但通过 A 调用 B 不会显示为复合跟踪。
有什么想法吗?可能我需要实例化一个 servlet 过滤器。仅仅包括依赖项是不够的,对吗?
此时亚马逊API网关为not propagating x-amzn-trace-id
headers。
听起来好像您的 AWS Lambda 函数可能部署在 API 网关端点后面。由于 API Gateway 与 AWS 集成的这一限制 X-Ray,今天无法将此操作作为一个连续的跟踪进行跟踪。
在单个连续跟踪中跟踪此操作的一种方法是让微服务 B 直接使用 AWS Lambda Invoke
API 调用微服务 A。此 API 确实尊重 x-amzn-trace-id
header(它将自动添加到 Invoke
请求中,因为您已将 aws-xray-recorder-sdk-aws-sdk-instrumentor
工件包含在项目中) .
我想使用 aws x-ray 跟踪部署为 aws lambda 的 spring 微服务之间的调用。
设置如下:
具有 api 端点的微服务 A 部署为 aws lambda
具有 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-ray Web 界面中看到对服务 A 和 B 的单独调用的跟踪,但通过 A 调用 B 不会显示为复合跟踪。
有什么想法吗?可能我需要实例化一个 servlet 过滤器。仅仅包括依赖项是不够的,对吗?
此时亚马逊API网关为not propagating x-amzn-trace-id
headers。
听起来好像您的 AWS Lambda 函数可能部署在 API 网关端点后面。由于 API Gateway 与 AWS 集成的这一限制 X-Ray,今天无法将此操作作为一个连续的跟踪进行跟踪。
在单个连续跟踪中跟踪此操作的一种方法是让微服务 B 直接使用 AWS Lambda Invoke
API 调用微服务 A。此 API 确实尊重 x-amzn-trace-id
header(它将自动添加到 Invoke
请求中,因为您已将 aws-xray-recorder-sdk-aws-sdk-instrumentor
工件包含在项目中) .