將 Amazon EMR 日誌發佈至 CloudWatch Logs - Amazon EMR

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

將 Amazon EMR 日誌發佈至 CloudWatch Logs

概觀

Amazon EMR on EC2 提供與 Amazon CloudWatch Logs 的原生整合,可讓您將叢集日誌直接傳送到 CloudWatch。此功能可簡化日誌管理,並提供 EMR 叢集日誌的集中存取,以進行監控、疑難排解和分析。

啟用 CloudWatch 記錄功能後,您就可以自動擷取日誌,並將日誌從 EMR 叢集串流至 CloudWatch 日誌群組。這包括步驟執行日誌、Spark 驅動程式日誌和 Spark 執行器日誌,可讓您全面了解叢集操作和應用程式行為。

CloudWatch 記錄功能從 Amazon EMR 7.11.0 版開始可用,並在建立叢集時透過 MonitoringConfiguration 參數設定。啟用後,日誌會在產生時自動串流至 CloudWatch,透過 CloudWatch 主控台或 API 提供近乎即時的日誌資料存取。

先決條件

為您的 EMR 叢集啟用 CloudWatch 記錄之前,請確定符合下列先決條件:

  • Amazon EMR 版本:您的叢集必須使用 Amazon EMR 7.11.0 或更新版本。

  • CloudWatch Agent 應用程式:Amazon CloudWatch Agent 必須安裝在您的叢集上。

  • IAM 許可:叢集的 EC2 執行個體描述檔必須具有所需的 CloudWatch Logs 許可。

  • VPC 端點 (適用於私有子網路):如果您的叢集位於私有子網路中,您必須為 CloudWatch Logs 設定 VPC 端點。

許可

CloudWatch Agent 需要特定 AWS Identity and Access Management(IAM) 許可,才能建立日誌群組、建立日誌串流,以及將日誌事件寫入 CloudWatch Logs。這些許可必須連接到 EMR 叢集所使用的 Amazon EC2 執行個體描述檔。

必要的 IAM 政策

將下列政策新增至 Amazon EMR 的 EC2 執行個體描述檔,以授予必要的許可:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:PutRetentionPolicy", "logs:DescribeLogStreams", "logs:DescribeLogGroups", "logs:CreateLogStream", "logs:CreateLogGroup" ], "Resource": "*", "Sid": "AllowCWACloudWatchLogs" } ] }

連接政策

若要將此政策連接至 EMR 的 EC2 執行個體描述檔:

  1. 導覽至 IAM 主控台。

  2. 找出 EMR 叢集使用的執行個體描述檔。 通常為 EMR_EC2_DefaultRole

  3. 建立新的內嵌政策,或附加具有上述許可的客戶受管政策。

  4. 儲存政策變更。

如需 Amazon EMR 的 IAM 角色的詳細資訊,請參閱《Amazon EMR 管理指南》中的設定 Amazon EMR 的 IAM 角色對 AWS 服務和資源的許可

設定 CloudWatch Logging

您可以透過 AWS 管理主控台或 AWS SDKs 建立新的 EMR 叢集時 AWS CLI,啟用 CloudWatch 記錄。組態是透過 MonitoringConfiguration 參數指定。

使用 AWS 管理主控台

若要從主控台建立具有 CloudWatch 記錄的叢集:

  1. 導覽至 AWS EMR 主控台

  2. 選擇 Create Cluster (建立叢集)。

  3. 名稱和應用程式下,選取 Amazon EMR 7.11.0 或更新版本。

  4. 應用程式套件下,選取您要安裝的應用程式,並確保您的選擇中包含 Amazon CloudWatch Agent。

  5. 叢集日誌下,選取將叢集特定日誌發佈至 Amazon CloudWatch 的選項。

  6. (選用) 設定下列設定:

    • 日誌群組名稱 - 自訂日誌群組名稱。預設值為 /aws/emr/{cluster_id}

    • 日誌串流字首 - 日誌串流名稱的字首 預設值為 empty

    • CloudWatch KMS 金鑰 - 日誌加密的 KMS 金鑰 ARN (選用)。

    • 日誌類型 - 選取要擷取的日誌類型 (預設:步驟和 Spark 驅動程式)

  7. 完成剩餘的叢集組態設定。

  8. 選擇 Create Cluster (建立叢集)。

建立叢集之後,您可以從叢集管理 → Amazon CloudWatch 中的日誌目的地下的 EMR 叢集詳細資訊頁面存取 CloudWatch Logs 連結。 Amazon CloudWatch

使用 AWS CLI

您可以使用 AWS CLI 搭配 create-cluster命令來啟用 CloudWatch 記錄。CloudWatch 代理程式必須包含在 --applications 參數中,並透過 --monitoring-configuration 參數設定記錄。

範例:預設組態

