

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 追蹤應用程式 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 SDK 為用於呼叫其他服務 (例如 HTTP、MySQL、PostgreSQL 或 MongoDB) 的常見程式庫提供修補程式。

X-Ray 提供 X-Ray 協助程式，您可以在 Amazon EC2 和 Amazon ECS 上安裝和執行，將資料轉送至 X-Ray。X-Ray 會為您的應用程式建立追蹤，從執行服務請求的 X-Ray 協助程式的伺服器和容器擷取效能資料。X-Ray 會透過修補 AWS 軟體開發套件，將您對 Amazon DynamoDB 等 AWS 服務的呼叫自動檢測為子區段。X-Ray 也可以自動與 Lambda 函數整合。

如果您的應用程式元件對無法設定和安裝 X-Ray 協助程式或檢測程式碼的外部服務發出呼叫，您可以建立[子區段來包裝對外部服務的呼叫](https://docs.aws.amazon.com//xray/latest/devguide/xray-api-sendingdata.html)。如果您使用 ，X-Ray 會將 CloudWatch 日誌和指標與您的應用程式追蹤建立關聯 適用於 JAVA 的 AWS X-Ray SDK，這表示您可以快速分析請求的相關指標和日誌。

## 部署 X-Ray 協助程式以追蹤 Amazon 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 協助程式，或者如果您建立自己的 AMIs，則可以將其包含在 AMI 建置程序中。這在 EC2 執行個體為暫時性時特別有用。

您應該使用 State Manager 來確保 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 角色具有存取儲存貯體和指令碼的許可。

您也可以設定 State Manager，將指令碼與已安裝 X-Ray 代理程式的 EC2 執行個體建立關聯。由於所有 EC2 執行個體可能不需要或使用 X-Ray，因此您可以鎖定與執行個體標籤的關聯。例如，您可以根據 `InstallAWSXRayDaemonWindows`或 `InstallAWSXRayDaemonLinux`標籤的存在來建立狀態管理員關聯。

## 部署 X-Ray 協助程式以追蹤 Amazon 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，您的應用程式容器可以使用容器連結連接到附屬容器，或者如果您使用 [awsvpc 網路模式](https://docs.aws.amazon.com//AmazonECS/latest/developerguide/task-networking.html)，則容器可以直接連接到 localhost 上的附屬容器。

對於 Amazon EKS，您可以在應用程式的 Pod 定義中定義 X-Ray 協助程式，然後您的應用程式可以透過您指定的容器連接埠上的 localhost 連線到協助程式。

## 設定 Lambda 追蹤對 X-Ray 的請求
<a name="configure-lambda-trace-xray"></a>

您的應用程式可能包含對 Lambda 函數的呼叫。您不需要安裝適用於 Lambda 的 X-Ray 協助程式，因為協助程式程序完全由 Lambda 管理，使用者無法設定。您可以使用 AWS 管理主控台 並檢查 X-Ray 主控台中的**主動追蹤**選項，為 Lambda 函數啟用此功能。

如需進一步檢測，您可以將 X-Ray 開發套件與 Lambda 函數綁定，以記錄外撥通話並新增註釋或中繼資料。

## 檢測您的 X-Ray 應用程式
<a name="configure-applications-xray"></a>

您應該評估符合應用程式程式設計語言的 X-Ray 開發套件，並將應用程式對其他系統進行的所有呼叫分類。檢閱您選擇的程式庫提供的用戶端，並查看開發套件是否可以自動檢測應用程式的請求或回應的追蹤。判斷軟體開發套件提供的用戶端是否可用於其他下游系統。對於應用程式呼叫且無法使用 X-Ray 檢測的外部系統，您應該建立自訂子區段，以在追蹤資訊中擷取和識別它們。

當您檢測應用程式時，請確定您建立註釋，以協助您識別和搜尋請求。例如，您的應用程式可能會為客戶使用識別符，例如 `customer id`，或根據其在應用程式中的角色來分割不同的使用者。

您可以為每個追蹤建立最多 50 個註釋，但您可以建立包含一或多個欄位的中繼資料物件，只要區段文件不超過 64 KB。您應該選擇性地使用註釋來尋找資訊，並使用中繼資料物件來提供更多內容，以協助在請求找到之後進行故障診斷。

## 設定 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 開發套件會記錄每秒的第一個請求，以及任何額外請求的百分之五。每秒一個請求是儲槽。這可確保只要服務持續提供請求，每秒都會記錄至少一個追蹤。5% 是超出儲槽大小的額外請求取樣率。

您應該檢閱並更新預設組態，以判斷您帳戶的適當值。您的需求在開發、測試、效能測試和生產環境中可能會有所不同。您可能有應用程式，根據其接收的流量或其重要性層級，需要自己的抽樣規則。您應該從基準開始，並定期重新評估基準是否符合您的需求。