使用視覺化 Lambda 函數叫用 AWS X-Ray - AWS Lambda

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

使用視覺化 Lambda 函數叫用 AWS X-Ray

您可以使 AWS X-Ray 用視覺化應用程式的元件、識別效能瓶頸,以及疑難排解導致錯誤的要求。您的 Lambda 函數會將追蹤資料傳送至 X-Ray,而且 X-Ray 會處理資料,以產生服務映射和可搜尋的追蹤摘要。

如果您已在調用函數的服務中啟用 X-Ray 追蹤,則 Lambda 會自動將追蹤傳送至 X-Ray。上游服務 (例如 Amazon API Gateway) 或在 Amazon 上託管且EC2已使用 X-Ray 進行檢測的應用程式SDK,會對傳入的請求進行樣本,並新增追蹤標頭,告知 Lambda 是否傳送追蹤。來自上游訊息生產者 (例如 AmazonSQS) 的追蹤會自動連結至來自下游 Lambda 函數的追蹤,以建立整個應用程式的 end-to-end 檢視。如需詳細資訊,請參閱《AWS X-Ray 開發人員指南》中的追蹤事件導向應用程式

注意

目前 Lambda 函數不支援 X-Ray 追蹤,包括 Apache 卡夫卡 (AmazonMSK) 的 Amazon 受管串流、自我管理的阿帕奇卡夫卡、含 ActiveMQ 和 RabbitMQ 的 Amazon MQ 或 Amazon DocumentDB 事件來源對應。

若要使用控制台在 Lambda 函數上切換主動追蹤,請按照下列步驟操作:

開啟主動追蹤
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇一個函數。

  3. 選擇 組態 ,然後選擇 監控和操作工具

  4. 選擇 編輯

  5. X-Ray 下,打開 主動追蹤

  6. 選擇 Save (儲存)。

您的函數需要將追蹤資料上傳至 X-Ray 的許可。當您在 Lambda 主控台中啟用追蹤時,Lambda 會將必要的許可新增至函數的執行角色。否則,請將AWSXRayDaemonWriteAccess原則新增至執行角色。

X-Ray 無法追蹤應用程式的所有請求。X-Ray 會套用取樣演算法以確保追蹤的效率,同時仍提供所有請求的代表範本。取樣率為每秒 1 次請求和 5% 的額外請求。您無法為您的功能配置 X-Ray 採樣率。

了解 X-Ray 追蹤

在 X-Ray 中,追蹤會記錄一或多個服務所處理之要求的相關資訊。Lambda 會記錄每個追蹤 2 個區段,在服務圖表上建立兩個節點。下列影像會強調顯示這兩個節點:

具有單一函數的 X-Ray 服務映射。

左側第一個節點代表接收調用請求的 Lambda 服務。第二個節點代表您特定的 Lambda 函數。

Lambda 服務記錄的區段涵蓋準備 Lambda 執行環境所需的所有步驟。AWS::Lambda這包括排程 microVM、使用您已設定的資源建立或解凍執行環境,以及下載函數程式碼和所有層。

AWS::Lambda::Function段用於功能完成的工作。

注意

AWS 目前正在對 Lambda 服務實作變更。由於這些變更,您可能會看到系統記錄訊息的結構和內容,以及. AWS 帳戶

此變更會影響函數段的子區段。下列段落說明這些子區段的舊格式和新格式。

這些變更將在未來幾週內實施,除了中國和 GovCloud 地區以 AWS 區域 外的所有功能都將轉換為使用新格式的日誌訊息和追蹤區段。

舊式 AWS X-Ray Lambda 段結構

AWS::Lambda區段的舊式 X-Ray 結構如下所示:

顯示包含調用段的舊式 X-Ray 跟踪的結構圖

在這種格式中,函數段具有InitializationInvocation、和Overhead的子段。Lambda SnapStart僅適用於,還有一個Restore子段(未顯示在此圖中)。

Initialization 子區段代表 Lambda 執行環境生命週期的初始化階段。在此階段,Lambda 會初始化擴充功能、初始化執行階段,並執行函數的初始化程式碼。

Invocation 子區段表示調用階段,其中 Lambda 調用函數處理常式。這從執行時間和延伸註冊開始,並在執行時間準備傳送響應時結束。

( SnapStart 僅限 Lambda) Restore 子區段會顯示 Lambda 還原快照、載入執行階段 (JVM) 以及執行任何afterRestore執行階段掛接所需的時間。還原快照的程序可能包括在 MicroVM 以外的活動上花費的時間。此時間在 Restore 子區段中報告。您不需要為在 MicroVM 外還原快照所花費的時間付費。

Overhead 子區段表示當執行時間傳送響應和下一次調用信號之間的時間發生的階段。在此期間,執行時間會完成與調用相關的所有工作,並準備凍結沙盒。

