AWS X-Ray 概念 - AWS X-Ray

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

AWS X-Ray 概念

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

客群

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

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

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

  • 響應 — 狀態,內容

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

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

X-Ray 軌跡的區段資料

X-Ray SDK 會從要求和回應標頭、應用程式中的程式碼,以及執行其所在 AWS 資源的中繼資料收集資訊。您可以通過修改應用程序配置或代碼來檢測傳入請求,下游請求和 AWS SDK 客戶端來選擇要收集的數據。

轉寄的要求

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

您可以使用 X-Ray SDK 來記錄其他資訊,例如註釋和中繼資料。如需結構詳細資訊與區段和子區段中所記錄的資訊,請參閱AWS X-Ray 區段文件。區段文件的大小最多可達 64 kB。

子區段

區段可以將完成工作的資料細分為子區段。子區段可提供更精確的計時資訊,以及應用程式為滿足原始請求所做的下游呼叫詳細資訊。子區段可以包含有關呼叫 AWS service、外部 HTTP API 或 SQL 資料庫的其他詳細資料。您甚至可以定義任意子區段來檢測應用程式的特定函數或程式碼行。

子區段可提供更精確的資訊

對於不傳送自己區段的服務 (例如 Amazon DynamoDB),X-Ray 會使用子區段在追蹤對應上產生推斷的區段和下游節點。這可讓您查看所有下游相依性,即使這些相依性不支援追蹤,或屬於外部相依性亦同。

子區段會以用戶端形式來代表您應用程式的下游呼叫檢視。如果下游服務也經過檢測,其傳送的區段則會取代從上游用戶端子區段產生的推斷區段。服務圖表的節點一律使用來自服務區段的資訊;兩個節點之間的邊緣則會使用上游服務的子區段。

例如,當您使用已檢測的 AWS SDK 用戶端呼叫 DynamoDB 時,X-Ray SDK 會記錄該呼叫的子區段。DynamoDB 不會傳送區段,因此追蹤中推斷的區段、服務圖表上的 DynamoDB 節點,以及服務與 DynamoDB 之間的邊緣都包含來自子區段的資訊。

已檢測的應用程式與 DynamoDB 之間的邊緣。

當您使用經檢測的應用程式呼叫其他經檢測的服務時,下游服務會傳送自己的區段以記錄上游服務在子區段中記錄的相同呼叫檢視。在服務圖表中,兩種服務的節點都會包含來自這些服務區段的計時和錯誤資訊,而之間的邊緣則包含來自上游服務子區段的資訊。

經檢測的應用程式呼叫其他經檢測的應用程式。

這兩種檢視都很實用,因為下游服務會精確記錄請求的工作開始和結束時間,而上游服務會記錄請求的往返延遲,包括請求在這兩項服務之間移動所花的時間。

服務圖表

X-Ray 會使用應用程式傳送的資料來產生服務圖表。將 AWS 資料傳送至 X-Ray 的每個資源都會顯示為圖形中的一項服務。邊緣可連線至各種服務,這些服務則協力為請求提供服務。邊緣會將用戶端連線至您的應用程式,並將您的應用程式連線至其所用的下游服務和資源。

服務名稱

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

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

跟踪映射

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

例如,Scorekeep 會執行呼叫微服務的 Web API ( AWS Lambda 函數),以使用 Node.js 程式庫來產生隨機名稱。適用於 Java 的 X-Ray 開發套件會產生追蹤識別碼,並將其包含在呼叫 Lambda 中。Lambda 會傳送追蹤資料,並將追蹤識別碼傳遞給函數。Node.js 的 X-Ray SDK 也會使用追蹤識別碼來傳送資料。因此,API、Lambda 服務和 Lambda 函數的節點都會在追蹤對應上顯示為獨立但已連接的節點。

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

追蹤

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

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

如需 X-Ray 追蹤計費方式的相關資訊,請參閱AWS X-Ray 定價。追蹤資料會保留 30 天。

抽樣

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

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

例如,您可能想要停用取樣,並追蹤所有要求,以修改狀態或處理使用者或交易的呼叫。若是大量唯讀呼叫 (例如背景輪詢、運作狀態檢查或連線維護),您可以用低費率抽樣但仍獲得足夠的資料,以查看發生的任何問題。

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

追蹤標頭

所有請求都會追蹤,並到可設定的最低限度為止。到達該最低限度之後,就會追蹤某個百分比的請求,以避免不必要的成本。取樣決策和追蹤識別碼會新增至名為的追蹤標頭中的 HTTP 要求X-Amzn-Trace-Id。要求所擊中的第一個 X-ray 整合服務會新增追蹤標頭,而 X-Ray SDK 會讀取並包含在回應中。

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

追蹤標頭可以來自 X-Ray SDK AWS service、或用戶端要求。您的應用程式可以從傳入的請求移除 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

Lineage可以由 Lambda 和其他 AWS services 作為其處理機制的一部分附加到跟踪標頭,並且不應直接使用。

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

篩選條件表達式

即便使用抽樣,複雜的應用程式仍會產生大量資料。主 AWS X-Ray 控台提供服務圖形的 easy-to-navigate 檢視。它會顯示運作狀況和效能資訊,以協助您識別問題並找出最佳化應用程式的機會。若要進階追蹤,您可以向下切入以追蹤個別請求,或使用篩選條件表達式,以尋找與特定路徑或使用者相關的追蹤。

向下切入以追蹤個別請求

群組

擴展過濾器表達式,X-Ray 還支持組功能。使用篩選條件表達式,即可以定義條件,以接受追蹤到群組。

您可以依名稱或 Amazon 資源名稱 (ARN) 呼叫群組,以產生自己的服務圖表、追蹤摘要和 Amazon CloudWatch 指標。建立群組之後,傳入的追蹤會在儲存在 X-Ray 服務中時,根據群組的篩選器運算式進行檢查。每分鐘都會發佈符合 CloudWatch 每個條件的追蹤數量指標。

更新群組的篩選條件表達式不會變更已記錄的資料。更新僅適用於後續追蹤。這會導致圖表合併新舊表達式。若要避免這種情況,請刪除目前群組並建立新的群組。

注意

群組的計費方式是根據符合篩選條件表達式的擷取追蹤。如需詳細資訊,請參閱 AWS X-Ray 定價

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

標註和中繼資料

檢測應用程式時,X-Ray SDK 會記錄傳入和傳出要求、使用的 AWS 資源以及應用程式本身的相關資訊。您可以藉由註釋和中繼資料形式,將其他資訊新增至區段文件。註釋和中繼資料會在追蹤層級彙總,並且可以新增至任何區段或子區段。

註釋是簡單的鍵/值對,其會建立索引以與篩選條件表達式搭配使用。使用標記記錄您想要用來在主控台將追蹤分組的資料,或是在呼叫 GetTraceSummaries API 時使用標記。

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

中繼資料為含有任何類型值的鍵/值對,包括物件和清單,但不會建立索引。您可以使用中繼資料,來記錄想要存放於追蹤但不需用於搜尋追蹤的資料。

您可以在 CloudWatch 主控台的「追蹤詳細資訊」頁面中的區段或子區段詳細資訊視窗中檢視註釋和中繼資料。

可在主控台的區段或子區段詳細資料中檢視註釋和中繼資料 CloudWatch

錯誤、故障和例外狀況

X-Ray 會追蹤應用程式程式碼中發生的錯誤,以及下游服務傳回的錯誤。錯誤分類如下。

  • Error— 客戶端錯誤(400 系列錯誤)

  • Fault— 伺服器故障 (500 系列錯誤)

  • Throttle-節流錯誤(429 太多請求)

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