

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

# 自定义步骤日志文件的日志位置
<a name="emr-plan-debugging-step-log-customization"></a>

从 Amazon EMR 7.11 版本开始，您现在可以按步骤自定义 S3 日志记录行为。对于单个步骤，您可以选择一个唯一的 S3 存储桶，用于上传该步骤的日志。您还可以选择一个唯一的 KMS 密钥，该密钥用于在 S3 上加密该步骤的静态日志。这些选项优先于启动集群时配置的任何集群范围的日志记录设置。

## 先决条件
<a name="emr-plan-debugging-step-log-prerequisites"></a>
+ 您的集群应启用集群日志记录。有关更多信息，请参阅[配置 Amazon EMR 集群日志记录和调试。](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-debugging.html)
+ EC2 实例配置文件：
  + 应允许您的集群的 EC2 实例配置文件访问将在该步骤的日志配置中使用的 S3 存储桶。
  + 应允许您的集群的 EC2 实例配置文件访问将在该步骤的日志配置中使用的 KMS 密钥。此外，您的集群的 EC2 实例配置文件应允许`kms:Decrypt`和`kms:GenerateDataKey`操作。

## 步骤日志配置
<a name="emr-plan-debugging-step-log-config"></a>

向 EMR 提交步骤时，可以通过配置该步骤的日志行为。[StepMonitoringConfiguration](https://docs.aws.amazon.com/cli/latest/reference/emr/add-steps.html) StepMonitoringConfiguration 包含 S3 MonitoringConfiguration 对象，您可以在其中为 S3 日志存储桶 and/or 指定该步骤的 KMS 密钥。

以下示例向您展示了如何通过 python 脚本自定义步骤的 S3 存储桶和 KMS 密钥：

```
import boto3

emr_client = boto3.client("emr", region_name="us-east-1")

# Define your step:
example_step = [
    {
        "Name": "Example Step for StepMonitoringConfiguration",
        "ActionOnFailure": "CONTINUE",
        "HadoopJarStep": {
            "Jar": "command-runner.jar",
            "Args": ["bash", "-c", "echo 1"]
        },
        "StepMonitoringConfiguration": {
            "S3MonitoringConfiguration": {
                "LogUri": "s3://your-s3-bucket/", # Replace this with your S3 bucket
                "EncryptionKeyArn": "arn:aws:kms:your-kms-key-arn" # Replace this with your KMS key ARN
            }
        }
    }
]

response = emr_client.add_job_flow_steps(
    JobFlowId="j-xxxxxxxxxxxxx",  # Replace this with your EMR cluster ID
    Steps=example_step
)
```

## 注意事项
<a name="emr-plan-debugging-step-log-considerations"></a>
+ 如果您的集群未启用集群日志记录，即使您提供了，步骤日志也不会上传到 S3 `StepMonitoringConfiguration`。
+ 如果您的步骤运行 Spark 应用程序，则该应用程序的容器日志也将上传到中指定的位置`StepMonitoringConfiguration`。
+ 您可以指定`LogUri`而不指定，反之`EncryptionKeyArn`亦然。对于中省略的任何字段，EMR 都将默认为集群范围的设置。`StepMonitoringConfiguration`