aws xray 使用xray集成java相关框架和sdk
创始人
2025-05-28 21:52:30
0

运行xray守护进程

在windows中的powershell中运行以下脚本即可,可执行文件解压在C:\Program Files\Amazon\XRay路径,xray daemon默认监听2000端口,可以使用配置文件指定

if ( Get-Service "AWSXRayDaemon" -ErrorAction SilentlyContinue ) {sc.exe stop AWSXRayDaemonsc.exe delete AWSXRayDaemon
}$targetLocation = "C:\Program Files\Amazon\XRay"
if ((Test-Path $targetLocation) -eq 0) {mkdir $targetLocation
}$zipFileName = "aws-xray-daemon-windows-service-3.x.zip"
$zipPath = "$targetLocation\$zipFileName"
$destPath = "$targetLocation\aws-xray-daemon"
if ((Test-Path $destPath) -eq 1) {Remove-Item -Recurse -Force $destPath
}$daemonPath = "$destPath\xray.exe"
$daemonLogPath = "$targetLocation\xray-daemon.log"
$url = "https://s3.dualstack.us-west-2.amazonaws.com/aws-xray-assets.us-west-2/xray-daemon/aws-xray-daemon-windows-service-3.x.zip"Invoke-WebRequest -Uri $url -OutFile $zipPath
Add-Type -Assembly "System.IO.Compression.Filesystem"
[io.compression.zipfile]::ExtractToDirectory($zipPath, $destPath)New-Service -Name "AWSXRayDaemon" -StartupType Automatic -BinaryPathName "`"$daemonPath`" -f `"$daemonLogPath`""
sc.exe start AWSXRayDaemon

默认的配置文件如下,具体的字段解释可参考官方文档

https://docs.aws.amazon.com/zh_cn/xray/latest/devguide/xray-daemon-configuration.html

# Maximum buffer size in MB (minimum 3). Choose 0 to use 1% of host memory.
TotalBufferSizeMB: 0
# Maximum number of concurrent calls to AWS X-Ray to upload segment documents.
Concurrency: 8
Region: "cn-north-1"
# Change the X-Ray service endpoint to which the daemon sends segment documents.
Endpoint: ""
Socket:UDPAddress: "127.0.0.1:2000"TCPAddress: "127.0.0.1:2000"
Logging:LogRotation: trueLogLevel: "debug"LogPath: ""
LocalMode: false
ResourceARN: ""
RoleARN: ""
NoVerifySSL: false
ProxyAddress: ""
Version: 2

启动之后查看日志C:\Program Files\Amazon\XRay\xray-daemon.log有如下信息

2023-xxxxxxxxx [Info] Initializing AWS X-Ray daemon 3.3.6
2023-xxxxxxxxx [Info] Using buffer memory limit of 154 MB
2023-xxxxxxxxx [Info] 2345 segment buffers allocated
2023-xxxxxxxxx [Info] Using region: cn-north-1
2023-xxxxxxxxx [Info] HTTP Proxy server using X-Ray Endpoint : https://xray.cn-north-1.amazonaws.com.cn
2023-xxxxxxxxx [Info] Starting proxy http server on 127.0.0.1:2000

为jvm配置代理插件

下载java代理的最新发行版

  • latest distribution of the agent

修改jvm参数

-javaagent:C:\xray-agent\disco\disco-java-agent.jar=pluginPath=C:\xray-agent\disco\disco-plugins

tomcat和servlet服务器配置

在windows上安装tomcat,启动之后默认监听8080端口

tomcat实现了jsp/servlet规范,是一个轻量级服务器,开源免费

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bqYrHc8h-1678877992979)(assets/image-20230314222014253.png)]

目录结构如下,在bin目录中启停服务器

在这里插入图片描述

常见问题

  • 启动失败没有错误,java环境变量没有配置
  • 端口被占用
  • 服务器启动但有异常,检查异常的web项目

idea集成tomca

  • 解决tomcat中文乱码的问题

在这里插入图片描述

