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

相关内容

热门资讯

安卓系统与电脑系统共存,探索多... 你有没有想过,你的手机里那个熟悉的安卓系统,竟然也能在电脑上大显身手?没错,安卓系统与电脑系统共存,...
安卓子系统网络异常,安卓子系统... 手机突然卡壳了,网络也变得不顺畅,是不是安卓子系统出了什么问题?别急,今天就来给你详细解析一下安卓子...
蒙氏手记安卓系统,探索安卓系统... 你有没有发现,手机里的安卓系统越来越智能了?今天,就让我带你一起探索一下这个神奇的蒙氏手记安卓系统,...
君威导航升级安卓系统,畅享智能... 你有没有发现,你的君威导航系统最近变得聪明多了?没错,它刚刚完成了一次大变身——升级到了安卓系统!这...
安卓系统是怎么制作广告,从原理... 你有没有想过,那些在安卓手机上跳来跳去的广告是怎么制作出来的呢?是不是觉得它们就像魔法一样,突然就出...
电视市场下载安卓系统,搭载安卓... 你有没有发现,最近家里的电视越来越智能了?没错,我说的就是那些可以下载安卓系统的电视。这可不是什么新...
电脑远程改安卓系统ip,轻松实... 你有没有想过,你的安卓手机里的IP地址其实是可以远程修改的?没错,就是那种让你的手机瞬间变成网络小精...
安卓系统卡顿底层,底层原因与优... 手机用久了是不是感觉越来越卡?尤其是安卓系统,有时候点个图标都要等半天,真是让人头疼。今天,就让我带...
盆益康ai安卓系统,智能健康管... 你有没有听说过那个超酷的盆益康AI安卓系统?最近,我在网上闲逛的时候,无意间发现了这个神器,简直让我...
杂牌led电视安卓系统破解,揭... 亲爱的读者,你是否曾在夜深人静的时候,对着那台杂牌LED电视,心生一探究竟的欲望?没错,就是那款看似...
安卓系统最好的试玩软件,最佳试... 你有没有想过,在安卓系统上,有一款试玩软件能让你轻松体验各种游戏,还能赚点小钱?没错,今天就要给你揭...
安卓机哪家系统流畅,哪家品牌更... 你有没有发现,现在手机市场上安卓机的品牌真是琳琅满目,让人挑花了眼。不过,说到安卓机哪家系统流畅,这...
黑脸表情安卓系统怎么打,轻松掌... 亲爱的手机控们,你是否曾在聊天时无意间发送了一个黑脸表情,然后突然意识到这并不是你想要表达的情绪?别...
安卓手机系统哪里生产,国产芯片... 你有没有想过,那部陪伴你日常生活的安卓手机,它的系统究竟是在哪里诞生的呢?是不是觉得这个问题有点深奥...
哪些手机纯安卓系统,尽享流畅 你有没有想过,在这个五花八门、琳琅满目的手机世界里,哪些手机是纯纯的安卓系统呢?别急,今天我就来给你...
安卓系统怎么换旧版,轻松换回旧... 手机用久了,是不是觉得安卓系统越来越卡,想换回旧版系统,找回那份熟悉的感觉?别急,今天就来手把手教你...
大医精诚安卓系统,安卓系统下的... 亲爱的读者,你是否曾想过,那些在手机上为我们提供便捷生活的安卓系统,其实背后有着一群默默奉献的大医们...
平板电脑安卓系统flash插件... 你有没有发现,现在用平板电脑上网,有时候会遇到一些网页上那些炫酷的动画和游戏,它们就像魔法一样吸引着...
海尔的系统都是安卓吗,安卓生态... 你有没有想过,家里的家电是不是都悄悄地换上了安卓系统呢?比如说,那个一直默默无闻的冰箱,还有那个每天...
安卓系统能不能更新系统,畅享智... 你有没有想过,你的安卓手机是不是也能像苹果手机那样,时不时地来个系统升级呢?这可是个让人兴奋的话题,...