

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用跟踪应用程序 AWS X-Ray
<a name="application-tracing-xray"></a>

通过您的应用程序发出的请求可能包括对本地服务器、Amazon EC2、容器或 Lambda 中运行的数据库、应用程序和 Web 服务的调用。通过实现应用程序跟踪，您可以快速确定使用分布式组件和服务的应用程序中出现问题的根本原因。您可以使用[AWS X-Ray](https://docs.aws.amazon.com//xray/latest/devguide/aws-xray.html)跨多个组件跟踪您的应用程序请求。当请求流经您的应用程序组件并且每个组件都表示为一个区段时，X-Ray 会在[服务图](https://docs.aws.amazon.com//xray/latest/devguide/xray-concepts.html#xray-concepts-servicegraph)上对请求进行采样和可视化。X-Ray 会生成跟踪标识符，以便您可以在请求流经多个组件时关联请求，从而帮助您端到端查看请求。您可以通过添加注释和元数据来进一步增强这一点，以帮助唯一搜索和识别请求的特征。

我们建议您使用 X-Ray 对应用程序中的每台服务器或端点进行配置和检测。X-Ray 是通过调用 X-Ray 服务在应用程序代码中实现的。X-Ray 还 AWS SDKs 提供多种语言，包括自动向 X-Ray 发送数据的仪器化客户端。X-Ray SDKs 为用于调用其他服务（例如 HTTP、MySQL、PostgreSQL 或 MongoDB）的常用库提供补丁。

X-Ray 提供了一个 X-Ray 守护程序，你可以在 Amazon EC2 和 Amazon ECS 上安装和运行该守护程序，将数据中继到 X-Ray。X-Ray 为您的应用程序创建跟踪，这些跟踪从运行为请求提供服务的 X-Ray 守护程序的服务器和容器中捕获性能数据。通过修补软件开发工具包，X-Ray 会自动将您对 AWS 服务（例如亚马逊 DynamoDB）的调用计量为子分段。 AWS X-Ray 还可以自动与 Lambda 函数集成。

如果您的应用程序组件调用无法配置和安装 X-Ray 守护程序或检测代码的外部服务，则可以创建[子分段来封装对外部服务的调用](https://docs.aws.amazon.com//xray/latest/devguide/xray-api-sendingdata.html)。如果您使用的是，X-Ray 会将 CloudWatch 日志和指标与您的应用程序跟踪关联起来 AWS X-Ray SDK for Java，这意味着您可以快速分析请求的相关指标和日志。

## 部署 X-Ray 守护程序以跟踪亚马逊 EC2 上的应用程序和服务
<a name="deploy-aws-xray-daemon-ec2"></a>

您需要在运行应用程序组件或微服务的 EC2 实例上安装和运行 X-Ray 守护程序。在配置 EC2 实例时，您可以使用[用户数据脚本](https://docs.aws.amazon.com//xray/latest/devguide/xray-daemon-ec2.html)部署 X-Ray 守护程序，或者如果您创建自己的 AMI，则可以将其包含在 AMI 构建流程中。当 EC2 实例为临时实例时，这可能特别有用。

您应该使用状态管理器来确保 X-Ray 守护程序始终安装在您的 EC2 实例上。对于 Amazon EC2 Windows 实例，你可以使用 Systems Manager [AWS-RunPowerShellScript 文档](https://docs.aws.amazon.com//systems-manager/latest/userguide/walkthrough-powershell.html#walkthrough-powershell-run-script)来运行下载和安装 X-Ray 代理的 [Windows 脚本](https://docs.aws.amazon.com//xray/latest/devguide/xray-daemon-ec2.html)。对于 Linux 上的 EC2 实例，您可以使用 AWS-RunShellScript 文档来运行 Linux 脚本，[该脚本将代理下载并安装为服务](https://docs.aws.amazon.com//xray/latest/devguide/xray-daemon-ec2.html)。

您可以使用 Systems Manager [AWS-RunRemoteScript 文档](https://docs.aws.amazon.com//systems-manager/latest/userguide/walkthrough-cli.html#walkthrough-cli-example-3)在多账户环境中运行脚本。您必须创建可从所有账户访问的 S3 存储桶，如果您使用，我们建议您[使用基于组织的存储桶策略创建一个 S3](https://aws.amazon.com//blogs/security/iam-share-aws-resources-groups-aws-accounts-aws-organizations/) 存储桶。 AWS Organizations然后，您将脚本上传到 S3 存储桶，但要确保您的 EC2 实例的 IAM 角色有权访问存储桶和脚本。

您也可以将状态管理器配置为将脚本关联到安装了 X-Ray 代理的 EC2 实例。由于您的所有 EC2 实例可能不需要或不使用 X-Ray，因此您可以使用实例标签来定位关联。例如，您可以根据`InstallAWSXRayDaemonWindows`或`InstallAWSXRayDaemonLinux`标签的存在来创建状态管理器关联。

## 部署 X-Ray 守护程序以跟踪亚马逊 ECS 或 Amazon EKS 上的应用程序和服务
<a name="deploy-aws-xray-daemon-ecs"></a>

您可以将 [X-Ray 守护程序部署为基于](https://hub.docker.com/r/amazon/aws-xray-daemon/)容器的工作负载（例如 Amazon ECS 或 Amazon EKS）的边车容器。然后，如果您使用 Amazon ECS，则您的应用程序容器可以通过容器链接连接到您的边车容器；如果您使用 [aw](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/task-networking.html) svpc 网络模式，则该容器可以直接连接到本地主机上的边车容器。

对于 Amazon EKS，您可以在应用程序的 pod 定义中定义 X-Ray 守护程序，然后您的应用程序可以在您指定的容器端口上通过本地主机连接到该守护程序。

## 配置 Lambda 以跟踪对 X-Ray 的请求
<a name="configure-lambda-trace-xray"></a>

您的应用程序可能包括对 Lambda 函数的调用。您无需为 Lambda 安装 X-Ray 守护程序，因为守护程序进程完全由 Lambda 管理，无法由用户进行配置。您可以在 X-Ray 控制台中使用 AWS 管理控制台 并选中 “**活动跟踪**” 选项，为 Lambda 函数启用该功能。

如需进一步检测，您可以将 X-Ray SDK 与 Lambda 函数捆绑在一起，以记录传出呼叫并添加注释或元数据。

## 针对 X-Ray 应用程序进行仪器测试
<a name="configure-applications-xray"></a>

您应该评估与应用程序编程语言一致的 X-Ray SDK，并对应用程序对其他系统进行的所有调用进行分类。查看您选择的库提供的客户端，看看 SDK 是否可以自动对您的应用程序的请求或响应进行仪器跟踪。确定 SDK 提供的客户端是否可用于其他下游系统。对于您的应用程序调用但无法使用 X-Ray 进行检测的外部系统，您应该创建一个自定义子分段，以便在跟踪信息中捕获和识别它们。

在分析应用程序时，请务必创建注释以帮助您识别和搜索请求。例如，您的应用程序可能会使用客户标识符（例如）`customer id`，或者根据不同用户在应用程序中的角色对其进行细分。

您最多可以为每条轨迹创建 50 个注释，但只要区段文档不超过 64 千字节，您就可以创建一个包含一个或多个字段的元数据对象。您应该有选择地使用注解来查找信息，并使用元数据对象提供更多上下文，以帮助在找到请求后对其进行故障排除。

## 配置 X-Ray 采样规则
<a name="configure-sampling-rules"></a>

通过[自定义采样规则](https://docs.aws.amazon.com//xray/latest/devguide/xray-console-sampling.html?icmpid=docs_xray_console)，您可以控制记录的数据量并修改采样行为，而无需修改或重新部署代码。采样规则向 X-Ray SDK 告知要为一系列条件记录的请求数。默认情况下，X-Ray SDK 每秒记录第一个请求以及任何其他请求的百分之五。每秒一个请求是容器。这可确保只要服务正在处理请求，就会每秒至少记录一个跟踪。百分之五是对超出水库规模的额外请求进行采样的速率。

您应查看并更新默认配置，以确定适合您账户的值。在开发、测试、性能测试和生产环境中，您的要求可能会有所不同。您的应用程序可能要求根据收到的流量或严重程度制定自己的采样规则。您应该从基线开始，并定期重新评估该基准是否符合您的要求。