tomcat应用的结构如下

myapp--------------应用名称index.htmlcss/index.cssjs/index.jsWEB-INF--------如果有web.xml或者.class文件时,该目录必须存在,且严格区分大小写。该目录下的资源客户端无法直接访问classes----------------web应用的class文件(加载顺序:class,lib目录中的jar包,tomcat的lib目录中的jar包。优先级依次降低)lib--------------------web应用所需的jar包(tomcat的lib目录下jar为所有应用共享)web.xml----------------web应用的主配置文件

创建javaee项目,2022版本的idea不能直接创建javaee项目,搜索add framework支持,选择web application即可。按照以下文章配置

https://blog.csdn.net/m0_64351669/article/details/127309413

之后直接在idea中启动tomcat,查看index.jsp是否显示

我们使用servlet 3.0,通过注解配置servlet类

@WebServlet("/student")
public class StudentServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {System.out.println("test list bucket");final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.CN_NORTH_1)// 对单个client进行追踪.withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder())).build();List buckets = s3.listBuckets();System.out.println("Your {S3} buckets are:");for (Bucket b : buckets) {System.out.println("* " + b.getName());}String str = "example string for test";ServletOutputStream sos = resp.getOutputStream();resp.setContentType("text/html;charset=UTF-8");sos.write(str.getBytes("UTF-8"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {doGet(req, resp);}
}

手动配置下过滤器,跟踪传入请求

https://docs.aws.amazon.com/zh_cn/xray/latest/devguide/xray-sdk-java-filters.html

 AWSXRayServletFiltercom.amazonaws.xray.javax.servlet.AWSXRayServletFilterfixedNameMyAppAWSXRayServletFilter*

springboot配置

有一个github仓库提供了简单的示例demo

https://github.com/anthunt/spring-boot-aws-xray-sample

application的配置和示例片段如下,controller开启了xray追踪注解

@RestController
@XRayEnabled
@RequestMapping("/api")
public class TestController {@Autowiredprivate TestService testService;@RequestMapping("index")public String index() {testService.test("test_bucket");return "HERE";}
}

查看application配置文件,xray

...
logging:file: ./log/appLog/${spring.application.name}.logpattern:file: "%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %X{AWS-XRAY-TRACE-ID} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"console: "%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %X{AWS-XRAY-TRACE-ID} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"level:com.amazonaws.xray: DEBUGcom.anthunt.aws.spring.boot.xray: DEBUGorg.springframework.cloud.openfeign: ERRORfeign.Logger: ERRORorg.apache.http: ERROR

手动发送分段

编写发送分段的逻辑

public class Main {public static void main(String[] args) {System.out.println("Hello world!");AWSXRayRecorder xrayRecorder = AWSXRayRecorderBuilder.defaultRecorder();xrayRecorder.beginSegment("testsegment");Subsegment subsegment = xrayRecorder.beginSubsegment("providedMovie");try {final AmazonS3 s3 = AmazonS3ClientBuilder.standard()// 对单个client开启追踪.withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder())).withRegion(Regions.CN_NORTH_1).build();List buckets = s3.listBuckets();System.out.println("Your {S3} buckets are:");for (Bucket b : buckets) {System.out.println("* " + b.getName());}} catch (RuntimeException e) {subsegment.addException(e);subsegment.setError(true);} finally {xrayRecorder.endSubsegment();}xrayRecorder.endSegment();}
}

对于aws sdk相关的追踪,需要额外进行配置

https://docs.amazonaws.cn/zh_cn/xray/latest/devguide/xray-sdk-java-awssdkclients.html

当在依赖中导入aws-sdkaws-sdk-instrumentor,会对当前项目中使用的所有aws客户端启动追踪。如果需要最单独的aws client进行追踪,需要去除aws-sdk-instrumentor子模块的依赖,然后配置具体的客户端。例如如下dynamodb客户端

private AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().withRegion(Regions.fromName(System.getenv("AWS_REGION"))).withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder())).build();

