什麼是 AWS X-Ray? - AWS X-Ray

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

什麼是 AWS X-Ray?

AWS X-Ray 提供有關已檢測應用程式所發出之任何已接收回應和呼叫的追蹤資訊,包括下列項目:

  • 下游 AWS 資源

  • 微服務

  • 資料庫

  • 網頁 API

使用追蹤資料和視覺化,深入瞭解應用程式效能、找出問題,並找出最佳化的機會。使用 X-Ray 中的分析工具來檢視、篩選和調查應用程式任何追蹤要求的詳細資料。

X-Ray 如何工作

若要使用 X-Ray,您必須先檢測應用程式,以便 X-Ray 可以追蹤應用程式如何處理要求。將儀器新增至您的應用程式可讓 X-Ray 傳送追蹤資料和中繼資料,以供應用程式內傳入和輸出要求以及其他事件 例如,您可以檢測 Java 應用程式所發出的所有傳入 HTTP 要求和下游呼叫。 AWS 服務 您也可以自動檢測您的應用程式。如需詳細資訊,請參閱檢測您的應用程式以取得詳細資訊。

X-Ray 會為檢測的應用程式收到的任何要求指派追蹤 ID。如果您的應用程式與其他元件互動,X-Ray 會建立區段。此區段會與原始追蹤 ID 相關聯,並追蹤與該組件之間的互動品質。

X-Ray 會在整個應用程式工作流程中追蹤追蹤 ID 和區段。您可以分析整個工作流程或隔離部分以進行詳細分析。如需區段的詳細資訊,請參閱下一概念節。

X-Ray 會在應用程式與服務節點或元件互動時追蹤應用程式,以提供傳入的要求,如下所示:

  1. X-Ray 使用追蹤 ID 和區段來追蹤個別互動。

  2. AWS 代理程式會收集追蹤 ID 和關聯區段,然後將它們傳遞至 SDK 或 API 追蹤架構。

  3. X-Ray 還可以跟踪與 X-Ray 集成的任何 AWS 服務的互動。

  4. 代理將數據發送到控制台 GUI,您可以在其中查看有關跟踪,細分和子段以及這些組件如何交互的信息。

前面的步驟如下圖所示:

X-Ray 顯示應用程式要求的詳細資訊。

X-Ray 如何與您的儀器應用程式互動

當您檢測的應用程式收到要求時,X-Ray 會執行下列動作:

  1. 應用程式提供要求後,X-Ray SDK 會將追蹤資料傳送至 AWS 收集器代理程式。然後,代理程式會收集追蹤識別碼和區段。您可以從下列三種代理程式中選擇:

    • AWS 發行版 OpenTelemetry (ADOT) Collector — 一個開源收集器,經過優化和保護 AWS,基於開源標準化OpenTelemetry代理。ADOT Collector如果您想要使用語言和廠商無關的標準化程式碼與代理程式互動,但仍有最終產品內建的 AWS 安全性和最佳化的信心,請使用。您也可以使用ADOT將端點設定為不同的代理程式和後端。

    • Amazon CloudWatch Agent — 一個開放原始碼收集器,可整合日誌、指標和追蹤、支援所有遙測資料,並已ADOT Collector整合至其中。

    • X-Ray 守護程序 — 與 X-Ray SDK 和 X-Ray API 一起使用的收集器。如果您有舊版程式碼,或有需要自訂追蹤的應用程式,因此必須使用 X-Ray API,請使用 X-Ray 精靈。該守護程序可用於LinuxMicrosoft Windows、和和macOS,並包含在 AWS Elastic Beanstalk 和 AWS Lambda 平台上。

  2. 然後,代理程式會將此資料傳送至追蹤架構,該架構包含 AWS API 或在 API 之上建置的 AWS SDK。該框架與其他 AWS 服務交互。X-Ray API 可透過 AWS SDK 存取所有 X-Ray 功能 AWS Command Line Interface,或直接透過HTTPS。如果您使用的是某種語言或需要 SDK 不支援的作業,請使用 X-Ray API。

    您可以使用下列 SDK:

    • ADOTSDK — 使用 ADOT SDK 與不附屬廠商的不同代理程式互動 AWS。ADOTSDK 也支援多個後端服務。

    • X-Ray SDK — 不再添加更多功能或語言的經典產品。如果您不想更新應用程式程式碼,請使用 X-Ray SDK。

    如果您使用的是 X-Ray 或 ADOT SDK,則搭配代理程式可提供下列選項:

    • 建議搭配 CloudWatch 代理程式使用 X-Ray 或 ADOT SDK。

    • 如果您想要使用具有安全性和最佳化 AWS 層級的廠商無關軟體,請搭配 ADOT Collector — 建議使用 ADOT SDK。

    • 搭配代理程式使用 X-Ray SDK — CloudWatch CloudWatch 代理程式與 X-Ray SDK 相容。

    • 將 X-Ray SDK 與 X-Ray 精靈搭配使用 — 如果您要繼續使用 X-Ray SDK,請使用此選項。

  3. (選擇性) 追蹤架構可以與其他 AWS 服務、HTTP伺服器、其他方法和查詢互動。與 X-Ray 整合的一些 AWS 服務包括亞馬遜 EC2 Amazon SNS 和 API Gateway。SDK 或 API 會在這些互動期間追蹤追蹤資料。

    AWS 與 X-Ray 整合的服務可以將追蹤標頭新增至內送要求、將追蹤資料傳送至 X-Ray,或執行代理程式來收集追蹤資料。例如, AWS Lambda 可以將有關請求的追蹤資料傳送至您的 Lambda 函數。

    如需使用 X-Ray 的其他服務的更多資訊,請參閱AWS X-Ray 與其他產品整合 AWS 服務

  4. 您可以在控制台中在圖形用戶界面(GUI)中查看有關跟踪,細分和子段的數據。您可以使用下列選項 :

