View a markdown version of this page

設定 CloudWatch 日誌群組 - AWS Lambda

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

設定 CloudWatch 日誌群組

根據預設,CloudWatch 會在第一次調用 Lambda 事件函數時自動建立名為 /aws/lambda/<function name>的日誌群組。若要設定 Event Function 將日誌傳送至現有的日誌群組,或為您的 Event Function 建立新的日誌群組,您可以使用 Lambda 主控台或 AWS CLI。您也可以使用 CreateFunction 和 UpdateFunctionConfiguration Lambda API 命令和 AWS Serverless Application Model (AWS SAM) AWS::Serverless::Function 資源來設定自訂日誌群組。

您可以設定多個 Lambda 事件函數,將日誌傳送至相同的 CloudWatch 日誌群組。例如,您可以使用單一日誌群組來存放組成特定應用程式之所有 Lambda 事件函數的日誌。當您使用 Lambda 事件函數的自訂日誌群組時,Lambda 建立的日誌串流會包含事件函數名稱和事件函數版本。這可確保日誌訊息和事件函數之間的映射被保留,即使您對多個事件函數使用相同的日誌群組。

自訂日誌群組的日誌串流命名格式遵循下列慣例:

YYYY/MM/DD/<function_name>[<function_version>][<execution_environment_GUID>]

請注意,設定自訂日誌群組時,您為日誌群組選取的名稱必須遵循 CloudWatch Logs 命名規則。此外,自訂日誌群組名稱不得以字串 aws/ 開頭。如果您以 aws/ 開頭建立自訂日誌群組,Lambda 將無法建立日誌群組。因此,您的 Event Function 日誌將不會傳送至 CloudWatch。

若要變更函數的日誌群組 (主控台)
  1. 開啟 Lambda 主控台的事件函數頁面。

  2. 選擇事件函數。

  3. 在事件函數組態頁面上,選擇監控和操作工具。

  4. 在日誌組態窗格中,選擇編輯。

  5. 在日誌群組窗格中,對於 CloudWatch 日誌群組,選擇自訂。

  6. 在自訂日誌群組之下,輸入要將函數傳送日誌前往的 CloudWatch 日誌群組的名稱。如果您輸入現有日誌群組的名稱,則您的函數將使用該群組。如果沒有具有您輸入名稱的日誌群組,則 Lambda 會以該名稱為您的函數建立新的日誌群組。

若要變更事件函數的日誌群組 (AWS CLI)
  • 若要變更現有 Event Function 的日誌群組,請使用 update-function-configuration 命令。

    aws lambda update-function-configuration \ --function-name myFunction \ --logging-config LogGroup=myLogGroup
在建立事件函數時指定自訂日誌群組 (AWS CLI)
  • 若要在使用 建立新的 Lambda 事件函數時指定自訂日誌群組 AWS CLI,請使用 --logging-config選項。下列範例命令會建立 Node.js Lambda 事件函數,將日誌傳送至名為 的日誌群組myLogGroup。

    aws lambda create-function \ --function-name myFunction \ --runtime nodejs24.x \ --handler index.handler \ --zip-file fileb://function.zip \ --role arn:aws:iam::123456789012:role/LambdaRole \ --logging-config LogGroup=myLogGroup

執行角色許可

若要讓您的 Event Function 將日誌傳送至 CloudWatch Logs,它必須具有 log:PutLogEvents 許可。當您使用 Lambda 主控台設定 Event Function 的日誌群組時,Lambda 會在下列條件下將此許可新增至角色:

  • 服務目的地設定為 CloudWatch Logs

  • 事件函數的執行角色沒有將日誌上傳至 CloudWatch Logs (預設目的地) 的許可

注意

Lambda 不會針對 Amazon S3 或 Firehose 日誌目的地新增任何 Put 許可。

當 Lambda 新增此許可時,它會授予 Event Function 將日誌傳送至任何 CloudWatch Logs 日誌群組的許可。

若要防止 Lambda 自動更新事件函數的執行角色,並改為手動編輯,請展開許可並取消核取新增必要許可。

當您使用 設定 Event Function 的日誌群組時 AWS CLI,Lambda 不會自動新增logs:PutLogEvents許可。如果 Event Function 尚未擁有,請將 許可新增至 Event Function 的執行角色。這些許可包含在 AWSLambdaBasicExecutionRole 受管政策中。

Lambda 受管執行個體的 CloudWatch 記錄

使用 Lambda 受管執行個體時,將日誌傳送至 CloudWatch Logs 還有其他考量:

VPC 聯網需求

Lambda 受管執行個體會在 VPC 中客戶擁有的 EC2 執行個體上執行。若要將日誌傳送至 CloudWatch Logs,並將追蹤傳送至 X-Ray,您必須確保這些 AWS APIs 可從 VPC 路由。您有多種選擇:

  • AWS PrivateLink (建議):使用 AWS PrivateLink 為 CloudWatch Logs 和 X-Ray 服務建立 VPC 端點。這可讓您的執行個體私密存取這些服務,而不需要網際網路閘道或 NAT 閘道。如需詳細資訊,請參閱搭配介面 VPC 端點使用 CloudWatch Logs。

  • NAT 閘道:設定 NAT 閘道以允許來自私有子網路的傳出網際網路存取。

  • 網際網路閘道:對於公有子網路,請確定您的 VPC 已設定網際網路閘道。

如果 CloudWatch Logs 或 X-Ray APIs 無法從您的 VPC 路由,則不會交付您的事件函數日誌和追蹤。

並行調用和日誌歸因

Lambda 受管執行個體執行環境可以同時處理多個調用。當多個調用同時執行時,其日誌項目會交錯在相同的日誌串流中。若要有效篩選和分析來自並行調用的日誌,您應該確保每個日誌項目都包含 AWS 請求 ID。

我們建議採用下列其中一種方法:

  • 使用預設 Lambda 執行期記錄器 (建議):Lambda 受管執行期提供的預設記錄程式庫會自動在每個日誌項目中包含請求 ID。

  • 實作結構化 JSON 記錄:如果您要建置自訂執行時間或需要自訂記錄,請實作 JSON 格式的日誌,其中包含每個項目中的請求 ID。Lambda 受管執行個體僅支援 JSON 日誌格式。在 JSON 日誌中包含 requestId 欄位,以透過調用啟用篩選:

    { "timestamp": "2025-01-15T10:30:00.000Z", "level": "INFO", "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "message": "Processing request" }

透過請求 ID 屬性,您可以使用 CloudWatch Logs Insights 查詢來篩選特定調用的 CloudWatch Logs 日誌項目。例如:

fields @timestamp, @message | filter requestId = "a1b2c3d4-e5f6-7890-abcd-ef1234567890" | sort @timestamp asc

如需 Lambda 受管執行個體記錄需求的詳細資訊,請參閱 了解 Lambda 受管執行個體執行環境。