此外还可以手动发送请求的时候创建追踪

https://docs.amazonaws.cn/zh_cn/xray/latest/devguide/xray-sdk-java-httpclients.html

相关内容

热门资讯

电视安卓系统哪个品牌好,哪家品... 你有没有想过,家里的电视是不是该升级换代了呢?现在市面上电视品牌琳琅满目,各种操作系统也是让人眼花缭...
安卓会员管理系统怎么用,提升服... 你有没有想过,手机里那些你爱不释手的APP,背后其实有个强大的会员管理系统在默默支持呢?没错,就是那...
安卓系统软件使用技巧,解锁软件... 你有没有发现,用安卓手机的时候,总有一些小技巧能让你玩得更溜?别小看了这些小细节,它们可是能让你的手...
安卓系统提示音替换 你知道吗?手机里那个时不时响起的提示音,有时候真的能让人心情大好,有时候又让人抓狂不已。今天,就让我...
安卓开机不了系统更新 手机突然开不了机,系统更新还卡在那里,这可真是让人头疼的问题啊!你是不是也遇到了这种情况?别急,今天...
安卓系统中微信视频,安卓系统下... 你有没有发现,现在用手机聊天,视频通话简直成了标配!尤其是咱们安卓系统的小伙伴们,微信视频功能更是用...
安卓系统是服务器,服务器端的智... 你知道吗?在科技的世界里,安卓系统可是个超级明星呢!它不仅仅是个手机操作系统,竟然还能成为服务器的得...
pc电脑安卓系统下载软件,轻松... 你有没有想过,你的PC电脑上安装了安卓系统,是不是瞬间觉得世界都大不一样了呢?没错,就是那种“一机在...
电影院购票系统安卓,便捷观影新... 你有没有想过,在繁忙的生活中,一部好电影就像是一剂强心针,能瞬间让你放松心情?而我今天要和你分享的,...
安卓系统可以写程序? 你有没有想过,安卓系统竟然也能写程序呢?没错,你没听错!这个我们日常使用的智能手机操作系统,竟然有着...
安卓系统架构书籍推荐,权威书籍... 你有没有想过,想要深入了解安卓系统架构,却不知道从何下手?别急,今天我就要给你推荐几本超级实用的书籍...
安卓系统看到的炸弹,技术解析与... 安卓系统看到的炸弹——揭秘手机中的隐形威胁在数字化时代,智能手机已经成为我们生活中不可或缺的一部分。...
鸿蒙系统有安卓文件,畅享多平台... 你知道吗?最近在科技圈里,有个大新闻可是闹得沸沸扬扬的,那就是鸿蒙系统竟然有了安卓文件!是不是觉得有...
宝马安卓车机系统切换,驾驭未来... 你有没有发现,现在的汽车越来越智能了?尤其是那些豪华品牌,比如宝马,它们的内饰里那个大屏幕,简直就像...
p30退回安卓系统 你有没有听说最近P30的用户们都在忙活一件大事?没错,就是他们的手机要退回安卓系统啦!这可不是一个简...
oppoa57安卓原生系统,原... 你有没有发现,最近OPPO A57这款手机在安卓原生系统上的表现真是让人眼前一亮呢?今天,就让我带你...
安卓系统输入法联想,安卓系统输... 你有没有发现,手机上的输入法真的是个神奇的小助手呢?尤其是安卓系统的输入法,简直就是智能生活的点睛之...
怎么进入安卓刷机系统,安卓刷机... 亲爱的手机控们,你是否曾对安卓手机的刷机系统充满好奇?想要解锁手机潜能,体验全新的系统魅力?别急,今...
安卓系统程序有病毒 你知道吗?在这个数字化时代,手机已经成了我们生活中不可或缺的好伙伴。但是,你知道吗?即使是安卓系统,...
奥迪中控安卓系统下载,畅享智能... 你有没有发现,现在汽车的中控系统越来越智能了?尤其是奥迪这种豪华品牌,他们的中控系统简直就是科技与艺...