5. spring boot集成AWS XRay实现代码性能分析

本文档详细介绍了如何将AWS X-Ray集成到Spring Boot应用中,以实现代码性能分析。内容涵盖AWS X-Ray服务介绍、X-Ray守护程序的安装与运行、Java X-Ray开发工具包的配置、创建XRayFilter进行请求过滤、自定义切面创建子分段以及使用X-Ray SDK for Spring创建子分段。此外,还包括了详细的步骤、配置示例和测试验证过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

什么是 AWS X-Ray

AWS X-Ray 守护程序

Linux下载守护程序

在 Linux 上运行 X-Ray 守护程序

Java 的 AWS X-Ray 开发工具包

创建一个aws子模块

创建子模块

在父模块中对子模块以及xray相关的包进行版本管理

在aws子模块中添加xray,servlet,spring相关的依赖

创建XRayFilter对需要进行监控的请求进行过滤

XRayFilterCofig

XRayFilterCofig 接口

XRayFilterCofigImpl 类

配置application.properties

实现XRayController对xray配置进行设置

实现XrayFilter

对XRayFilter的bean进行注册

使用自定义切面创建子分段

创建切面

配置使用切面

测试

项目地址

使用X-Ray SDK for spring创建子分段

配置spring-data-jpa

修改子模块的pom文件添加

实现继承自AbstractXRayInterceptor的Aspect

测试

项目地址

参考


什么是 AWS X-Ray

AWS X-Ray 是一项服务,收集您应用程序所服务的请求的相关数据,并提供用于查看、筛选和获取数据洞察力的工具,以确定问题和发现优化的机会。对于任何被跟踪的对您应用程序的请求,您不仅可以查看请求和响应的详细信息,还可以查看您的应用程序对下游 AWS 资源、微服务、数据库和 HTTP Web API 进行的调用的详细信息。

X-Ray 开发工具包提供:

  • 拦截器,可添加到您的代码中以跟踪传入 HTTP 请求

  • 客户端处理程序,可分析您的应用程序用来调用其他 AWS 服务的 AWS 开发工具包客户端

  • HTTP 客户端,用于分析对其他内部和外部 HTTP Web 服务的调用

该开发工具包还支持分析对 SQL 数据库的调用、自动 AWS 开发工具包客户端分析以及其他功能。

借助 X-Ray SDK for Java,通过进行两项配置更改,您可以跟踪自己应用程序的所有主要和下游 AWS 资源:

  • 在 WebConfig 类或 web.xml 文件中,向 servlet 配置中添加X-Ray SDK for Java的跟踪筛选器。

  • 将 X-Ray SDK for Java 子模块作为 Maven 或 Gradle 生成配置中的生成依赖项

AWS X-Ray 守护程序

AWS X-Ray 守护程序是一个软件应用程序,它侦听 UDP 端口 2000 上的流量,收集原始分段数据,并将其中继到 AWS X-Ray API。守护程序与 AWS X-Ray 开发工具包结合使用,并且必须正在运行,这样开发工具包发送的数据才能到达 X-Ray 服务。

在 AWS Lambda 和 AWS Elastic Beanstalk 上,使用这些服务与 X-Ray 的集成来运行该守护程序。每次对采样请求调用函数时,Lambda 都会自动运行该守护程序。在 Elastic Beanstalk 上,使用 XRayEnabled 配置选项在您环境中的实例上运行该守护程序。

要在本地、内部部署或其他 AWS 服务上运行 X-Ray 守护程序,请从 Amazon S3 下载它运行它,然后赋予其权限以将分段文档上传到 X-Ray。

Linux下载守护程序

下载地址: https://s3.ap-southeast-1.amazonaws.com/aws-xray-assets.ap-southeast-1/xray-daemon/aws-xray-daemon-linux-3.x.zip 

在 Linux 上运行 X-Ray 守护程序

在本地运行时,守护程序可以从 AWS 开发工具包凭证文件 (您的用户目录中的 .aws/credentials) 或从环境变量读取凭证。

守护程序在端口 2000 上侦听 UDP 数据。您可以使用配置文件和命令行选项更改端口和其他选项。

您可以从命令行运行守护程序可执行文件。使用 -o 选项以本地模式运行,-n 选项设置区域。

~/xray-daemon$ ./xray -o -n ap-southeast-1

要在后台运行守护程序,请使用 &

~/xray-daemon$ ./xray -o -n ap-southeast-1 &

有如下回显表示开启成功

2020-05-16T16:00:53+08:00 [Info] Initializing AWS X-Ray daemon 3.2.0
2020-05-16T16:00:53+08:00 [Info] Using buffer memory limit of 79 MB
2020-05-16T16:00:53+08:00 [Info] 1264 segment buffers allocated
2020-05-16T16:00:53+08:00 [Info] Using region: ap-southeast-1
2020-05-16T16:00:53+08:00 [Info] HTTP Proxy server using X-Ray Endpoint : https://xray.ap-southeast-1.amazonaws.com
2020-05-16T16:00:53+08:00 [Info] Starting proxy http server on 127.0.0.1:2000

使用 pkill 终止在后台运行的守护程序进程。

~$ pkill xray

Java 的 AWS X-Ray 开发工具包

X-Ray SDK for Java是面向 Java Web 应用程序的一组库,提供用于生成跟踪数据并将其发送到 X-Ray 守护程序的类和方法。跟踪数据包括由应用程序提供服务的传入 HTTP 请求的相关信息,以及应用程序使用 AWS 开发工具包、HTTP 客户端或 SQL 数据库连接器对下游服务进行的调用。您还可以手动创建分段并在注释和元数据中添加调试信息。

首先通过添加AWSXRayServletFilter 作为 servlet 筛选器来跟踪传入请求。Servlet 筛选器创建一个分段。当分段打开时,您可以使用开发工具包客户端的方法将信息添加到分段,并创建子分段以跟踪下游调用。开发工具包还会自动记录在分段打开时应用程序引发的异常。

从版本 1.3 开始,您可以使用 Spring 中面向方面的编程 (AOP) 来分析应用程序。这意味着,您可以在应用程序运行于 AWS 上时分析应用程序,而无需向应用程序的运行时添加任何代码。

创建一个aws子模块

创建子模块

该子模块主要用于提供各种aws的服务,与xray相关的所有代码都会放在该模块中。

选中social-network-serverless project,然后Intellij -> File -> New Project,在弹出的对话框中选择Maven, 使用默认配置,然后Next进入下一步配置。

  • 配置项目的名称,位置和artifact信息(可以根据自己需要进行配置),点击Finish完成模块创建。
    • Parent:social-network-serverless
    • Name:social-network-serverless-aws
    • Grouop: com.jessica
    • Artifact:social-network-serverless-aws

在父模块中对子模块以及xray相关的包进行版本管理

修改父模块的pom文件,在dependencyManagement中加入social-network-serverless-aws

<dependency>
    <groupId>com.jessica</groupId>
    <artifactId>social-network-serverless-aws</artifactId>
    <version>${project.version}</version>
</dependency>

添加xray包的版本管理

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

添加servlet-api的版本管理:需要注意的是这里必须使用3.1.0以上的版本,不然的话启动时会出现如下错误: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String。

错误原因是spring boot 2.2.7.RELEASE版本的项目依赖了tomcat-embed-core-9.0.34.jar已经有ServletContext了,并且Servl

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值