本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Lambda 會自動代表您監控 Lambda 函數,並將日誌傳送至 Amazon CloudWatch。您的 Lambda 函數隨附有 CloudWatch Logs 日誌群組,且函數的每一執行個體各有一個日誌串流。Lambda 執行期環境會將每次調用的詳細資訊傳送至日誌串流,並且轉傳來自函數程式碼的日誌及其他輸出。如需詳細資訊,請參閱將 CloudWatch Logs 與 Lambda 搭配使用。
此頁面說明如何從 Lambda 函數的程式碼產生日誌輸出,並使用 AWS Command Line Interface、Lambda 主控台或 CloudWatch 主控台存取日誌。
章節
建立傳回日誌的函數
若要由您的函式程式碼輸出日誌,可使用 puts
陳述式或者任何能夠寫入 stdout
或 stderr
的記錄程式庫。下列範例會記錄環境變數和事件物件的值。
範例 lambda_function.rb
# lambda_function.rb
def handler(event:, context:)
puts "## ENVIRONMENT VARIABLES"
puts ENV.to_a
puts "## EVENT"
puts event.to_a
end
範例 記錄格式
START RequestId: 8f507cfc-xmpl-4697-b07a-ac58fc914c95 Version: $LATEST ## ENVIRONMENT VARIABLES environ({'AWS_LAMBDA_LOG_GROUP_NAME': '/aws/lambda/my-function', 'AWS_LAMBDA_LOG_STREAM_NAME': '2020/01/31/[$LATEST]3893xmpl7fac4485b47bb75b671a283c', 'AWS_LAMBDA_FUNCTION_NAME': 'my-function', ...}) ## EVENT {'key': 'value'} END RequestId: 8f507cfc-xmpl-4697-b07a-ac58fc914c95 REPORT RequestId: 8f507cfc-xmpl-4697-b07a-ac58fc914c95 Duration: 15.74 ms Billed Duration: 16 ms Memory Size: 128 MB Max Memory Used: 56 MB Init Duration: 130.49 ms XRAY TraceId: 1-5e34a614-10bdxmplf1fb44f07bc535a1 SegmentId: 07f5xmpl2d1f6f85 Sampled: true
Ruby 執行時間會記錄每次調用的 START
、END
和 REPORT
行。報告明細行提供下列詳細資訊。
REPORT 行資料欄位
-
RequestId - 進行調用的唯一請求 ID。
-
持續時間 - 函數的處理常式方法處理事件所花費的時間量。
-
計費持續時間 - 調用的計費時間量。
-
記憶體大小 - 分配給函數的記憶體數量。
-
使用的記憶體上限 - 函數所使用的記憶體數量。當調用共用執行環境時,Lambda 會報告所有調用使用的記憶體上限。此行為可能會導致報告值高於預期值。
-
初始化持續時間 - 對於第一個提供的請求,這是執行期載入函數並在處理常式方法之外執行程式碼所花費的時間量。
-
XRAY TraceId - 對於追蹤的請求,這是 AWS X-Ray 追蹤 ID。
-
SegmentId - 對於追蹤的請求,這是 X-Ray 區段 ID。
-
已取樣 - 對於追蹤的請求,這是取樣結果。
如需更詳細的日誌,請使用 使用 Ruby 記錄程式庫。
在 Lambda 主控台檢視日誌
您可以在調用 Lambda 函數之後,使用 Lambda 主控台來檢視日誌輸出。
如果可以從內嵌程式碼編輯器測試您的程式碼,您會在執行結果中找到日誌。使用主控台測試功能以調用函數時,您會在詳細資訊區段找到日誌輸出。
在 CloudWatch 主控台中檢視 記錄
您可以使用 Amazon CloudWatch 主控台來檢視所有 Lambda 函數調用的日誌。
若要在 CloudWatch 主控台上檢視日誌
-
在 CloudWatch 主控台上開啟日誌群組頁面
。 -
選擇您的函數的日誌群組 (/aws/lambda/
your-function-name
)。 -
選擇日誌串流
每個日誌串流都會對應至函式的執行個體。當您更新 Lambda 函數,以及建立額外執行個體以處理多個並行調用時,便會出現日誌串流。若要尋找特定調用的日誌,建議您使用 檢測函數 AWS X-Ray。X-Ray 會在追蹤內記錄有關請求和日誌串流的詳細資訊。
使用 AWS Command Line Interface (AWS CLI) 檢視日誌
AWS CLI 是開放原始碼工具,可讓您使用命令列 Shell 中的命令與 AWS 服務互動。若要完成本節中的步驟,您必須擁有 AWS CLI 版本 2。
您可以透過 AWS CLI,使用 --log-type
命令選項來擷取要調用的日誌。其回應將包含 LogResult
欄位,內含該次調用的 base64 編碼日誌 (最大達 4 KB)。
範例 擷取日誌 ID
下列範例顯示如何從名稱為 my-function
的函數的 LogResult
欄位來擷取日誌 ID。
aws lambda invoke --function-name my-function out --log-type Tail
您應該會看到下列輸出:
{
"StatusCode": 200,
"LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
"ExecutedVersion": "$LATEST"
}
範例 解碼日誌
在相同的命令提示中,使用 base64
公用程式來解碼日誌。下列範例顯示如何擷取 my-function
的 base64 編碼日誌。
aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
如果您使用的是第 2 AWS CLI 版,則需要 cli-binary-format選項。若要讓此成為預設的設定,請執行 aws configure set cli-binary-format raw-in-base64-out
。若要取得更多資訊,請參閱《AWS Command Line Interface 使用者指南第 2 版》中 AWS CLI 支援的全域命令列選項。
您應該會看到下列輸出:
START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB
該 base64
公用程式可在 Linux、macOS 和 Ubuntu on Windowsbase64 -D
。
範例 get-logs.sh 指令碼
在相同的命令提示中,使用下列指令碼下載最後五個日誌事件。該指令碼使用 sed
以從輸出檔案移除引述,並休眠 15 秒以使日誌可供使用。輸出包括來自 Lambda 的回應以及來自 get-log-events
命令的輸出。
複製下列程式碼範例的內容,並將您的 Lambda 專案目錄儲存為 get-logs.sh
。
如果您使用的是第 2 AWS CLI 版,則需要 cli-binary-format選項。若要讓此成為預設的設定,請執行 aws configure set cli-binary-format raw-in-base64-out
。若要取得更多資訊,請參閱《AWS Command Line Interface 使用者指南第 2 版》中 AWS CLI 支援的全域命令列選項。
#!/bin/bash aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out sed -i'' -e 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/
my-function
--log-stream-namestream1
--limit 5
範例 macOS 和 Linux (僅限)
在相同的命令提示中,macOS 和 Linux 使用者可能需要執行下列命令,以確保指令碼可執行。
chmod -R 755 get-logs.sh
範例 擷取最後五個記錄事件
在相同的命令提示中,執行下列指令碼以取得最後五個日誌事件。
./get-logs.sh
您應該會看到下列輸出:
{
"StatusCode": 200,
"ExecutedVersion": "$LATEST"
}
{
"events": [
{
"timestamp": 1559763003171,
"message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n",
"ingestionTime": 1559763003309
},
{
"timestamp": 1559763003173,
"message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...",
"ingestionTime": 1559763018353
},
{
"timestamp": 1559763003173,
"message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r \"key\": \"value\"\r}\n",
"ingestionTime": 1559763018353
},
{
"timestamp": 1559763003218,
"message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n",
"ingestionTime": 1559763018353
},
{
"timestamp": 1559763003218,
"message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n",
"ingestionTime": 1559763018353
}
],
"nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795",
"nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080"
}
刪除日誌
當您刪除函數時,不會自動刪除日誌群組。若要避免無限期地儲存日誌,請刪除日誌群組,或設定保留期間,系統會在該時間之後自動刪除日誌。
使用 Ruby 記錄程式庫
Ruby 記錄程式庫
# lambda_function.rb
require 'logger'
def handler(event:, context:)
logger = Logger.new($stdout)
logger.info('## ENVIRONMENT VARIABLES')
logger.info(ENV.to_a)
logger.info('## EVENT')
logger.info(event)
event.to_a
end
來自 logger
的輸出包含記錄等級、時間戳記和請求 ID。
START RequestId: 1c8df7d3-xmpl-46da-9778-518e6eca8125 Version: $LATEST
[INFO] 2020-01-31T22:12:58.534Z 1c8df7d3-xmpl-46da-9778-518e6eca8125 ## ENVIRONMENT VARIABLES
[INFO] 2020-01-31T22:12:58.534Z 1c8df7d3-xmpl-46da-9778-518e6eca8125 environ({'AWS_LAMBDA_LOG_GROUP_NAME': '/aws/lambda/my-function', 'AWS_LAMBDA_LOG_STREAM_NAME': '2020/01/31/[$LATEST]1bbe51xmplb34a2788dbaa7433b0aa4d', 'AWS_LAMBDA_FUNCTION_NAME': 'my-function', ...})
[INFO] 2020-01-31T22:12:58.535Z 1c8df7d3-xmpl-46da-9778-518e6eca8125 ## EVENT
[INFO] 2020-01-31T22:12:58.535Z 1c8df7d3-xmpl-46da-9778-518e6eca8125 {'key': 'value'}
END RequestId: 1c8df7d3-xmpl-46da-9778-518e6eca8125
REPORT RequestId: 1c8df7d3-xmpl-46da-9778-518e6eca8125 Duration: 2.75 ms Billed Duration: 3 ms Memory Size: 128 MB Max Memory Used: 56 MB Init Duration: 113.51 ms
XRAY TraceId: 1-5e34a66a-474xmpl7c2534a87870b4370 SegmentId: 073cxmpl3e442861 Sampled: true