X-Ray 會使用應用程式與之互動之 AWS 資源的追蹤資料來產生詳細的追蹤圖。追蹤對應會在單一要求中顯示前端服務呼叫的用戶端、您的前端服務和後端服務。使用追蹤對應來識別瓶頸、延遲尖峰和其他問題,以解決或改善應用程式的效能。

X-Ray 也會產生服務對應,提供應用程式如何與服務節點互動的整體檢視。服務對應中的邊緣會連接服務節點。它們會顯示節點彼此通訊的頻率,以及這些通訊的延遲。

下列影像顯示服務對應的範例,顯示應用程式與不同元件的互動方式。您可以在主控台中檢視服務對應。此影像顯示應用程式從用戶端接收要求。然後,此影像會顯示應用程式如何與兩個 DynamoDB 表格和 Amazon SNS 互動。

追蹤對應會顯示前端服務呼叫以處理要求並保留資料的用戶端、前端服務和後端服務

下圖是控制台中針對軌跡中單個區段可用的資料範例。此影像會顯示一個時間軸,列出數個區段,以及每個區段相對於其他區段執行的開始時間和持續時間。此影像也會顯示區段狀態和 HTTP 回應碼。

X-Ray 會顯示應用程式要求的詳細資訊,包括狀態、持續時間和 HTTP 回應碼。

概念

AWS X-Ray 以區段形式接收來自服務的資料。然後,X-Ray 會將具有共同要求的區段群組為追蹤。X-Ray 會處理追蹤,以產生提供應用程式視覺化呈現的服務圖表。

客群

執行應用程式邏輯的運算資源會以區段形式傳送與其工作相關的資料。區段中提供資源的名稱、請求的詳細資訊,以及完成的工作詳細資訊。例如,當 HTTP 請求到達您的應用程式時,它可以記錄以下相關資料:

  • 主機 — 主機名稱、別名或 IP 位址。

  • 請求-方法,客戶端地址,路徑,用戶代理。

  • 響應 — 狀態,內容。

  • 完成的工作-開始和結束時間,子段。

  • 發生的問題錯誤、錯誤和例外狀況,包括自動擷取例外狀況堆疊。

下列影像是傳回有關區段的概觀資訊範例。此影像會顯示 ID、開始和結束時間、任何錯誤或錯誤,以及 HTTP 要求的要求和回應碼的相關資訊:

X-Ray 軌跡的區段資料

