View a markdown version of this page

Amazon CloudWatch Logs 中的 Web 函數日誌 - AWS Lambda

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

Amazon CloudWatch Logs 中的 Web 函數日誌

AWS Lambda 會擷取應用程式寫入標準輸出和標準錯誤的所有內容,並將其傳送至 Amazon CloudWatch Logs,以及 Lambda 本身產生的系統日誌。在 中Node.js,會自動擷取來自每個console方法的輸出,例如 console.log、 console.info和 console.error,並依 applicationLogLevel設定篩選。也會擷取寫入標準輸出或標準錯誤的記錄程式庫。您不需要記錄代理程式或 Amazon CloudWatch Logs SDK。

Lambda 會將console輸出寫入為 JSON 日誌事件endpointName,並將 requestId、 和 region 欄位新增至每個事件。如需範例,請參閱 撰寫結構化日誌。

Lambda 會在 Web 函數執行 AWS 區域 的每個 中收集日誌,然後將它們集中到函數的主區域。HomeRegion 端點僅在主區域中執行。MultiRegion 或 PerRegion端點也會在您指定的其他區域中執行,因此 Lambda 會集中每個區域的日誌。如需詳細資訊,請參閱端點類型。

日誌群組

根據預設,Lambda 會將 Web 函數的日誌傳送至以函數命名的日誌群組:

/aws/lambda/web/function-name

除了集中式日誌群組之外,Lambda 還會使用配套日誌群組,在集中式日誌之前保留區域內日誌。配套名稱是集中式日誌群組的名稱,後面接著 .local,適用於預設日誌群組和自訂日誌群組。對於預設日誌群組,配套為:

/aws/lambda/web/function-name.local

Lambda 會將日誌寫入請求執行的每個區域中的.local日誌群組,包括主要區域,然後將它們集中到日誌群組中,而不會在主要區域中加上尾碼。每個.local日誌群組只會保留自己區域中的日誌。在集中化之後,Lambda 不會從.local日誌群組中移除事件。日誌群組的保留設定會決定它們的保留時間。

在您的 Web 函數提供其第一個請求之前,日誌群組不存在。主區域中的集中式日誌群組可能會出現在.local日誌群組之後。如需集中計時,請參閱 集中式延遲。

Lambda 會使用預設 Amazon CloudWatch Logs 設定建立預設日誌群組和每個.local日誌群組,因此除非您設定保留政策,否則其事件永遠不會過期。您可以在 Lambda 建立它們之後變更其保留、加密和資源政策。在端點執行的每個區域中的.local日誌群組上設定這些項目,並在主區域中的集中式日誌群組上設定這些項目。

由於.local日誌群組不會等待集中化,因此對於偵錯特定區域中的問題非常有用。集中式日誌群組會保留每個區域的日誌,因此建置共用查詢、訂閱篩選條件、指標篩選條件和自動化,這些都必須涵蓋集中式日誌群組上的整個應用程式。如需了解遙測在每個區域中的行為,請參閱 每個區域中的遙測。

使用自訂日誌群組

您可以將 Web 函數的日誌傳送至您選擇的日誌群組,而非預設值。當您想要在第一個日誌事件到達之前就備妥保留、加密或資源政策時,請使用自訂日誌群組。自訂日誌群組也可讓您將來自數個函數的日誌分組在一起。若要從頭開始套用這些設定,請先自行建立日誌群組及其.local配套,再將流量路由至修訂版。如果任一日誌群組不存在,Lambda 會在第一次使用時以預設設定建立日誌群組,之後可以更新其設定。只有在執行角色具有建立日誌群組的許可時,Lambda 才能建立日誌群組。如要了解必要的許可,請參閱 執行角色。

將日誌傳送至自訂日誌群組 (AWS CLI)
  1. 在主區域中,建立日誌群組及其.local配套,並設定您想要的保留。對於 MultiRegion或 PerRegion端點,也透過執行將 --region設定為該區域的.local命令,在端點提供服務的另一個區域中建立.local日誌群組。

    aws logs create-log-group --log-group-name /my-app/web-logs aws logs create-log-group --log-group-name /my-app/web-logs.local aws logs put-retention-policy \ --log-group-name /my-app/web-logs \ --retention-in-days 30 aws logs put-retention-policy \ --log-group-name /my-app/web-logs.local \ --retention-in-days 30
  2. 在 的 telemetryConfig區段中建立指定日誌群組的修訂serviceConfig。

    aws lambda-web create-web-function-revision \ --function-name my-web-app \ --build-config '{ "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }' \ --service-config '{ "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role", "telemetryConfig": { "loggingConfig": { "logGroup": "/my-app/web-logs" } } }'
  3. 將流量路由到新的修訂版。如需詳細資訊,請參閱部署模式。

由於記錄組態是修訂版的一部分,因此該修訂版是不可變的。若要稍後變更日誌群組,請建立另一個修訂。如需詳細資訊,請參閱管理 Web 函數修訂。

記錄控制項

loggingConfig 區段控制日誌的目的地和最低嚴重性。這些設定是修訂版的一部分。

設定 值 預設 說明
logGroup 日誌群組名稱 /aws/lambda/web/function-name 接收日誌的 Amazon CloudWatch Logs 日誌群組。
applicationLogLevel TRACE | DEBUG | INFO | WARN | ERROR | FATAL INFO Lambda 傳送至 Amazon CloudWatch Logs 的應用程式日誌的最低嚴重性。低於此層級的日誌會被捨棄。 Node.js 沒有FATAL主控台方法,因此 層級FATAL的行為會做為 ERROR。
systemLogLevel DEBUG | INFO | WARN INFO Lambda 傳送給 Amazon CloudWatch Logs 的 Lambda 產生系統日誌的最低嚴重性。如需每個系統事件的層級,請參閱 系統日誌。

