本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
的日誌記錄和指標 AWS Lambda
Lambda 不需要針對工作負載管理和監控伺服器,並自動使用 CloudWatch指標和 CloudWatch 日誌,而無需進一步設定或檢測應用程式的程式碼。本節可協助您了解 Lambda 所用系統的效能特性,以及您的組態選擇如何影響效能。它還可協助您記錄和監控 Lambda 函數,以最佳化效能並診斷應用程式層級的問題。
Lambda 函數記錄
Lambda 會自動將標準輸出和標準錯誤訊息從 Lambda 函數串流至 CloudWatch 日誌,而不需要記錄驅動程式。Lambda 也會自動佈建容器,以執行您的 Lambda 函數,並將其設定為在個別日誌串流中輸出日誌訊息。
Lambda 函數的後續叫用可以重複使用相同的容器,並輸出至相同的日誌串流。Lambda 也可以佈建新的容器,並將調用輸出到新的日誌串流。
第一次叫用 Lambda 函數時,Lambda 會自動建立日誌群組。Lambda 函數可以有多個版本,您可以選擇要執行的版本。Lambda 函數調用的所有日誌都存放在相同的日誌群組中。名稱無法變更,且格式為 /aws/lambda/<YourLambdaFunctionName>
。每個 Lambda 函數執行個體的日誌群組中都會建立個別的日誌串流。對於使用 YYYY/MM/DD/[<FunctionVersion>]<InstanceId>
格式的日誌串流,Lambda 具有標準命名慣例。由 InstanceId
產生 AWS ,以識別 Lambda 函數執行個體。
我們建議您將日誌訊息格式化為 JSON 格式,因為您可以使用 CloudWatch Logs Insights 更輕鬆地查詢它們。它們也可以更輕鬆地篩選和匯出。您可以使用記錄程式庫來簡化此程序或撰寫您自己的日誌處理函數。我們建議您使用記錄程式庫來協助格式化和分類日誌訊息。例如,如果您的 Lambda 函數是以 Python 撰寫,您可以使用 Python 記錄模組
另一個最佳實務是使用 變數來設定日誌輸出層級,並根據環境和您的需求進行調整。除了使用的程式庫之外,Lambda 函數的程式碼可能會根據日誌輸出層級輸出大量的日誌資料。這可能會影響您的記錄成本並影響效能。
Lambda 可讓您為 Lambda 函數執行期環境設定環境變數,而無需更新程式碼。例如,您可以建立LAMBDA_LOG_LEVEL
環境變數,定義可從程式碼擷取的日誌輸出層級。下列範例會嘗試擷取LAMBDA_LOG_LEVEL
環境變數,並使用 值定義記錄輸出。如果未設定環境變數,則會預設為 INFO
關卡。
import logging from os import getenv logger = logging.getLogger() log_level = getenv("LAMBDA_LOG_LEVEL", "INFO") level = logging.getLevelName(log_level) logger.setLevel(level)
從 傳送日誌至其他目的地 CloudWatch
您可以使用訂閱篩選條件將日誌傳送至其他目的地 (例如 Amazon OpenSearch Service 或 Lambda 函數)。如果您不使用 Amazon OpenSearch Service,您可以使用 Lambda 函數來處理日誌,並使用 將其傳送至您選擇的 AWS 服務 AWS SDKs。
您也可以在 Lambda 函數中SDKs,將 用於 AWS 雲端外部的日誌目的地,以直接將日誌陳述式傳送到您選擇的目的地。如果您選擇此選項,我們建議您考慮延遲、額外處理時間、錯誤和重試處理的影響,以及操作邏輯與 Lambda 函數的聯結。
Lambda 函數指標
Lambda 可讓您在不管理或擴展伺服器的情況下執行程式碼,而這幾乎可以減輕系統層級稽核和診斷的負擔。不過,了解 Lambda 函數在系統層級的效能和調用指標仍然很重要。這可協助您最佳化資源組態並改善程式碼效能。透過適當調整 Lambda 函數的大小,有效地監控和測量效能可以改善使用者體驗並降低成本。一般而言,以 Lambda 函數執行的工作負載也具有需要擷取和分析的應用程式層級指標。Lambda 直接支援內嵌指標格式,讓擷取應用程式層級 CloudWatch 指標變得更輕鬆。
系統層級指標
Lambda 會自動與 CloudWatch 指標整合,並為 Lambda 函數提供一組標準指標。Lambda 也為每個 Lambda 函數提供個別的監控儀表板,並具有這些指標。您需要監控的兩個重要指標是錯誤和叫用錯誤。了解叫用錯誤和其他錯誤類型之間的差異,可協助您診斷和支援 Lambda 部署。
叫用錯誤會導致 Lambda 函數無法執行。這些錯誤發生在程式碼執行之前,因此您無法在程式碼中實作錯誤處理來識別它們。反之,您應該為 Lambda 函數設定警示,以偵測這些錯誤並通知操作和工作負載擁有者。這些錯誤通常與組態或許可錯誤有關,並且可能因您的組態或許可變更而發生。調用錯誤可能會啟動重試,這會導致函數多次調用。
即使函數擲出例外狀況,成功叫用 Lambda 函數也會傳回 HTTP 200 回應。您的 Lambda 函數應實作錯誤處理並引發例外狀況,讓Errors
指標擷取並識別 Lambda 函數的失敗執行。您應該從 Lambda 函數叫用中傳回格式化回應,其中包含判斷執行是否完全失敗、部分失敗或成功的資訊。
CloudWatch 提供 CloudWatch Lambda Insights,您可以為個別 Lambda 函數啟用。Lambda Insights 會收集、彙總和摘要系統層級指標 (例如CPU時間、記憶體、磁碟和網路使用量)。Lambda Insights 也會收集、彙總和摘要診斷資訊 (例如冷啟動和 Lambda 工作者關機),以協助您隔離並快速解決問題。
Lambda Insights 使用內嵌指標格式,根據 Lambda 函數的名稱,使用/aws/lambda-insights/
日誌串流名稱字首自動將效能資訊傳送到日誌群組。這些效能日誌事件會建立 CloudWatch 指標,這是自動 CloudWatch 儀表板的基礎。我們建議您啟用 Lambda Insights 以進行效能測試和生產環境。Lambda Insights 建立的其他指標包括memory_utilization
有助於正確調整 Lambda 函數大小,讓您避免支付不必要的容量。
應用程式指標
您也可以 CloudWatch 使用內嵌指標格式在 中建立和擷取自己的應用程式指標。您可以利用AWS提供的內嵌指標格式程式庫,來建立並發出內嵌指標格式陳述式 CloudWatch。整合的 Lambda CloudWatch 記錄設施已設定為處理和擷取適當格式的內嵌指標格式陳述式。