追蹤架構 (包含 SDK 或 API) 會從要求和回應標頭、應用程式中的程式碼,以及應用程式執行所在 AWS 資源的中繼資料收集資訊。您可以通過修改應用程序配置或代碼來檢測傳入的請求,下游請求和 AWS 服務來選擇 X-Ray 收集哪些數據。

轉寄的要求

如果負載平衡器或其他中介機構將要求轉寄至您的應用程式,X-Ray 會從要求中的X-Forwarded-For標頭取得用戶端 IP,而不是從 IP 封包中的來源 IP 取得。為轉寄要求所記錄的用戶端 IP 可以偽造,因此不應該受信任。

您可以使用追蹤架構 (例如 SDK 或 API) 來記錄更多資訊,包括註解和中繼資料。如需有關區段與子區段結構以及記錄資訊的詳細資訊,請參閱X-Ray 段文件。區段文件的大小最多可達 64 kB。

子區段

您可以將區段分割成子區段。子區段會提供更精細的時間資訊,以及應用程式為了處理原始要求而進行的下游呼叫的詳細資訊。子區段包含有關呼叫 AWS 服務、外部 HTTP API 或 SQL 資料庫的其他詳細資訊。您也可以定義子區段,以便在應用程式中檢測特定的函數或程式碼行。

子區段提供比區段更精細的資訊

X-Ray 使用子區段在追蹤對應上產生推斷的區段和下游節點,以取得不傳送自己區段的服務,例如 Amazon DynamoDB。子區段可讓您查看所有下游相依性,即使相依性不支援追蹤,或是外部的 AWS。

子區段會以用戶端形式來代表您應用程式的下游呼叫檢視。如果還檢測下游服務,則其區段會取代上游用戶端子區段中推斷的區段。服務圖表上的節點會使用服務區段中的資訊 (如果有的話)。兩個節點之間的邊緣使用上游服務的子區段。

例如,當您使用已檢測的 AWS SDK 用戶端呼叫 DynamoDB 時,X-Ray SDK 會記錄該呼叫的子區段。DynamoDB 不會傳送區段,因此子區段包含下列相關資訊:

  • 追蹤中推論的區段。

  • 服務圖表上的 DynamoDB 支援節點。

  • 您的服務與 DynamoDB 之間的邊緣。

下圖顯示範例應用程式的服務對應。在影像中,用戶端向範例 Scorekeep 應用程式發出要求。記分應用程式會對 DynamoDB 進行兩次呼叫。服務對應中的邊緣代表每個呼叫。選取邊緣以查看健全狀況狀態、數量和對 DynamoDB 表進行呼叫的頻率。下圖顯示了對應於依回應時間篩選的邊緣的繪線。

邊緣會連接已測試的應用程式和 DynamoDB 表格。

當您使用已檢測的應用程式呼叫另一個已檢測的服務時,下游服務會傳送自己的區段。此區段會記錄與上游服務在子區段中記錄的相同呼叫的檢視。在服務圖中,兩個服務的節點都包含來自其區段的計時和錯誤資訊。它們之間的邊緣包含來自上游服務子區段的資訊。下游服務會記錄在請求上開始和結束工作的時間。上游服務會記錄往返延遲,包括請求在兩個服務之間花費的時間。

下圖顯示了從對應於上游 Lambda 函數的邊緣的回應時間篩選的追蹤資訊。

針對來自呼叫另一個已檢測應用程式的已檢測應用程式的要求,顯示為一段時間內的回應時間值。

服務圖表

X-Ray 會使用應用程式傳送的資料來產生服務圖表。將 AWS 資料傳送至 X-Ray 的每個資源都會在圖形中顯示為服務節點。Edge 會連接共同運作以提供要求、將用戶端連接至您的應用程式,以及將應用程式連接至其使用的下游服務和資源的服務。

服務名稱

區段name應與產生區段之服務的網域名稱或邏輯名稱相符。但是,這不是強制執行的。具有PutTraceSegments可傳送任何名稱之區段之權限的任何應用程式。

服務圖表是一種 JSON 文件,其中包含構成您應用程式的服務和資源相關資訊。X-Ray 主控台使用服務圖表產生視覺效果或服務對應。

