選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

在 中檢測 Node.js 程式碼 AWS Lambda

焦點模式
在 中檢測 Node.js 程式碼 AWS Lambda - AWS Lambda

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

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

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

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

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

重要

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

使用 ADOT 來檢測您的 Node.js 函數

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

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

使用 X-Ray SDK 來檢測 Node.js 函數

若要記錄 Lambda 函數對應用程式中其他資源所進行之呼叫的詳細資料,您也可以使用 適用於 Node.js 的 AWS X-Ray SDK。若要取得開發套件,請將 aws-xray-sdk-core 套件新增至應用程式的相依性。

範例 blank-nodejs/package.json
{ "name": "blank-nodejs", "version": "1.0.0", "private": true, "devDependencies": { "jest": "29.7.0" }, "dependencies": { "@aws-sdk/client-lambda": "3.345.0", "aws-xray-sdk-core": "3.5.3" }, "scripts": { "test": "jest" } }

若要在 適用於 JavaScript 的 AWS SDK v3 中檢測 AWS SDK 用戶端,請使用 captureAWSv3Client方法包裝用戶端執行個體。

範例 blank-nodejs/function/index.js – 追蹤 AWS SDK 用戶端
const AWSXRay = require('aws-xray-sdk-core'); const { LambdaClient, GetAccountSettingsCommand } = require('@aws-sdk/client-lambda'); // Create client outside of handler to reuse const lambda = AWSXRay.captureAWSv3Client(new LambdaClient()); // Handler exports.handler = async function(event, context) { event.Records.forEach(record => { ...

Lambda 執行階段會設定一些環境變數,以配置 X-Ray SDK。例如,Lambda 會將 AWS_XRAY_CONTEXT_MISSING 設定為 LOG_ERROR,以避免從 X-Ray SDK 中擲回執行階段錯誤。若要設置自訂內容遺失策略,請覆寫函式組態中的環境變數以使其不要有值,然後您可以透過程式設計方式設置內容遺失策略。

範例 初始化程式碼範例
const AWSXRay = require('aws-xray-sdk-core'); // Configure the context missing strategy to do nothing AWSXRay.setContextMissingStrategy(() => {});

如需詳細資訊,請參閱使用 Lambda 環境變數

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

透過 Lambda 主控台來啟用追蹤

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

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

  2. 選擇一個函數。

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

  4. 在其他監控工具下,選擇編輯

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

  6. 選擇 Save (儲存)。

透過 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

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

使用 啟用追蹤 AWS CloudFormation

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

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

對於 an 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 開發人員指南》中的 適用於 Node.js 的 AWS X-Ray SDK 許可。

定價

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

將執行時間相依項存放存在層中 (X-Ray SDK)

如果您使用 X-Ray 開發套件來檢測函數程式碼的 AWS SDK 用戶端,您的部署套件可能會變得相當大。為了避免每次更新函數程式碼時上傳執行時間相依性,請將 X-Ray SDK 封裝在一個 Lambda 層中。

以下範例會顯示存放 適用於 Node.js 的 AWS X-Ray SDK的 AWS::Serverless::LayerVersion 資源。

範例 template.yml - 相依性層
Resources: function: Type: AWS::Serverless::Function Properties: CodeUri: function/. Tracing: Active Layers: - !Ref libs ... libs: Type: AWS::Serverless::LayerVersion Properties: LayerName: blank-nodejs-lib Description: Dependencies for the blank sample app. ContentUri: lib/. CompatibleRuntimes: - nodejs20.x

透過此組態,您只有在變更執行時間相依性時才會更新程式庫層。由於函數部署套件僅含有您的程式碼,因此有助於減少上傳時間。

為相依性建立圖層需要建置變更,才能在部署之前產生圖層封存。如需工作範例,請參閱 blank-nodejs 範例應用程式。

下一個主題:

使用 TypeScript 建置

上一個主題:

日誌
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。