当前位置: 首页 > news >正文

揭开应用程序的神秘面纱:深入了解 AWS X-Ray

1.AWS X-Ray 概述:

AWS X-Ray 是一项服务,它收集应用程序所处理请求的数据,并提供一些工具供您查看、筛选和深入了解这些数据,从而发现问题和优化机会。您不仅可以查看请求和响应的详细信息,还可以查看应用程序对下游 AWS 资源、第三方应用程序、微服务、数据库和 HTTP Web API 的调用的详细信息。

调用的详细信息以跟踪记录的形式显示。


X-Ray SDK 将 JSON 数据段文档发送到 X-Ray 守护程序,X-Ray 守护程序再将数据发送到 X-Ray 控制台。X-Ray 守护程序将数据段缓存在队列中,然后将其批量上传到 X-Ray。 

该 SDK 可帮助应用程序快速启动,无需明确指示应用程序记录元数据。SDK 支持的语言和框架包括:

  • C#
  • Go
  • Java
  • Node.js
  • Python
  • Ruby

守护程序安装在基础系统中。

AWS 还提供与部分服务的直接集成。提供 X-Ray 集成的 AWS 服务如下:

  • AWS Lambda
  • Amazon API Gateway
  • Elastic Load Balancing
  • AWS Elastic Beanstalk
  • AWS SNS
  • AWS SQS

您甚至可以将本地主机或本地服务器与 AWS X-Ray 集成。

2. AWS X-Ray 概念

  • 分段
  • 子分段
  • 跟踪
  • 服务图
  • 采样


2.1 分段

运行应用程序逻辑的计算资源会将其工作数据以分段的形式发送。分段提供以下信息:

• 主机 - 主机名、别名或 IP 地址

• 请求 - 方法、客户端地址、路径、用户代理

• 响应 - 状态、内容

• 已完成的工作 - 开始和结束时间、子分段

• 发生的问题 - 发生的错误、故障和异常

2.2 子分段


子分段提供更精细的时序信息以及应用程序对 SQL 数据库、DynamoDB 或外部 HTTP API(第三方应用程序)进行的下游调用的详细信息。


2.3 跟踪


AWS X-Ray 会跟踪用户请求在整个应用程序中的传输过程。它汇总了组成您应用程序的各个服务和资源生成的数据,为您提供应用程序性能的端到端视图。

2.4 服务图


X-Ray 使用来自 AWS 资源和 API 的跟踪数据来生成详细的服务地图。服务图显示客户端、前端、后端以及后端调用的服务/API。用户可以使用服务图来识别瓶颈、延迟和其他问题,从而提高性能并解决应用程序问题。

AWS X-Ray 以分段的形式接收来自服务的数据。然后,X-Ray 将具有共同请求的分段分组到跟踪中。X-Ray 处理这些跟踪以生成服务图,以直观的方式呈现您的应用程序。

2.5 采样


为了确保高效的跟踪并提供应用程序所服务的请求的代表性样本,X-Ray SDK 应用了一种采样算法来确定要跟踪的请求。

默认情况下,X-Ray SDK 每秒记录第一个请求,以及 5% 的额外请求。

3. AWS X-Ray 的优势

  • 它为架构提供了实时架构图。
  • 精确定位应用程序中的瓶颈。
  • 它有助于优化应用程序的性能。
  • 帮助优化 SQL 查询。
  • 支持数据驱动的架构决策。


AWS X-Ray 用例

  • 它有助于找出应用程序中出现故障的特定微服务。
  • 帮助查找应用程序中的瓶颈。
  • 帮助分析应用程序中 SQL 查询的执行时间。
  • 它有助于分析从一个微服务到另一个微服务的执行时间。

 AWS X-Ray案例分析一:

创建S3 bucket 

创建lambda 

选择python 作为runtime , 输入下面的代码

import jsondef lambda_handler(event, context):print('event', event)return {'statusCode': 200,'body': json.dumps('Hello from Lambda!')}

设置触发器

点击触发器,选择s3 bucket 

 

上传测试文件到S3 bucket 

 

在cloudwatch 日志组中查看文件上传的日志

 

点击cloudwatch - x ray - trace,点击traceid 

可以看到跟踪

 

点击跟踪图,可以查看trace map

 AWS X-Ray案例分析二:

创建IAM role 

创建S3 bucket 

创建lambda 函数,上传zip file

