

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

# 将 Amazon EMR 日志发布到日志 CloudWatch
<a name="emr-plan-logging-cw"></a>

## 概述
<a name="emr-plan-logging-cw-overview"></a>

EC2 上的 Amazon EMR 提供了与 Amazon CloudWatch Logs 的原生集成，使您可以将集群日志直接发送到。 CloudWatch 此功能简化了日志管理，并提供对 EMR 集群日志的集中访问以进行监控、故障排除和分析。

启用 CloudWatch 日志记录后，您可以自动捕获来自 EMR 集群的日志并将其流式传输到 CloudWatch 日志组。这包括步骤执行日志、Spark 驱动程序日志和 Spark 执行器日志，使您可以全面了解集群操作和应用程序行为。

 CloudWatch 日志功能从 Amazon EMR 7.11.0 版本开始可用，并且在创建集群时通过`MonitoringConfiguration`参数进行配置。启用后，日志将在生成时自动流式传输到 CloudWatch ，从而通过 CloudWatch 控制台或 API 提供对日志数据的近乎实时的访问。

## 先决条件
<a name="emr-plan-logging-cw-prerequisites"></a>

在 EMR 集群启用 CloudWatch 日志记录之前，请确保满足以下先决条件：
+ **亚马逊 EMR 版本：**您的集群必须使用亚马逊 EMR 版本 7.11.0 或更高版本。
+ **CloudWatch 代理应用程序：**必须在您的集群上安装 Amazon CloudWatch 代理。
+ **IAM 权限：**您的集群的 EC2 实例配置文件必须具有所需的 CloudWatch 日志权限。
+ **VPC 终端节点（用于私有子网）：**如果您的集群位于私有子网中，则必须为 CloudWatch 日志配置 VPC 终端节点。

## Permissions
<a name="emr-plan-logging-cw-permissions"></a>

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

### 所需的 IAM 策略
<a name="emr-plan-logging-cw-required-policy"></a>

将以下策略添加到您[的 EC2 实例配置文件中，以便 Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role-for-ec2.html) 授予必要的权限：

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

### 附上政策
<a name="emr-plan-logging-cw-permissions-attaching"></a>

要将此策略附加到 EMR 的 EC2 实例配置文件中，请执行以下操作：

1. 导航到 IAM 控制台。

1. 找到 EMR 集群使用的实例配置文件。通常是。`EMR_EC2_DefaultRole`

1. 创建新的内联策略或附加具有上述权限的客户托管策略。

1. 保存政策更改。

有关 Amazon EMR 的 IAM 角色的更多信息，请参阅[《亚马逊 EMR 管理指南》中的为亚马逊 EMR 配置 IAM 角色对 AWS 服务和资源的权限](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html)。

## 配置 CloudWatch 日志
<a name="emr-plan-logging-cw-config"></a>

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

### 使用 AWS 管理控制台
<a name="emr-plan-logging-cw-config-console"></a>

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