重要

您可以使用 X-Ray SDK 來擴充具有下游呼叫、註釋和中繼資料的其他子區Invocation段的子區段。您無法直接存取函數區段,或在處理常式調用範圍之外記錄完成的工作。

如需 Lambda 執行環境階段的詳細資訊,請參閱瞭解 Lambda 執行環境生命週期

下圖展示了使用舊式 X-Ray 結構的範例軌跡。

顯示包含調用段的舊式 X-Ray 跟踪示例的圖

請注意範例中的兩個區段。兩者都被命名為我的函數,但一個具有的起源AWS::Lambda,另一個具有的AWS::Lambda::Function起源。如果AWS::Lambda區段顯示錯誤,表示 Lambda 服務發生問題。如果AWS::Lambda::Function區段顯示錯誤,表示您的函數發生問題。

注意

偶爾您可能會注意到 X-Ray 追蹤中的函數初始化和調用階段之間存在很大的差距。對於使用佈建並行的函數,這是因為 Lambda 會在調用之前才初始化函數執行個體。對於使用未預留 (隨需) 並行的函數,即使沒有調用,Lambda 也可能會主動初始化函數執行個體。從視覺上看,這兩種情況都會顯示為初始化和調用階段之間的時間差距。

新式 AWS X-Ray Lambda 段結構

AWS::Lambda區段的新型式 X-Ray 結構如下所示:

顯示沒有調用段的新式 X-Ray 跟踪的結構圖

在這種新格式中,Init子區段代表 Lambda 執行環境生命週期的初始化階段與以前一樣。

新格式沒有調用段。相反地,客戶子區段會直接附加至區AWS::Lambda::Function段。此區段包含下列量度作為註釋:

  • aws.responseLatency-函數執行所花費的時間

  • aws.responseDuration-將響應傳送給客戶所花費的時間

  • aws.runtimeOverhead-執行階段完成所需的額外時間

  • aws.extensionOverhead-完成擴展所需的額外時間

下圖展示了使用新型式 X-Ray 結構的範例軌跡。

顯示沒有調用段的新式 X-Ray 跟踪示例圖

請注意範例中的兩個區段。兩者都被命名為我的函數,但一個具有的起源AWS::Lambda,另一個具有的AWS::Lambda::Function起源。如果AWS::Lambda區段顯示錯誤,表示 Lambda 服務發生問題。如果AWS::Lambda::Function區段顯示錯誤,表示您的函數發生問題。

如需在 Lambda 追蹤的語言特定簡介,請參閱下列主題:

如需支援使用中檢測的服務的完整清單,請參閱 AWS X-Ray 開發人員指南中的支援 AWS 服務

執行角色許可

Lambda 需要下列許可才能傳送追蹤資料到 X-Ray。新增許可到您的函數的執行角色

這些權限包含在AWSXRayDaemonWriteAccess受管理的策略中。

AWS X-Ray 守護進程

X-Ray 不會直接將追蹤資料傳送至 X-RayAPI,而是SDK使用協助程式處理程序。 AWS X-Ray 精靈是在 Lambda 環境中執行的應用程式,可偵聽包含區段和子區段的UDP流量。它會緩衝傳入的資料並分批寫入 X-Ray,減少追蹤調用所需的處理和記憶體負荷。

Lambda 執行時間允許常駐程式最多達 3% 的函數設定記憶體或 16 MB (以較大者為準)。如果您的函數在調用過程中耗盡內存,則執行時間會首先終止常駐程式以釋放內存。

常駐程式程序由 Lambda 完全管理,且無法由使用者設定。函數調用所產生的所有區段都會記錄在與 Lambda 函數相同的帳戶中。無法將常駐程式設定為將它們重新導向至任何其他帳戶。

如需詳細資訊,請參閱《 X-Ray 開發人員指南》中的 X-Ray 常駐程式

使用 Lambda 啟用主動追蹤 API

若要使用 AWS CLI 或管理追蹤組態 AWS SDK,請使用下列API作業:

下列範例 AWS CLI 命令可在名為 my- function 的函式上啟用主動追蹤。

aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active

追蹤模式是您發布函數版本時版本特定組態的一部分。您無法變更已發佈版本上的追蹤模式。

啟用作用中追蹤 AWS CloudFormation

若要啟動 AWS CloudFormation 範本中的AWS::Lambda::Function資源追蹤,請使用TracingConfig屬性。

範例 function-inline.yml - 追蹤組態
Resources: function: Type: AWS::Lambda::Function Properties: TracingConfig: Mode: Active ...

對於 AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function 資源,請使用Tracing屬性。

範例 template.yml - 追蹤組態
Resources: function: Type: AWS::Serverless::Function Properties: Tracing: Active ...