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

相关内容

热门资讯

wp系统好玩还是安卓好,WP系... 说到手机操作系统,你是不是也和我一样,对WP系统和安卓系统争论不休呢?今天,咱们就来好好聊聊这个话题...
安卓系统的英语怎么写,Expl... 你有没有想过,当你想向外国朋友介绍你的手机系统时,该怎么表达呢?没错,就是安卓系统!安卓系统,这个陪...
x86刷安卓系统,x86平台刷... 你有没有想过,你的电脑也能装上安卓系统呢?没错,就是那个我们手机上常用的安卓系统!今天,就让我带你一...
安卓如何越狱刷系统,解锁设备潜... 亲爱的安卓用户们,你是否厌倦了系统限制,想要给你的手机来一次彻底的“大变身”?那就跟着我一起探索安卓...
8p安装安卓系统,畅享智能生活 你有没有想过,你的8P手机是不是也能装上安卓系统,让它焕发第二春呢?别小看这个想法,现在就有不少小伙...
安卓系统后台管理模块,高效运行... 你有没有发现,手机里的安卓系统后台管理模块,就像是那个默默无闻的管家,每天都在背后默默守护着你的手机...
奥迪内置安卓系统怎么用,解锁智... 你有没有发现,现在很多高端汽车都开始玩起了智能科技?比如,我最近就入手了一辆奥迪,里面竟然内置了安卓...
索尼上网本装安卓系统,畅享安卓... 你有没有想过,你的索尼上网本装上安卓系统后,会是怎样的场景呢?想象那小小的屏幕上跳动的安卓图标,是不...
安卓得到系统的语言,领略多语言... 你知道吗?最近在安卓系统圈子里,有一件大事儿引起了大家的热议。那就是安卓系统在语言支持方面的重大更新...
安卓系统手机有哪些型号,一网打... 你有没有发现,现在市面上安卓系统手机的品牌和型号真是琳琅满目,让人眼花缭乱呢?今天,就让我带你一起探...
安卓系统关键技术,核心技术解析... 你知道吗?在智能手机的世界里,安卓系统可是当之无愧的“人气王”呢!它就像一位多才多艺的魔术师,总能变...
安卓系统图片不显示了,安卓系统... 手机里的安卓系统图片突然不显示了,这可怎么办呢?别急,让我来帮你一步步解决这个棘手的问题吧!一、检查...
怎样进入安卓系统多任务,安卓系... 你有没有想过,在安卓手机上,怎样轻松地进入多任务界面,让你可以一边聊天一边听歌,或者一边看视频一边回...
ce系统地图和安卓,基于CE系... 你有没有想过,你的手机里那些神奇的地图功能,其实背后有着一套复杂的系统在默默支撑呢?今天,就让我带你...
安卓系统抖音怎么私信,打造个性... 你是不是也和我一样,沉迷于抖音这个短视频的海洋中呢?每天刷着各种搞笑、美食、旅行视频,是不是有时候也...
安卓jfinal医疗系统源码,... 你有没有想过,一款强大的医疗系统竟然可以如此轻巧地运行在你的安卓手机上?没错,今天我要给你揭秘的就是...
安卓系统改蓝牙传输协议,基于安... 你有没有想过,你的安卓手机里的蓝牙传输协议,其实是可以改动的呢?没错,就是那个让你在手机和耳机、汽车...
荣耀安卓怎么变苹果系统,跨平台... 你有没有想过,把你的安卓手机变成苹果系统,是不是就像给手机换了个新灵魂呢?想象那些熟悉的苹果图标在你...
安卓关闭微信定位系统,保护隐私... 你知道吗?现在智能手机的功能越来越强大,但随之而来的是隐私泄露的风险也越来越高。今天,就让我来和你聊...
安卓手机市场有几个系统,用户选... 你有没有发现,现在安卓手机市场上系统种类繁多,让人眼花缭乱?今天,就让我带你一探究竟,看看安卓手机市...