

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

# 存储日志
<a name="logging"></a>

要在 EMR Serverless 上监控作业进度并排除作业故障，请选择 EMR Serverless 存储和提供应用程序日志的方式。提交任务运行时，请将托管存储、Amazon S3 和 Amazon 指定 CloudWatch 为日志选项。

使用 CloudWatch，指定要使用的日志类型和日志位置，或者接受默认的类型和位置。有关 CloudWatch 日志的更多信息，请参阅[使用 Amazon 登录 EMR 无服务器 CloudWatch](#jobs-log-storage-cw)。对于托管存储和 S3 日志记录，下表列出了选择[托管存储](#jobs-log-storage-managed-storage)、[Amazon S3 存储桶](#jobs-log-storage-s3-buckets)或两者时预期的日志位置和 UI 可用性。


| Option | 事件日志 | 容器日志 | 应用程序 UI | 
| --- | --- | --- | --- | 
|  托管存储  |  存储在托管存储中  |  存储在托管存储中  |  支持  | 
|  托管存储和 S3 存储桶  |  存放在两个位置  |  存储在 S3 存储桶中  |  支持  | 
|  亚马逊 S3 存储桶  |  存储在 S3 存储桶中  |  存储在 S3 存储桶中  |  不支持1  | 

1 建议您保持选中**托管存储**。否则，您将无法使用内置应用程序 UIs。

## 使用托管存储的 EMR Serverless 日志记录
<a name="jobs-log-storage-managed-storage"></a>

默认情况下，EMR Serverless 将应用程序日志安全存储在 Amazon EMR 托管存储中，最长 30 天。

**注意**  
如果关闭默认选项，Amazon EMR 将无法代表您对作业进行故障排除。示例：您无法从 EMR Serverless 控制台访问 Spark-UI。

要从 EMR Studio 关闭此选项，请取消选中 “**提交**作业” 页面的 “**其他设置**” 部分中的 “**允许 AWS 将日志保留 30 天**” 复选框。

要从中关闭此选项 AWS CLI，请在提交作业运行时使用该`managedPersistenceMonitoringConfiguration`配置。

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

如果您的 EMR Serverless 应用程序位于具有适用于 Amazon S3 的 VPC 端点的私有子网中，并且您附加了端点策略来控制访问，请为 EMR Serverless 添加以下权限以存储和提供应用程序日志。请将 `Resource` 替换为 [Sample policies for private subnets that access Amazon S3](https://docs.aws.amazon.com/emr/latest/ManagementGuide/private-subnet-iampolicy.html#private-subnet-iampolicy-regions) 中可用区域表中的 `AppInfo` 存储桶。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EMRServerlessManagedLogging",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "arn:aws:s3:::prod.us-east-1.appinfo.src",
        "arn:aws:s3:::prod.us-east-1.appinfo.src/*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:PrincipalServiceName": "emr-serverless.amazonaws.com",
          "aws:SourceVpc": "vpc-12345678"
        }
      }
    }
  ]
}
```

------

此外，使用 `aws:SourceVpc` 条件键确保请求通过 VPC 端点所附加的 VPC 进行传输。

## 使用 Amazon S3 存储桶的 EMR Serverless 日志记录
<a name="jobs-log-storage-s3-buckets"></a>

在作业将日志数据发送到 Amazon S3 之前，请在作业运行时角色的权限策略中包含以下权限。将 `amzn-s3-demo-logging-bucket` 替换为日志记录存储桶的名称。

------
#### [ JSON ]

****  

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

------

要设置 Amazon S3 存储桶来存储来自的日志 AWS CLI，请在开始运行任务时使用`s3MonitoringConfiguration`配置。为此，请在配置中提供以下 `--configuration-overrides`。

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

对于未启用重试的批处理作业，EMR Serverless 会将日志发送到以下路径：

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

EMR Serverless 将 Spark 驱动程序日志存储在以下路径中

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

EMR Serverless 将 Spark 执行程序日志存储在以下路径中

```
'/applications/<applicationId>/jobs/<jobId>/SPARK_EXECUTOR/<EXECUTOR-ID>'
```

<EXECUTOR-ID> 是一个整数。

EMR Serverless 7.1.0 及更高版本支持流处理作业和批处理作业重试。如果您在启用重试的情况下运行作业，EMR Serverless 会自动在日志路径前缀中添加重试编号，以便更好地区分和跟踪日志。

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

## 使用 Amazon 登录 EMR 无服务器 CloudWatch
<a name="jobs-log-storage-cw"></a>

当您向 EMR Serverless 应用程序提交任务时，请选择 Amazon CloudWatch 作为存储应用程序日志的选项。这允许您使用 CloudWatch 日志分析功能，例如 Logs Insights 和 Live Tail。 CloudWatch 您也可以将日志从其他系统流式传输 CloudWatch 到其他系统，例如 OpenSearch 进行进一步分析。

EMR Serverless 可实时记录驱动程序日志。您可以使用实时跟踪功能或通过 CloudWatch CLI tail 命令 CloudWatch 实时访问日志。

默认情况下，EMR Ser CloudWatch verless 的日志记录处于禁用状态。若要启用，请使用 [AWS CLI](#jobs-log-storage-cw-cli) 中的配置。

**注意**  
Amazon 实时 CloudWatch 发布日志，因此它会从工作人员那里获得更多资源。如果您选择较小的工作线程容量，可能会增加作业运行延迟。如果您启用 CloudWatch 日志记录，我们建议您选择更大的工作人员容量。如果每秒事务数（TPS）速率对于 `PutLogEvents` 来说太低，日志发布也可能会受到限制。 CloudWatch 限制配置适用于所有服务，包括 EMR Serverless。有关更多信息，请参阅[如何确定日志中的限制？ CloudWatch ](https://repost.aws/knowledge-center/cloudwatch-logs-throttling) 在 re *AWS : post* 上。

### 使用登录所需的权限 CloudWatch
<a name="jobs-log-storage-cw-permissions"></a>

在您的任务可以向 Amazon 发送日志数据之前 CloudWatch，请在任务运行时角色的权限策略中包含以下权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:DescribeLogGroups"
      ],
      "Resource": [
        "arn:aws:logs:*:123456789012:*"
      ],
      "Sid": "AllowLOGSDescribeloggroups"
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:PutLogEvents",
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:DescribeLogStreams"
      ],
      "Resource": [
        "arn:aws:logs:*:123456789012:log-group:my-log-group-name:*"
      ],
      "Sid": "AllowLOGSPutlogevents"
    }
  ]
}
```

------

### AWS CLI
<a name="jobs-log-storage-cw-cli"></a>

要将 Amazon 设置为存储 CloudWatch 来自 EMR Serverless 的日志 AWS CLI，请在开始运行任务时使用`cloudWatchLoggingConfiguration`配置。为此，请提供以下配置覆盖。或者，还请提供日志组名称、日志流前缀名称、日志类型和加密密钥 ARN。

如果您未指定可选值，则使用默认日志流将日志 CloudWatch 发布到默认日志组`/aws/emr-serverless``/applications/applicationId/jobs/jobId/worker-type`。

EMR Serverless 7.1.0 及更高版本支持流处理作业和批处理作业重试。如果作业启用了重试，EMR Serverless 会自动在日志路径前缀中添加重试编号，以便更好地区分和跟踪日志。

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

以下内容演示了使用 EMR Serverless 的默认设置开启 Amazon CloudWatch 日志记录所需的最低配置：

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

以下示例显示了所有必需和可选配置，这些配置指定何时为 EMR Serverless 启用 Amazon CloudWatch 日志功能。示例下方还列出了支持的 `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
             }
         }
     }
}
```

默认情况下，EMR Serverless 仅向发布驱动程序 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"]`