EMR 只會自動擷取步驟日誌和 Spark 驅動程式日誌,並將其傳送至預設日誌群組。

aws emr create-cluster \ --name "EMR cluster with CloudWatch Logs" \ --release-label emr-7.11.0 \ --applications Name=Spark Name=AmazonCloudWatchAgent \ --instance-type m7g.2xlarge \ --instance-count 3 \ --use-default-roles \ --monitoring-configuration '{ "CloudWatchLogConfiguration": { "Enabled": true } }'

使用預設組態時:

  • 日誌群組名稱: /aws/emr/{cluster_id}(其中 {cluster_id} 會自動取代為您的叢集 ID)。

  • 日誌串流字首:空白 (無字首)。

  • 日誌類型: STEP_LOGSSPARK_DRIVER 已啟用,每個都會同時擷取 STDOUTSTDERR

  • 加密:無客戶受管金鑰 (預設使用 CloudWatch Server 端加密)

範例:自訂組態

此範例示範具有特定日誌群組名稱、KMS 加密和選擇性日誌類型的自訂組態。

aws emr create-cluster \ --name "EMR cluster with custom CloudWatch Logs" \ --release-label emr-7.11.0 \ --applications Name=Spark Name=AmazonCloudWatchAgent \ --instance-type m7g.2xlarge \ --instance-count 3 \ --use-default-roles \ --monitoring-configuration '{ "CloudWatchLogConfiguration": { "Enabled": true, "LogGroupName": "/my-company/emr/production", "LogStreamNamePrefix": "cluster-prod", "EncryptionKeyArn": "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012", "LogTypes": { "STEP_LOGS": ["STDOUT", "STDERR"], "SPARK_DRIVER": ["STDOUT", "STDERR"], "SPARK_EXECUTOR": ["STDERR", "STDOUT"] } } }'

此組態:

  • 在自訂日誌群組 中建立日誌/my-company/emr/production

  • 使用 為所有日誌串流名稱加上字首cluster-prod

  • 使用指定的 KMS 金鑰加密日誌。

  • 擷取所有日誌類型 - 步驟日誌、Spark 驅動程式日誌和 Spark 執行器日誌。

如需 AWS CLI 搭配 Amazon EMR 使用 的詳細資訊,請參閱 AWS CLI EMR 的命令參考

組態參考

CloudWatchLogConfiguration 參數

CloudWatchLogConfigurationv 物件支援下列參數:

CloudWatchLogConfiguration 參數
參數 Type 必要 描述
Enabled Boolean 設定為 true以啟用 CloudWatch 記錄。設定為 false以停用。
LogGroupName String CloudWatch 日誌群組名稱。預設:/aws/emr/{cluster_id}
LogStreamNamePrefix String 日誌串流名稱的字首。預設:空字串
EncryptionKeyArn String 日誌加密的 KMS 金鑰 ARN。如果未指定,日誌會透過 CloudWatch 伺服器端加密進行加密。
LogTypes 物件 指定要擷取的日誌類型。預設: STEP_LOGSSPARK_DRIVER類型搭配 STDOUT 和 STDERR。

日誌類型

Amazon EMR 支援三種日誌類型,每個都同時擷取標準輸出和標準錯誤串流:

支援的日誌類型
日誌類型 Description 可用的串流
STEP_LOGS EMR 步驟執行日誌,包括步驟控制器日誌 STDOUT, STDERR
SPARK_DRIVER 來自 Spark 應用程式的 Apache Spark 驅動程式日誌 STDOUT, STDERR
SPARK_EXECUTOR 工作者節點的 Apache Spark 執行器日誌 STDOUT, STDERR
預設日誌類型組態

當您未指定 LogTypes 參數時,EMR 會使用下列預設組態:

"LogTypes": { "STEP_LOGS": ["STDOUT", "STDERR"], "SPARK_DRIVER": ["STDOUT", "STDERR"] }
自訂日誌類型組態

您可以明確指定 LogTypes 參數來自訂要擷取的日誌類型。例如,若要僅擷取步驟日誌:

"LogTypes": { "STEP_LOGS": ["STDOUT", "STDERR"] }

或者,若要僅從 Spark 驅動程式擷取標準錯誤:

"LogTypes": { "SPARK_DRIVER": ["STDERR"] }

日誌群組和串流命名

CloudWatch 會將日誌整理成日誌群組和日誌串流:

  • 日誌群組:共用相同保留、監控和存取控制設定的日誌串流集合。

    • 預設名稱: /aws/emr/{cluster_id}

    • 自訂名稱:您指定的任何有效 CloudWatch 日誌群組名稱。

  • 日誌串流:來自單一來源的一系列日誌事件:

    • 命名模式:

      • 步驟日誌:{prefix}/steps/{step_id}/{file_name}

      • Spark 驅動程式和執行器日誌: {prefix}/applications/{application_id}/{container_id}/{file_name}

    • 範例:

      • /steps/s-ABCDEFG123456/stdout

      • cluster-prod/steps/s-ABCDEFG123456/stderr

      • /applications/application_1234567890_0001/container_1234567890_0001_01_000001/stdout