下列範例會建立將應用程式日誌捨棄至 以下的修訂WARN:

aws lambda-web create-web-function-revision \ --function-name my-web-app \ --build-config '{ "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }' \ --service-config '{ "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role", "telemetryConfig": { "loggingConfig": { "applicationLogLevel": "WARN", "systemLogLevel": "INFO" } } }'

applicationLogLevel 提高生產量可同時降低日誌量和成本。當您調查問題TRACE時,將其暫時降低至 DEBUG或 。

系統日誌

除了應用程式的輸出之外,您的日誌群組也會接收 Lambda 針對執行環境生命週期產生的系統日誌,例如環境初始化和關閉。使用 systemLogLevel 控制此 Lambda 發出的量。

系統日誌有助於將應用程式行為與平台事件建立關聯。例如,與環境初始化項目相符的延遲尖峰會指向冷啟動,而不是您的應用程式程式碼。如需這些日誌描述的生命週期,請參閱 執行環境生命週期。

Web 函數會發出下列系統事件。systemLogLevel 設定為您需要的最低層級。例如,將其設定為 DEBUG以接收 platform.requestComplete,或設定為 WARN 以僅接收失敗和捨棄日誌警告。

事件類型 Level 備註
platform.initStart INFO 無
platform.initReport INFO 成功時、失敗WARN時 失敗表示初始化錯誤,例如匯入程式碼時發生錯誤。
platform.invokeStart INFO 無
platform.requestComplete DEBUG 每個 HTTP 請求發出一次,包括失敗的請求。由於磁碟區很大,因此不會在預設系統日誌層級發出。
platform.invokeSummary INFO 定期。每個作用中執行環境大約每 60 秒發出一次。
platform.invokeReport INFO 成功時、失敗WARN時
platform.spinDownStart INFO
platform.spinDownReport INFO 成功時、失敗WARN時 失敗表示您的應用程式未在收到 SIGTERM(Runtime.SpinDownTimeout) 的 1 秒內結束,或因錯誤 () 而結束Runtime.ExitError。
platform.logsDropped WARN 指出 Lambda 已捨棄日誌事件。

如需每個系統事件中的欄位,請參閱 Lambda Web 函數的系統日誌事件結構描述。

lambda-web-request-id 回應標頭識別請求,lambda-web-logstream回應標頭識別處理請求之環境的日誌串流。使用這些值將用戶端回應與應用程式和系統日誌建立關聯。如需詳細資訊,請參閱回應標頭。

若要在主區域的集中式日誌群組中尋找來自已識別日誌串流的事件,請依串流名稱篩選為字首。您也可以從提供請求的區域中的.local日誌群組讀取串流的確切名稱。

aws logs filter-log-events \ --log-group-name /aws/lambda/web/my-web-app \ --log-stream-name-prefix "LAMBDA_WEB_LOGSTREAM" \ --region us-east-1

若要在重現問題時遵循最近的日誌,請使用:

aws logs tail /aws/lambda/web/my-web-app \ --follow \ --region us-east-1

撰寫結構化日誌

將物件傳遞至 console方法,讓 Lambda 在 message 欄位中將其寫入為 JSON 物件。然後,您可以在 Amazon CloudWatch Logs Insights 中查詢個別欄位,而不是在子字串上進行比對。請勿傳遞您使用 建置的字串JSON.stringify。Lambda 將字串寫入為逸出字串值,因此無法查詢其欄位。

function logRequest(req, statusCode, durationMs) { console.info({ method: req.method, path: req.url, statusCode: statusCode, durationMs: durationMs }); }

Lambda 會撰寫類似下列的日誌事件:

{ "timestamp": "2026-09-25T11:29:02.711Z", "level": "INFO", "message": { "method": "GET", "path": "/hello-world", "statusCode": 200, "durationMs": 100 }, "requestId": "US3NHLM77IRXDFLBADYHGIZZNM", "endpointName": "prod", "region": "us-east-1" }

然後,您可以直接查詢欄位。例如,下列 Amazon CloudWatch Logs Insights 查詢會傳回最近 20 個傳回 5xx 狀態的請求:

fields @timestamp, message.method, message.path, message.statusCode, message.durationMs | filter message.statusCode >= 500 | sort @timestamp desc | limit 20

若要從日誌發佈自訂指標,而不是只查詢它們,請使用內嵌指標格式。如需詳細資訊,請參閱使用內嵌指標格式發佈自訂指標。

將 Amazon CloudWatch Logs 功能與 日誌搭配使用

由於日誌集中到主要區域,因此您可以使用該區域中的標準 Amazon CloudWatch Logs 功能,包括:

  • Live Tail – 在您重現問題時串流日誌事件的抵達時間。事件會在集中化後到達集中式日誌群組,因此對於最短的延遲,請在提供請求的區域中的.local日誌群組上執行 Live Tail。

  • Logs Insights – 查詢 JSON 日誌事件中的欄位。

  • 日誌集中 – 如果您彙總函數帳戶外的日誌,請使用 Amazon CloudWatch Logs 集中功能將您的日誌轉送到另一個帳戶或目的地。

  • 訂閱篩選條件和指標篩選條件 – 觸發下游處理或從日誌模式衍生指標。

將必須涵蓋整個應用程式的功能套用至主區域中的集中式日誌群組。.local 日誌群組只會保留自己區域中的日誌。如需詳細資訊,請參閱每個區域中的遙測。