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

揭开应用程序的神秘面纱:深入了解 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 工具包中不可或缺的补充。

http://www.xdnf.cn/news/3015.html

相关文章:

  • 阿里云 CentOS YUM 源配置指南
  • 【论文阅读】Partial Retraining Substitute Model for Query-Limited Black-Box Attacks
  • 高德地图MCP介绍和cursor接入编码示例(高德MCP)
  • AWS SQS 队列策略配置指南:常见错误与解决方案
  • 【计算机视觉】深度解析MediaPipe:谷歌跨平台多媒体机器学习框架实战指南
  • 在开发板上如何处理curl: (60) SSL certificate problem
  • 微服务架构下的熔断与降级:原理、实践与主流框架深度解析
  • CentOS一键安装MySQL5.7(源码安装)
  • matplotlib饼图练习
  • 通过 Node.js 搭配 Nodemailer 实现邮箱验证码发送
  • 五、UI自动化测试05--PyTest框架
  • grafana/loki 设置日志保留时间
  • Cursor —— AI编辑器 使用详解
  • 【动态导通电阻】 GaN PiN二极管电导调制对动态 RON 的影响
  • 从Windows开发迁移到信创开发的指南:国产替代背景下的技术路径与实践
  • Webshell管理工具的流量特征
  • 桂链:使用Fabric的测试网络
  • 043-代码味道-循环依赖
  • LeetCode58_最后一个单词的长度
  • QT控件 参考Qt的PIMPL设计模式实现使用QWidget控件绘制3D饼状图表和3D柱状图表,使用QChartView绘制圆柱体图表
  • CORS跨域学习
  • opencv 模板匹配
  • [USACO08DEC] Hay For Sale S Java
  • React Native 太慢:kotlin-gradle-plugin-2.0.21-gradle76.jar 下载太慢
  • Code Complete代码大全20年纪念版附录书籍等
  • 归并排序排序总结
  • 某高端制造企业知识中枢升级,基于悦数 Graph RAG 打造工业级「故障排查最强大脑」
  • OceanBase数据库-学习笔记5-用户
  • 《系统分析师-第三阶段—总结(七)》
  • C++入门(缺省参数/函数/引用)