如何将 Amazon EMR 应用程序日志推送到 CloudWatch?

3 分钟阅读
0

我想将 Amazon EMR 版本 5.30.0 及更高版本的 Amazon EMR 应用程序日志推送到 Amazon CloudWatch。

简短描述

使用 CloudWatch 代理从 Amazon Elastic Compute Cloud (Amazon EC2) 实例收集指标和日志。然后,配置 Amazon EMR 集群实例以将应用程序日志发布到 CloudWatch。

解决方法

先决条件:

创建 CloudWatch 代理配置文件

创建配置文件

要从您的 Amazon EMR 实例推送特定的应用程序日志,请使用以下示例之一创建配置文件。

在所有节点上推送 YARN 应用程序的日志

以下示例配置文件从每个 Amazon EMR 实例推送容器日志:

{
    "agent": {
            "metrics_collection_interval": 300,
            "run_as_user": "yarn"
    },
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                    "file_path": "/var/log/hadoop-yarn/containers/application_*/container*/*",
                     "log_group_name": "/emr/applications/",
                     "log_stream_name": "{instance_id}-{ip_address}",
                     "publish_multi_logs" : true
                    }
                ]
            }
        }
    }
}

**注意:**将 /var/log/hadoop-yarn/containers/application_*/container*/* 替换为您的文件路径位置。

在主节点上推送 YARN 和 Hive Server 2 应用程序的日志

以下示例配置文件从 EMR 主节点推送 Yarn 资源管理器日志和 Hive 服务器日志:

{
    "agent": {
            "metrics_collection_interval": 300,
            "run_as_user": "hadoop"
    },
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                    "file_path": "/mnt/var/log/hadoop-yarn/hadoop-yarn-resourcemanager-*",
                    "log_group_name": "/emr/master/logs",
                    "log_stream_name": "{instance_id}-{ip_address}-resourcemanager.log"
                    },
                    {
                    "file_path": "/mnt/var/log/hive/hive-server2.log",
                    "log_group_name": "/emr/master/logs",
                    "log_stream_name": "{instance_id}-{ip_address}-hive-server2.log"
                    }
                ]
            }
        }
    }
}

**注意:**将 /mnt/var/log/hadoop-yarn/hadoop-yarn-resourcemanager-* 替换为您的文件路径位置。

将配置文件上传到 S3 存储桶

将配置文件上传到 Amazon Simple Storage Service (Amazon S3) 存储桶。

**注意:**Amazon EMR 集群必须拥有 AWS Identity and Access Management (IAM) 权限才能访问 S3 存储桶。

启动 Amazon EMR

作为 Amazon EMR 引导操作的一部分,运行以下脚本来配置 CloudWatch 代理并启动 CloudWatch 代理进程:

# == Install CloudWatch Agent ==
echo "=================== BootstrapActions: Install CloudWatch Agent ==================="

sudo yum install amazon-cloudwatch-agent -y
sudo amazon-linux-extras install collectd -y

# Copy config file on the instance
sudo aws s3 cp s3://<your-s3-path>/config.json /opt/aws/amazon-cloudwatch-agent/bin/config.json

# Start the agent with the created config file
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -s -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json

# Status CW Agent
echo "Status CW Agent"
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status

**注意:**将 s3://<your-s3-path>/config.json 替换为您的环境路径。

(可选)提交 Spark 应用程序

要生成示例应用程序日志,请从 Amazon EMR 集群领导者节点运行以下命令以启动 Spark 应用程序:

spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10

使用 CloudWatch 控制台监控 CloudWatch Logs

  1. 打开 CloudWatch 控制台
  2. 在导航窗格中的 Logs(日志)下,选择 Log groups(日志组)。
  3. 根据配置文件选择要查看的日志组。
  4. 如果您使用前面示例中的示例 config.json 文件,请完成以下任务之一:
    要查看应用程序日志,请选择 /emr/applications
    要查看领导者日志,请选择 /emr/master/logs

**注意:**仅当您在日志组上配置留存策略时,CloudWatch 事件日志才会自动删除。您还可以配置留存设置以优化成本。有关详细信息,请参阅更改 CloudWatch Logs 中的日志数据留存

(可选)使用 Systems Manager 在 Amazon EMR 上安装 CloudWatch 代理

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

使用 AWS Systems Manager 存储代理文件内容。然后,在启动 CloudWatch 代理时引用 Systems Manager 文件。

  1. 使用 Systems Manager 控制台AWS CLI 创建 Systems Manager 参数。然后,存储代理文件内容。以下示例使用 AWS CLI 创建参数:

    aws ssm put-parameter \
         --name "AmazonCloudWatch-Config.json" \
         --value "{
                     "agent": {
                             "metrics_collection_interval": 300,
                             "run_as_user": "yarn"
                     },
                     "logs": {
                        "logs_collected": {
                            "files": {
                                "collect_list": [
                                    {
                                    "file_path": "/var/log/hadoop-yarn/containers/application_*/container*/*",
                                    "log_group_name": "/emr/applications/",
                                    "log_stream_name": "{instance_id}",
                                    "publish_multi_logs" : true
                                    }
                                ]
                            }
                        }
                     }
             }" \
         --type String

    **注意:**将 /var/log/hadoop-yarn/containers/application_*/container*/* 替换为您的文件路径位置。在前面的示例中,配置文件推送来自每个 Amazon EMR 实例的容器日志。有关 Systems Manager 参数的详细信息,请参阅创建 Systems Manager 参数

  2. 更新引导操作脚本以引用参数:

    # Start the agent with the created config file
    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -s -m ec2 -c ssm:AmazonCloudWatch-Config.json

相关信息

有条件地运行引导操作

查看主节点上的日志文件

以其他用户身份运行 CloudWatch 代理

查看发送到 CloudWatch Logs 的日志数据

如何从 Amazon EMR 集群实例收集自定义指标并在 CloudWatch 中对其进行监控?

AWS 官方
AWS 官方已更新 1 年前