在 AWS Lambda 中檢測 Go 程式碼 - AWS Lambda

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

在 AWS Lambda 中檢測 Go 程式碼

Lambda 會與 AWS X-Ray 整合,以協助您追蹤、偵錯和最佳化 Lambda 應用程式。您可以使用 X-Ray 來追蹤請求,因為它會周遊您應用程式中的資源,其中可能包含 Lambda 函數和其他 AWS 服務。

若要將追蹤資料傳送至 X-Ray,您可以使用以下兩個 SDK 庫之一:

每個 SDK 均提供將遙測資料傳送至 X-Ray 服務的方法。然後,您可以使用 X-Ray 來檢視、篩選應用程式的效能指標並獲得洞察,從而識別問題和進行最佳化的機會。

重要

X-Ray 和適用於 AWS Lambda SDK 的 Powertools 包含在 AWS 提供的緊密整合檢測解決方案中。ADOT Lambda Layers 是用於追蹤檢測之業界通用標準的一部分,這類檢測一般會收集更多資料,但可能不適用於所有使用案例。您可以使用任一解決方案在 X-Ray 中實作端對端追蹤。若要深入了解如何在兩者之間做選擇,請參閱在 AWS Distro for OpenTelemetry 和 X-Ray SDK 之間進行選擇

使用 ADOT 來檢測您的 Go 函數

ADOT 提供全受管 Lambda ,包含使用 OTel SDK 收集遙測資料所需的一切內容。透過取用此層,您可以檢測 Lambda 函數,而無需修改任何函數程式碼。您還可以將層設定為對 OTel 進行自訂初始化。如需詳細資訊,請參閱 ADOT 文件中的針對 Lambda 上的 ADOT 收集器進行自訂組態設定

針對 Go 執行階段,您可以新增適用於 ADOT Go 的 AWS 受管 Lambda 層來自動檢測您的函數。如需有關如何新增此層的詳細資訊,請參閱 ADOT 文件中的適用於 Go 的 AWS Distro for OpenTelemetry Lambda 支援

使用 X-Ray SDK 來檢測 Go 函數

如要記錄 Lambda 函數對應用程式中其他資源所進行之呼叫的詳細資料,您也可以使用適用於 Go 的 AWS X-Ray SDK。如要取得 SDK,使用 go get 從 SDK 的 GitHub 儲存庫下載即可:

go get github.com/aws/aws-xray-sdk-go

若要檢測 AWS 開發套件用戶端,請將用戶端傳遞給 xray.AWS() 方法。然後,便可以使用該方法的 WithContext 版本來追蹤呼叫。

svc := s3.New(session.New()) xray.AWS(svc.Client) ... svc.ListBucketsWithContext(ctx aws.Context, input *ListBucketsInput)

新增正確的依賴項並進行必要的程式碼變更後,請透過 Lambda 主控台或 API 在函數的組態中啟用追蹤。

透過 Lambda 主控台來啟用追蹤

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

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

  2. 選擇一個函數。

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

  4. 其他監控工具欄位中,選擇編輯

  5. CloudWatch Application Signals 與 AWS X-Ray 下,為 Lambda 服務追蹤選擇啟用

  6. 選擇儲存

透過 Lambda API 啟用追蹤

若要使用 AWS CLI 或 AWS SDK 在 Lambda 函數上設定追蹤,請使用下列 API 操作:

下列範例 AWS CLI 命令啟用對名稱為 my-function 之函數的主動追蹤。

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

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

使用 CloudFormation 啟用追蹤

若要在 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 ...

解讀 X-Ray 追蹤

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

設定主動追蹤之後,您可以透過應用程式來觀察特定請求。X-Ray 服務圖顯示了有關應用程式及其所有元件的資訊。下列範例顯示了一個具有兩個函數的應用程式。主要函式會處理事件,有時會傳回錯誤。第二個函數會處理出現在第一個函數日誌群組中的錯誤,並使用 AWS SDK 來呼叫 X-Ray、Amazon Simple Storage Service (Amazon S3) 和 Amazon CloudWatch Logs。

在 X-Ray 中顯示兩個單獨的應用程式,及其各自服務映射的圖表

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

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

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

左側第一個節點代表接收調用請求的 Lambda 服務。第二個節點代表您特定的 Lambda 函數。下列範例顯示了具有這 2 個區段的追蹤。兩者都被命名為 my-function,但其中之一的來源為 AWS::Lambda,而另一個的來源為 AWS::Lambda::Function。如果 AWS::Lambda 區段顯示錯誤,Lambda 服務就會出現問題。如果 AWS::Lambda::Function 區段顯示錯誤,表示您的函數出現了問題。

顯示特定 Lambda 調用每個子區段延遲的 X-Ray 追蹤。

此範例會展開 AWS::Lambda::Function 區段以顯示其三個子區段:

注意

AWS 目前正在實作對 Lambda 服務的變更。由於這些變更,您可能會看到系統日誌訊息的結構和內容,與 AWS 帳戶中不同 Lambda 函數發出的追蹤區段之間存在細微差異。

此處顯示的追蹤範例說明了舊式函數區段。下列段落說明了舊式和新式區段之間的差異。

這些變化將在未來幾週內實作,除中國和 GovCloud 區域以外,所有 AWS 區域中的所有函數都會轉換至使用新格式的日誌訊息和追蹤區段。

舊式函數區段包含下列子區段:

  • 初始化 - 表示載入函數和執行初始化程式碼所花費的時間。只有函數的每個執行個體所處理的第一個事件會顯示此子區段。

  • 調用 – 表示執行處理常式程式碼所花費的時間。

  • 額外負荷 - 表示 Lambda 執行期為做好準備以處理下一個事件所花費的時間。

新式函數區段不包含 Invocation 子區段。相反地,客戶子區段會直接連接至函數區段。如需舊式和新式函數區段結構的詳細資訊,請參閱了解 X-Ray 追蹤

您也可以檢測 HTTP 用戶端、記錄 SQL 查詢,以及建立具有註釋和中繼資料的自訂子區段。如需詳細資訊,請參閱《AWS X-Ray 開發人員指南》中的適用於 Go 的AWS X-Ray 開發套件

定價

作為 AWS 免費方案的一部分,您可以每月免費使用 X-Ray 追蹤,但有一定限制。達到閾值後,X-Ray 會收取追蹤儲存及擷取的費用。如需詳細資訊,請參閱 AWS X-Ray 定價