使用 加密日誌 AWS KMS

您可以使用 AWS Key Management Service (KMS) 加密靜態 CloudWatch 日誌。若要啟用加密:

  1. 在 AWS 與 EMR 叢集相同的區域中建立或識別 KMS 金鑰。

  2. 確保 KMS 金鑰政策允許 CloudWatch Logs 服務使用金鑰。

  3. EncryptionKeyArn 參數新增至您的 CloudWatchLogConfiguration

如需加密 CloudWatch Logs 資料的詳細資訊,請參閱使用 在 CloudWatch Logs 中加密日誌資料 AWS Key Management Service

使用 KMS 加密的範例

{ "CloudWatchLogConfiguration": { "Enabled": true, "EncryptionKeyArn": "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012" } }

在 CloudWatch 中檢視日誌

叢集執行並啟用 CloudWatch 記錄後,您可以透過 CloudWatch 主控台或 API 檢視和分析日誌。

從 EMR 主控台存取日誌

存取叢集日誌的最快方式是直接從 EMR 主控台:

  1. 導覽至 Amazon EMR 主控台。

  2. 從叢集清單中選取您的叢集。

  3. 在叢集詳細資訊頁面上,找到叢集管理區段。

  4. 按一下 Amazon CloudWatch 連結中的日誌目的地

此連結會引導您直接前往篩選至叢集日誌群組的 CloudWatch Logs 主控台。

從 CloudWatch 主控台存取日誌

若要手動導覽至 CloudWatch 中的日誌:

  1. 開啟 CloudWatch 主控台

  2. 在導覽窗格中,選擇 Log groups (日誌群組)。

  3. 尋找您的日誌群組 (預設: /aws/emr/{cluster_id}或您的自訂日誌群組名稱)

  4. 選擇日誌群組以檢視可用的日誌串流。

  5. 選取日誌串流以檢視其日誌事件。

如需有關 CloudWatch Logs 的詳細資訊,請參閱 Amazon CloudWatch Logs 使用者指南

考量事項

CloudWatch 代理程式行為

Amazon CloudWatch Agent 同時提供指標和記錄功能:

  • 單獨啟用 CloudWatch Agent (不含 MonitoringConfiguration) 只會將 CloudWatch 指標發佈至 CloudWatch。不會傳送日誌。

  • 啟用 CloudWatch 記錄需要 CloudWatch Agent 應用程式和具有 的 MonitoringConfiguration 參數CloudWatchLogConfiguration。這可同時啟用指標和記錄。

僅啟用 CloudWatch 記錄 (停用 CloudWatch 指標)

如果您想要啟用 CloudWatch 記錄,但停用指標收集功能,您可以設定 CloudWatch Agent 來停止匯出指標。將下列分類新增至叢集組態:

[ { "Classification": "emr-metrics", "Properties": {}, "Configurations": [ { "Classification": "emr-system-metrics", "Properties": {}, "Configurations": [] } ] } ]

如需 CloudWatch 指標的詳細資訊,請參閱使用 Amazon CloudWatch 監控指標

已知限制

日誌上傳期間的指標資料點:

當 CloudWatch 記錄處於作用中狀態時,您可能會在高日誌活動期間發現 CloudWatch 指標資料偶爾出現差距,尤其是在步驟提交期間。這是因為 EMR 執行個體控制器會在提交步驟時重新啟動 CloudWatch Agent 以套用新的日誌組態,暫時中斷指標收集。這不會影響日誌交付或叢集功能。

私有子網路需求

若要將日誌發佈至私有子網路中 EMR 叢集的 CloudWatch Logs,請建立 CloudWatch Logs VPC 端點並將其與叢集的 VPC 建立關聯。

如需 CloudWatch Logs 端點的詳細資訊,請參閱《 AWS 一般參考指南》中的 Amazon CloudWatch Logs 端點和配額

成本考量

CloudWatch Logs 費用是根據:

  • 資料擷取:擷取至 CloudWatch 的日誌資料量

  • 儲存:根據您的保留設定存放的日誌資料量

  • 資料分析:使用 CloudWatch Logs Insights 執行查詢

若要最佳化成本:

  • 為您的日誌群組設定適當的日誌保留期間。

  • 使用選擇性日誌類型僅擷取您需要的日誌。

  • 考慮以較低的成本使用 Amazon S3 日誌記錄進行長期日誌儲存。

如需目前的定價資訊,請參閱 Amazon CloudWatch 定價

其他資源