将 Amazon EMR 日志发布到日志 CloudWatch - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Amazon EMR 日志发布到日志 CloudWatch

概述

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 日志记录之前,请确保满足以下先决条件:

  • 亚马逊 EMR 版本:您的集群必须使用亚马逊 EMR 版本 7.11.0 或更高版本。

  • CloudWatch 代理应用程序:必须在您的集群上安装 Amazon CloudWatch 代理。

  • IAM 权限:您的集群的 EC2 实例配置文件必须具有所需的 CloudWatch 日志权限。

  • VPC 终端节点(用于私有子网):如果您的集群位于私有子网中,则必须为 CloudWatch 日志配置 VPC 终端节点。

Permissions

CloudWatch 代理需要特定 Amazon Identity and Access Management(IAM) 权限才能创建日志组、创建日志流以及将日志事件写入 CloudWatch 日志。这些权限必须附加到您的 EMR 集群使用的 Amazon EC2 实例配置文件中。

所需的 IAM 策略

将以下策略添加到您的EC2 实例配置文件中,以便 Amazon EMR 授予必要的权限:

{ "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 角色的更多信息,请参阅《亚马逊 EMR 管理指南》中的为亚马逊 EMR 配置 IAM 角色对 Amazon 服务和资源的权限

配置 CloudWatch 日志

在创建新 EMR 集群时,您可以通过 Amazon 管理控制台启用 CloudWatch 日志记录 Amazon CLI,或。 Amazon SDKs配置通过MonitoringConfiguration参数指定。

使用 Amazon 管理控制台

要通过控制台创建带有 CloudWatch 日志记录功能的集群,请执行以下操作:

  1. 导航到 Amazon EMR 控制台。

  2. 选择创建集群

  3. 在 “名称和应用程序” 下,选择 7.11.0 或更高版本的 Amazon EMR 版本。

  4. 在 “应用程序包” 下,选择要安装的应用程序,并确保您的选择中包含 Amazon A CloudWatch gent。

  5. 在 “集群日志” 下,选择 “向 Amazon 发布特定于集群的日志” 选项。 CloudWatch

  6. (可选)配置以下设置:

    • 日志组名称-自定义日志组名称。默认值为 /aws/emr/{cluster_id}

    • 日志流前缀-日志流名称的前缀默认为empty

    • CloudWatch KMS 密钥-用于日志加密的 KMS 密钥 ARN(可选)。

    • 日志类型-选择要捕获的日志类型(默认:步骤和 Spark 驱动程序)

  7. 完成其余的集群配置设置。

  8. 选择创建集群

创建集群后,您可以从 EMR 集群详情页面的 “集群管理” → “日志目标” 下访问 “日志” 链接。 CloudWatch CloudWatch

使用 Amazon CLI

您可以使用 Amazon CLI 带create-cluster命令的启用 CloudWatch 日志记录。参数中必须包含 CloudWatch Agen --applications t,并通过--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 服务器端加密)

示例:自定义配置

此示例演示了具有特定日志组名称、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 执行器日志。

有关在 Amazon EMR 中 Amazon CLI 使用的更多信息,请参阅 EMR Amazon CLI 命令参考

配置引用

CloudWatchLogConfiguration 参数

CloudWatchLogConfigurationv对象支持以下参数:

CloudWatchLogConfiguration 参数
参数 Type 必需 描述
Enabled 布尔值 设置为true可启用 CloudWatch 日志记录。设置false为禁用。
LogGroupName 字符串 CloudWatch 日志组名称。默认值:/aws/emr/{cluster_id}
LogStreamNamePrefix 字符串 日志流名称的前缀。默认:空字符串
EncryptionKeyArn 字符串 用于日志加密的 KMS 密钥的 ARN。如果未指定,则通过 CloudWatch 服务器端加密对日志进行加密。
LogTypes 对象 指定要捕获的日志类型。默认:STEP_LOGSSPARK_DRIVER使用 STDOUT 和 STDERR 键入。

日志类型

Amazon EMR 支持三种日志类型,每种类型都捕获标准输出和标准错误流:

支持的日志类型
日志类型 说明 可用直播
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

使用加密日志 Amazon KMS

您可以使用 Amazon Key Management Service (KMS) 加密静态 CloudWatch 日志。要启用加密,请执行以下操作

  1. 在与 EMR 集群相同的 Amazon 区域中创建或标识 KMS 密钥。

  2. 确保 KMS 密钥策略允许 CloudWatch 日志服务使用该密钥。

  3. EncryptionKeyArn参数添加到您的CloudWatchLogConfiguration

有关加密 CloudWatch 日志数据的详细信息,请参阅使用 Amazon Key Management Service加密日志中的 CloudWatch 日志数据

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 日志组的日志控制台。

从 CloudWatch 控制台访问日志

要手动导航到您的登录信息,请执行 CloudWatch以下操作:

  1. 打开 CloudWatch 控制台

  2. 在导航窗格中,选择日志组

  3. 查找您的日志组(默认:/aws/emr/{cluster_id}或您的自定义日志组名称)

  4. 选择日志组以查看可用的日志流。

  5. 选择一个日志流以查看其日志事件。

有关使用 CloudWatch 日志的更多信息,请参阅 Amazon CloudWatch 日志用户指南

注意事项

CloudWatch 代理行为

Amazon A CloudWatch gent 提供指标和日志功能:

  • 单独启用 CloudWatch 代理(不启用MonitoringConfiguration)只能向发布 CloudWatch 指标 CloudWatch。未发送任何日志。

  • 启用 CloudWatch 日志记录需要同时使用 CloudWatch 代理应用程序和带的MonitoringConfiguration参数CloudWatchLogConfiguration。这样可以将指标和日志记录在一起。

仅启用 CloudWatch 日志记录(禁用 CloudWatch 指标)

如果要启用 CloudWatch 日志记录但禁用指标收集功能,则可以将 CloudWatch 代理配置为停止导出指标。将以下分类添加到您的集群配置中:

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

有关 CloudWatch 指标的更多信息,请参阅使用 Amazon 监控指标 CloudWatch

已知限制条件

日志上传期间的指标数据点:

当 CloudWatch 日志处于活动状态时,您可能会在日志活动频繁的时期,尤其是在步骤提交期间,偶尔会发现 CloudWatch 指标数据存在差距。之所以发生这种情况,是因为提交步骤时,EMR 实例控制器会重新启动 CloudWatch 代理以应用新的日志配置,从而暂时中断指标收集。这不会影响日志传输或集群功能。

私有子网要求

要将日志发布到私有子网中 EMR 集群的 CloudWatch 日志,请创建日志 CloudWatch VPC 终端节点并将其与集群的 VPC 关联。

有关 CloudWatch 日志终端节点的更多信息,请参阅《Amazon 通用参考指南》中的 Amazon CloudWatch Logs 终端节点和配额

与成本相关的注意事项

CloudWatch 日志费用基于:

  • 数据提取:摄取到的日志数据量 CloudWatch

  • 存储:存储的日志数据量,取决于您的保留设置

  • 数据分析:使用 Logs Insight CloudWatch s 运行查询

要优化成本,请采用以下方法:

  • 为您的日志组设置适当的日志保留期。

  • 使用选择性日志类型仅捕获您需要的日志。

  • 考虑以较低的成本使用 Amazon S3 日志进行长期日志存储。

有关当前定价信息,请参阅 Amazon CloudWatch 定价

其他资源