下圖顯示了服務對應。服務對應會顯示用戶端對應用程式的要求與應用程式互動以提供要求的服務之間的關係。在下圖中,範例記分應用程式會與兩個 DynamoDB 表格和 Amazon SNS 互動。

軌跡圖

在分散式應用程式中,X-Ray 會將處理具有相同追蹤識別碼之要求的所有服務節點合併為單一服務圖表。與要求互動的第一個服務會新增追蹤標頭,該追蹤標頭會在前端和它呼叫的服務之間傳播。

例如,Scorekeep 運行一個 Web API 調用一個 AWS Lambda 函數來生成一個隨機名稱。然後,X-Ray SDK 會產生追蹤識別碼,並追蹤對 Lambda 函數的呼叫。 AWS Lambda 將追蹤資料和追蹤識別碼傳遞至 Lambda 函數。X-Ray SDK 也會使用相同的追蹤識別碼,將資料傳送至代理程式或收集器。因此,API、 AWS Lambda 服務和 Lambda 函數的節點都會在追蹤對應上顯示為獨立但已連接的節點。

服務圖表資料會保留 30 天。

追蹤

追蹤會收集由單一請求所產生的所有區段。追蹤會使用追蹤 ID,透過應用程式追蹤要求的路徑。該要求通常是 HTTP GET 或 POST 要求,會透過負載平衡器傳送、與您的應用程式程式碼互動,並產生對其他 AWS 服務或外部 Web API 的下游呼叫。與 HTTP 要求互動的第一個支援服務會在要求中新增追蹤識別碼標頭。接著服務會在下游傳播追蹤 ID,以追蹤延遲、配置和其他要求資料。

下列影像顯示提供HTTP要求的應用程式範例。跟踪摘要包含HTTP響應代碼,服務請求的時間以及應用程序服務請求的時間。下列影像也會顯示每個繪線區段的時間軸。時間表會顯示完成區段所花費的狀態、HTTP回應碼和時間。圖表顯示軌跡中每個區段相對於其他區段的持續時間、開始和結束時間。

追蹤的時間軸檢視,其會收集由單一請求所產生的所有區段

如需 X-Ray 帳單追蹤收集方式的詳細資訊,請參閱AWS X-Ray 定價,以取得 X-Ray 追蹤計費方式的相關資訊。追蹤資料會保留 30 天。

抽樣

X-Ray SDK 會套用取樣演算法,以確保有效率的追蹤,並提供應用程式所服務之要求的代表性樣本。該算法確定了哪些請求被跟踪。根據預設,X-Ray SDK 會記錄每秒開始收到的第一個要求,以及任何其他要求的百分之五。

為了避免開始使用時產生的服務費用,預設的抽樣費率都很保守。您可以將 X-Ray 設定為變更預設取樣率,並設定根據服務或要求內容套用取樣的其他規則。

例如,您可能想要停用取樣,並追蹤所有要求,以修改狀態或處理使用者或交易的呼叫。適用於大量唯讀呼叫,例如背景輪詢、健康狀態檢查或連線維護。

如需詳細資訊,請參閱設定取樣規則CreateSamplingRuleAPI。

追蹤標頭

追蹤所有要求,最多可設定最小數目。在達到最低限度之後,X-Ray 只會追蹤一定百分比的要求,以避免額外費用。X-Ray 會將取樣決策和追蹤識別碼新增至追蹤標頭中的 HTTP 要求 (開頭為) X-Amzn-Trace-Id。X-Ray 會在要求與第一個與 X-Ray 整合的 AWS 服務互動時新增這些標頭。X-Ray SDK 會讀取這些標頭,並將它們包含在回應中。

範例 含根追蹤 ID 和抽樣決策的追蹤標頭
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1
追蹤標頭的安全性

追蹤標頭可以來自 X-Ray SDK AWS 服務、或用戶端要求。您的應用程式可以從傳入的請求移除 X-Amzn-Trace-Id,以避免使用者將追蹤 ID 或抽樣決策新增到請求時發生問題。

如果請求是從經檢測的應用程式產生,則追蹤標頭也可以包含父區段 ID。例如,如果您的應用程式使用已檢測的 HTTP 用戶端呼叫下游 HTTP Web API,X-Ray SDK 會將原始要求的區段識別碼新增至下游要求的追蹤標頭。為下游要求提供服務的已檢測應用程式會使用父區段 ID 來連接這兩個要求。

