儲存日誌 - Amazon EMR

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

儲存日誌

若要在 EMR Serverless 上監控您的任務進度並疑難排解任務失敗,您可以選擇 EMR Serverless 儲存和提供應用程式日誌的方式。當您提交任務執行時,您可以將受管儲存、Amazon S3 和 Amazon 指定 CloudWatch 為記錄選項。

透過 CloudWatch,您可以指定要使用的日誌類型和日誌位置,或接受預設類型和位置。如需 CloudWatch 日誌的詳細資訊,請參閱 使用 Amazon 記錄無EMR伺服器 CloudWatch。使用受管儲存和 S3 記錄時,下表顯示如果您選擇受管儲存體 Amazon S3 儲存貯體 或兩者,您可以預期的日誌位置和 UI 可用性。

選項 事件日誌 容器日誌 應用程式使用者介面

受管儲存

存放在受管儲存體中

存放在受管儲存體中

支援

受管儲存體和 S3 儲存貯體

存放在兩個位置

存放在 S3 儲存貯體

支援

Amazon S3 儲存貯體

存放在 S3 儲存貯體

存放在 S3 儲存貯體

不支援1

1 建議您保持選取受管儲存選項。否則,您無法使用內建應用程式 UIs。

使用 受管儲存體記錄 for EMR Serverless

根據預設,EMRServerless 會將應用程式日誌安全地存放在 Amazon EMR受管儲存體中,最長 30 天。

注意

如果您關閉預設選項,Amazon EMR無法代表您疑難排解任務。

若要從 EMR Studio 關閉此選項,請在提交任務頁面的其他設定區段取消選取允許 AWS 保留日誌 30 天核取方塊。

若要從 關閉此選項 AWS CLI,請在提交任務執行時使用 managedPersistenceMonitoringConfiguration 組態。

{ "monitoringConfiguration": { "managedPersistenceMonitoringConfiguration": { "enabled": false } } }

使用 Amazon S3 儲存貯體記錄無EMR伺服器

在任務將日誌資料傳送至 Amazon S3 之前,您必須在任務執行期角色的許可政策中包含下列許可。amzn-s3-demo-logging-bucket 將 取代為記錄儲存貯體的名稱。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-logging-bucket/*" ] } ] }

若要設定 Amazon S3 儲存貯體以儲存來自 的日誌 AWS CLI,請在開始任務執行時使用 s3MonitoringConfiguration 組態。若要這麼做,請在組態--configuration-overrides中提供下列項目。

{ "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-logging-bucket/logs/" } } }

對於未啟用重試的批次任務,EMRServerless 會將日誌傳送至下列路徑:

'/applications/<applicationId>/jobs/<jobId>'

EMR 無伺服器 7.1.0 版和更新版本支援串流任務和批次任務的重試嘗試。如果您在啟用重試時執行任務,EMRServerless 會自動將嘗試次數新增至日誌路徑字首,以便您更妥善地區分和追蹤日誌。

'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/'

使用 Amazon 記錄無EMR伺服器 CloudWatch

當您將任務提交至 EMR Serverless 應用程式時,您可以選擇 Amazon CloudWatch 作為儲存應用程式日誌的選項。這可讓您使用 CloudWatch Logs Insights 和 Live Tail 等 CloudWatch 日誌分析功能。您也可以將日誌從 串流 CloudWatch 到其他系統,例如 OpenSearch 以進行進一步分析。

EMR Serverless 提供驅動程式日誌的即時記錄。您可以使用 CloudWatch 即時尾部功能或透過 CloudWatch CLI尾部命令即時檢視日誌。

根據預設, CloudWatch 記錄會針對無EMR伺服器停用。若要啟用它,請參閱 中的組態AWS CLI

注意

Amazon 會即時 CloudWatch 發佈日誌,因此從工作者身上產生更多資源。如果您選擇低工作者容量,可能會對任務執行時間造成的影響增加。如果您啟用 CloudWatch 記錄,我們建議您選擇更大的工作者容量。如果 的每秒交易 (TPS) 速率太低,日誌發佈也可能會限流PutLogEvents。 CloudWatch 限流組態對所有 服務都是全域的,包括無EMR伺服器。如需詳細資訊,請參閱如何在 re:post 上判斷 CloudWatch 日誌中的限流?AWS

使用 記錄的必要許可 CloudWatch

在任務將日誌資料傳送至 Amazon 之前 CloudWatch,您必須在任務執行期角色的許可政策中包含下列許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:AWS 區域:111122223333:*" ] }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:AWS 區域:111122223333:log-group:my-log-group-name:*" ] } ] }

AWS CLI

若要設定 Amazon 從 CloudWatch 儲存無EMR伺服器日誌 AWS CLI,請在開始任務執行時使用 cloudWatchLoggingConfiguration 組態。若要這麼做,請提供下列組態覆寫。您也可以選擇性地提供日誌群組名稱、日誌串流字首名稱、日誌類型和加密金鑰 ARN。

如果您未指定選用值,則 會使用預設日誌串流 /aws/emr-serverless將日誌 CloudWatch 發佈至預設日誌群組 /applications/applicationId/jobs/jobId/worker-type

EMR 無伺服器 7.1.0 版和更新版本支援串流任務和批次任務的重試嘗試。如果您為任務啟用重試,EMRServerless 會自動將嘗試次數新增至日誌路徑字首,以便您更妥善地區分和追蹤日誌。

'/applications/<applicationId>/jobs/<jobId>/attempts/<attemptNumber>/worker-type'

下列顯示使用 EMR Serverless 預設設定開啟 Amazon CloudWatch 日誌記錄所需的最低組態:

{ "monitoringConfiguration": { "cloudWatchLoggingConfiguration": { "enabled": true } } }

下列範例顯示您在開啟 Amazon CloudWatch logging for EMR Serverless 時可以指定的所有必要和選用組態。支援的 logTypes 值也會列在此範例下方。

{ "monitoringConfiguration": { "cloudWatchLoggingConfiguration": { "enabled": true, // Required "logGroupName": "Example_logGroup", // Optional "logStreamNamePrefix": "Example_logStream", // Optional "encryptionKeyArn": "key-arn", // Optional "logTypes": { "SPARK_DRIVER": ["stdout", "stderr"] //List of values } } } }

根據預設,EMRServerless 只會將驅動程式 stdout 和 stderr 日誌發佈至 CloudWatch。如果您想要其他日誌,則可以使用 logTypes 欄位指定容器角色和對應的日誌類型。

下列清單顯示您可以為logTypes組態指定的支援工作者類型:

Spark
  • SPARK_DRIVER : ["STDERR", "STDOUT"]

  • SPARK_EXECUTOR : ["STDERR", "STDOUT"]

Hive
  • HIVE_DRIVER : ["STDERR", "STDOUT", "HIVE_LOG", "TEZ_AM"]

  • TEZ_TASK : ["STDERR", "STDOUT", "SYSTEM_LOGS"]