import aws_xray_sdk.core
import boto3
import requests
import os
import base64
import io
import mimetypes# 初始化AWS X-Ray SDK
aws_xray_sdk.core.patch_all()def lambda_handler(event, context):# 启动 X-Ray 分段with aws_xray_sdk.core.xray_recorder.capture('get_dog_images'):# 创建 S3 clientsession = boto3.Session()s3 = session.resource('s3')bucket_name = os.getenv('BUCKET_NAME')# 访问 Dog APIwith aws_xray_sdk.core.xray_recorder.capture('call_dog_api'):# 定义 Dog API endpointendpoint = 'https://dog.ceo/api/breeds/image/random'# 对Dog API发出get 请求response = requests.get(endpoint)# 从请求的相应中提取图片的urlimage_url = response.json()['message']# 获得image 名称image_name = str(response.json()['message']).split('/')[-1]# 从url中下载图片image = requests.get(image_url, stream=True).content# 保存图片到s3with aws_xray_sdk.core.xray_recorder.capture('save_dog_to_s3'):contenttype = mimetypes.types_map['.' + image_name.split('.')[-1]]bucket = s3.Bucket(bucket_name)bucket.upload_fileobj(io.BytesIO(image), image_name, ExtraArgs={'ContentType': contenttype})# 生成包含正文中图片的回复response = {'statusCode': 200,'headers': {'Content-Type': 'image/jpeg'},'body': base64.b64encode(image),'isBase64Encoded': True}return response

配置lambda 的URL

启用xray 跟踪

设置环境变量和timeout

访问lambda url,该lambda会访问网站并上传狗狗图片到指定的S3 bucket。

在回到S3 bucket,

打开x-ray console,你会看到lambda 函数的调用链图

点击到S3 bucket的调用,你会看到到S3的请求的metric:延时,请求数量

点击x ray- trace ,你可以看到瀑布式的调用链trace 图。

现在将BUCKET_NAME 的值该为一个无法访问的值,再次访问该lambda,在segment中你可以看到下面的错误

 

这个功能在分析复杂的lambda调用的时候,尤其是带有外部API的调用场景中非常有用。

最佳实践:

  • 为所有相关组件启用 X-Ray:为了充分利用 X-Ray,务必为系统的所有相关组件启用它。这包括 Lambda 函数、DynamoDB 表和 SNS 主题。
  • 使用 X-Ray 控制台和 API 查看和分析跟踪数据:使用控制台查看跟踪数据的可视化表示。使用 API 以编程方式访问和操作跟踪数据,并自动执行性能分析或错误报告等任务。
  • 使用分段和子分段为跟踪数据添加上下文:使用分段表示请求在系统中的整体流程。使用子分段表示该流程中的特定操作。通过为跟踪数据添加上下文,您可以更轻松地理解和排查可能发生的问题。
  • 启用采样以减少跟踪开销:跟踪会增加系统开销,尤其是在您正在检测大量函数或函数被频繁调用的情况下。为了减少此开销,您可以在 X-Ray 中启用采样。这将使 X-Ray 仅跟踪部分请求,从而显著降低跟踪开销和成本。
  • 使用自定义属性为跟踪数据添加上下文:自定义属性是键值对,您可以将其添加到跟踪数据中以提供更多上下文。使用自定义属性可以添加有关请求的元数据,例如用户 ID 或请求 ID。
  • 使用 X-Ray 开发工具包为 Lambda 函数添​​加错误处理:X-Ray 开发工具包提供了一个 captureFunc 方法,您可以使用它来捕获错误并将其添加到跟踪数据中。


结论:

对于寻求对分布式应用程序进行可见性和控制的开发人员和 DevOps 团队来说,AWS X-Ray 是一款强大的工具。X-Ray 通过提供实时跟踪、端到端可见性和切实可行的洞察,简化了微服务架构调试的复杂性。对于希望最大限度地利用 AWS 的组织而言,AWS X-Ray 是 DevOps 工具包中不可或缺的补充。

相关文章:

  • 【docker】启动临时MongoDB容器、挂载数据卷运行数据库服务,并通过备份文件恢复MongoDB数据库备份数据
  • SQLMesh增量模型实战指南:时间范围分区
  • nginx 核心功能
  • 鸟笼效应——AI与思维模型【84】
  • 组件轮播与样式结构重用实验
  • Android开发——实现一个计算器
  • 利用3DMAX + Corona Renderer打造现代住宅逼真效果!
  • DotNet 入门:(一) 环境安装
  • MarkItDown:如何高效将各类文档转换为适合 LLM 处理的 Markdown 格式
  • 进程优先级以及切换调度
  • 得物 小程序 6宫格 分析
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 16)
  • opencv 直方图均衡化
  • AimRT 从零到一:官方示例精讲 —— 三、Executor示例.md
  • 【AI News | 20250429】每日AI进展
  • OpenCV 图形API(71)图像与通道拼接函数-----从图像(GMat)中裁剪出一个矩形区域的操作函数 crop()
  • gitee 如何修改提交代码的邮箱
  • 训练神经网络的批量标准化(使用 PyTorch)
  • 内核常见问题汇总
  • 计算机基础:二进制基础14,二进制加法
  • 中国人民解放军南部战区位南海海域进行例行巡航
  • 华夏银行一季度营收降逾17%、净利降逾14%,公允价值变动损失逾24亿
  • 三大白电巨头去年净利近900亿元:美的持续领跑,格力营收下滑
  • 来伊份一季度净利减少近八成,今年集中精力帮助加盟商成功
  • 新任海南琼海市委副书记陈明已主持市政府党组全面工作
  • 中日友好医院通报“医师肖某被举报”:基本属实,开除党籍并解聘