範例 含根追蹤 ID、父區段 ID 和抽樣決策的追蹤標頭
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1

Lambda 或其他 AWS 服務 可能會附加以開頭的一部分,Lineage作為其處理機制的一部分。您不應該直接使用追蹤標頭的附加部分。

範例 使用歷程追蹤標頭
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1;Lineage=a87bd80c:1|68fd508a:5|c512fbe3:2

篩選條件表達式

即使您對一小部分資料進行抽樣,複雜的應用程式也可以產生大量追蹤資料。使用過濾器表達式可以查找特定跟踪,包括針對單個請求,特定路徑或用戶的跟踪。

下圖顯示了 X-Ray 控制台中的文字方塊,您可以使用該文字方塊按照您定義的群組進行篩選。如需有關群組的詳細資訊,請參閱下一節「群組」。

選取追蹤以檢視個別要求的詳細資訊

群組

您可以在篩選運算式中使用群組來減少追蹤資料的數量,並專注於符合群組準則的資料。

使用群組來產生服務圖形、追蹤摘要和該群組特定的 CloudWatch 測量結果。您可以通過名稱或 Amazon 資源名稱(ARN)調用。X-Ray 會在傳入的軌跡儲存在 X-Ray 服務中時,根據群組篩選表示式檢查它們。 CloudWatch每分鐘發佈符合群組條件的追蹤量度。

更新群組的篩選條件表達式不會變更已記錄的資料。更新僅適用於後續追蹤。這會導致圖表合併新舊表達式。若要避免合併單一圖形中未連接的群組,請刪除目前的群組並https://docs.aws.amazon.com/xray/latest/api/API_CreateGroup.html建立新群組。

注意

群組的計費是根據擷取的與篩選器運算式相符的追蹤數量而定。如需詳細資訊,請參閱 AWS X-Ray 定價

如需群組的詳細資訊,請參閱設定群組

標註和中繼資料

檢測應用程式時,X-Ray SDK 會記錄有關傳入和傳出請求的資訊。SDK 也會記錄所使用 AWS 資源及應用程式本身的相關資訊。您可以藉由註釋和中繼資料形式,將其他資訊新增至區段文件。註釋和中繼資料會在追蹤層級合併。它們可以被添加到任何段或子段。

註解是索引以供篩選運算式使用的索引鍵值配對。使用標記記錄您想要用來在主控台將追蹤分組的資料,或是在呼叫 GetTraceSummaries API 時使用標記。

X-Ray 索引每個軌跡最多 50 個註釋。

元數據是具有任何類型值的鍵值對,包括未編制索引的對象和列表。您可以使用中繼資料,來記錄想要存放於追蹤但不需用於搜尋追蹤的資料。

您可以在 CloudWatch 主控台的「追蹤詳細資訊」頁面中的區段或子區段詳細資訊視窗中檢視註釋和中繼資料。如需詳細資訊,請參閱中的檢視追蹤和追蹤詳細資料探索 X-Ray 控制台

錯誤、故障和例外狀況

X-Ray 會追蹤應用程式程式碼中的錯誤,以及下游服務傳回的錯誤。X-Ray 會追蹤要求中的下列HTTP回應代碼:

  • Error— 用戶端錯誤 (400 系列錯誤) 表示伺服器無法理解或處理來自用戶端的要求,因為要求本身包含錯誤。這些錯誤可能是由語法錯誤,缺少信息或錯誤的請求主體引起的。

  • Fault— 伺服器故障 (500 系列錯誤) 表示伺服器無法處理有效的要求,因為伺服器本身發生問題。這些錯誤可能是由軟件或硬件故障或服務器的資源限制的問題引起的。

  • Throttle-節流錯誤(429 個請求太多)是一種特定類型的客戶端錯誤,當客戶端在一段時間內向服務器或 API 發送太多請求時發生。

如果您的應用程式在提供已檢測的要求時發生例外狀況,X-Ray SDK 會記錄有關例外狀況的詳細資訊,包括堆疊追蹤識別碼 (如果有的話)。您可以在 X-Ray 主控台的區段詳細資料下檢視例外。