1. 导航到 [AWS EMR](https://console.aws.amazon.com/emr/) 控制台。

1. 选择**创建集群**。

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

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

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

1. （可选）配置以下设置：
   + **日志组名称**-自定义日志组名称。默认值为 `/aws/emr/{cluster_id}`。
   + **日志流前缀**-日志流名称的前缀默认为`empty`。
   + **CloudWatch KMS 密钥**-用于日志加密的 KMS 密钥 ARN（可选）。
   + **日志类型**-选择要捕获的日志类型（默认：步骤和 Spark 驱动程序）

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

1. 选择**创建集群**。

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

### 使用 AWS CLI
<a name="emr-plan-logging-cw-config-using-the-cli"></a>

您可以使用 AWS CLI 带`create-cluster`命令的启用 CloudWatch 日志记录。参数中必须包含 CloudWatch Agen `--applications` t，并通过`--monitoring-configuration`参数配置日志记录。

#### 示例：默认配置
<a name="emr-plan-logging-cw-config-default-configuration"></a>

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_LOGS`和`SPARK_DRIVER`已启用，每种都捕获`STDOUT`和`STDERR`。
+ **加密：**没有客户管理的密钥（默认使用 CloudWatch 服务器端加密）

#### 示例：自定义配置
<a name="emr-plan-logging-cw-config-default-configuration-custom"></a>

此示例演示了具有特定日志组名称、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 中 AWS CLI 使用的更多信息，请参阅 EMR [AWS CLI 命令参考](https://docs.aws.amazon.com/cli/latest/reference/emr/)。

### 配置引用
<a name="emr-plan-logging-cw-configuration-reference"></a>

#### CloudWatchLogConfiguration 参数
<a name="emr-plan-logging-cw-configuration-parameters"></a>

该`CloudWatchLogConfigurationv`对象支持以下参数：


**CloudWatchLogConfiguration 参数**  

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

#### 日志类型
<a name="emr-plan-logging-cw-configuration-log-types"></a>

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


**支持的日志类型**  

| 日志类型 | 说明 | 可用直播 | 
| --- | --- | --- | 
| STEP\_LOGS | EMR 步骤执行日志，包括步骤控制器日志 | STDOUT, STDERR | 
| SPARK\_DRIVER | Spark 应用程序中的 Apache Spark 驱动程序日志 | STDOUT, STDERR | 
| SPARK\_EXECUTOR | 来自工作节点的 Apache Spark 执行器日志 | STDOUT, STDERR | 

##### 默认日志类型配置
<a name="emr-plan-logging-cw-default-log-types"></a>

如果不指定`LogTypes`参数，EMR 将使用以下默认配置：

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

##### 自定义日志类型配置
<a name="emr-plan-logging-cw-default-log-types-configuration"></a>

您可以通过明确指定`LogTypes`参数来自定义要捕获的日志类型。例如，要仅捕获步骤日志，请执行以下操作：

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

或者要仅捕获 Spark 驱动程序中的标准错误，请执行以下操作：

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

#### 日志组和直播命名
<a name="emr-plan-logging-cw-log-group-and-stream-naming"></a>

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
<a name="emr-plan-logging-cw-encrypting-logs-with-kms"></a>

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

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

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

1. 将`EncryptionKeyArn`参数添加到您的`CloudWatchLogConfiguration`。

有关加密 CloudWatch 日志数据的详细信息，请参阅[使用 AWS Key Management Service加密日志中的 CloudWatch 日志数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html)。

#### KMS 加密示例
<a name="emr-plan-logging-cw-encrypting-logs-with-kms-example"></a>

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

### 查看日志 CloudWatch
<a name="emr-plan-logging-cw-viewing-logs"></a>

集群在启用 CloudWatch 日志的情况下运行后，您可以通过 CloudWatch 控制台或 API 查看和分析日志。

#### 从 EMR 控制台访问日志
<a name="emr-plan-logging-cw-viewing-accessing"></a>

访问集群日志的最快方法是直接从 EMR 控制台访问：

1. 导航到 Amazon EMR 控制台。

1. 从集群列表中选择您的集群。

1. 在集群详细信息页面上，找到**集群管理**部分。

1. 单击 “在 **Amazon 中记录目标 CloudWatch**” 链接。

此链接将您直接带到筛选到集群 CloudWatch 日志组的日志控制台。

#### 从 CloudWatch 控制台访问日志
<a name="emr-plan-logging-cw-viewing-accessing-console"></a>

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

1. 打开 [CloudWatch 控制台](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，选择**日志组**。

1. 查找您的日志组（默认：`/aws/emr/{cluster_id}`或您的自定义日志组名称）

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

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

有关使用 CloudWatch 日志的更多信息，请参阅 [Amazon CloudWatch 日志用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/)。

### 注意事项
<a name="emr-plan-logging-cw-considerations"></a>

#### CloudWatch 代理行为
<a name="emr-plan-logging-cw-considerations-agent-behavior"></a>

Amazon A CloudWatch gent 提供指标和日志功能：
+ 单独启用 CloudWatch 代理（不启用`MonitoringConfiguration`）只能向发布 CloudWatch 指标 CloudWatch。未发送任何日志。
+ 启用 CloudWatch 日志记录需要同时使用 CloudWatch 代理应用程序和带的`MonitoringConfiguration`参数`CloudWatchLogConfiguration`。这样可以将指标和日志记录在一起。

#### 仅启用 CloudWatch 日志记录（禁用 CloudWatch 指标）
<a name="emr-plan-logging-cw-considerations-disabling"></a>

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

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

有关 CloudWatch 指标的更多信息，请参阅[使用 Amazon 监控指标 CloudWatch](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/AmazonCloudWatchAgent-metrics.html)。

#### 已知限制条件
<a name="emr-plan-logging-cw-considerations-disabling-known"></a>

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

#### 私有子网要求
<a name="emr-plan-logging-cw-considerations-disabling-known-private"></a>

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

有关 CloudWatch 日志终端节点的更多信息，请参阅《*AWS 通用参考指南》*中的 [Amazon CloudWatch Logs 终端节点和配额](https://docs.aws.amazon.com/general/latest/gr/cwl_region.html)。

#### 与成本相关的注意事项
<a name="emr-plan-logging-cw-cost-considerations"></a>

CloudWatch 日志费用基于：
+ **数据提取：摄取**到的日志数据量 CloudWatch
+ **存储：**存储的日志数据量，取决于您的保留设置
+ **数据分析：**使用 Logs Insight CloudWatch s 运行查询

要优化成本，请采用以下方法：
+ 为您的日志组设置适当的日志保留期。
+ 使用选择性日志类型仅捕获您需要的日志。
+ 考虑以较低的成本使用 Amazon S3 日志进行长期日志存储。

有关当前定价信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

### 其他资源
<a name="emr-plan-logging-cw-additional-resources"></a>
+ [使用 Amazon 监控指标 CloudWatch](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/AmazonCloudWatchAgent-metrics.html)-有关 CloudWatch 指标收集的信息
+ 为 A@@ [mazon EMR 配置 IAM 角色——EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles.html) 集群的 IAM 角色配置
+ [Amazon CloudWatch Logs 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/)- CloudWatch 日志功能完整指南
+ [AWS CLI EMR 命令参考](https://docs.aws.amazon.com/cli/latest/reference/emr/)-CLI 参考文档